自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq_38089448的博客

持续学习,快速迭代,构建自己的知识体系

  • 博客(87)
  • 资源 (1)
  • 收藏
  • 关注

原创 【rsyslog】rsyslog开发环境搭建和使用

此文章描述如何使用源代码构建rsyslog的流程和测试方法,如果想在ubuntu上使用,可以直接执行来完成安装。

2025-02-13 16:04:42 449

原创 【Raspberry PI】Raspberry PiSP摄像头前端(rpl-cfe)

PiSP 摄像头前端 (CFE) 是一个将 CSI-2 接收器与 一个简单的 ISP,称为前端 (FE)。CFE 有四个 DMA 引擎,可以从四个单独的流写入帧 从 CSI-2 接收到内存。也可以路由其中一个流 直接给 FE 做最少的图片处理,写两个版本 (例如,未缩放和缩小版本)将接收到的帧保存到内存中,并且 提供接收到的帧的统计信息。

2025-01-13 09:37:56 651

原创 【EPS32硬件】ESP32最小系统绘制

以ESP32-WROOM-32E原理图为例● EPAD 管脚 39 可以不焊接到底板。如果您想将 EPAD 焊接到底板,请确保使用适量焊膏,避免过量焊膏造成模组与底板距离过大,影响管脚与底板之间的贴合。● 为确保 ESP32 芯片上电时的供电正常, EN 管脚处需要增加 RC 延迟电路。 RC 通常建议为 R = 10 kΩ, C =1 µF,但具体数值仍需根据模组电源的上电时序和芯片的上电复位时序进行调整。整体设计采用立创EDA设计初次焊接,焊工不太好,只焊接了几个主要芯片,测试板子功能,后面会再焊接

2024-12-22 11:50:34 1055

原创 【STM32】STM32 IAP BootLoader

IAP,即在线应用编程,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后,可以方便地通过遗留的通信口对产品中的固件程序进行更新升级。通常在实现IAP功能时,即用户程序运行中作自身的更新操作, 需要在设计固件程序时编写两个项目代码, 第一个项目程序不执行正常的功能操作, 而只是通过某种通信方式(如 USB、 USART)接收程序或数据, 执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。

2024-12-03 00:16:28 947

原创 【嵌入式Web服务器】嵌入式平台内置Web框架选型

在嵌入式平台中,内置Web界面通常用于设备配置、监控和控制。

2024-11-04 16:30:04 2761

原创 【MemTester】内存测试工具Memtester使用方法

MemTester是一个用于压力测试内存子系统的工具,它特别有效于发现间歇性和非确定性的故障。

2024-11-01 17:53:33 3501 1

原创 【Linux内核】Cgroup原理和使用

cgroups(Control Groups)是Linux内核的一个特性,用于对进程组的物理资源(如CPU、内存、磁盘I/O等)进行细粒度的控制和监控。cgroups可以帮助你限制、记录和隔离资源使用,但它本身并不直接用来“拉高CPU负载”。相反,cgroups通常用于限制进程可以使用的资源量,以防止它们消耗过多资源而影响系统上的其他进程。如果用户想要某个进程或进程组能够获得更多的CPU时间,以通过调整cgroups的CPU配额来实现。

2024-11-01 13:56:42 978

原创 【systemd】systemd功能简介及优化

1.含义Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)Service unit:系统服务Target unit:多个 Unit 构成的一个组Device Unit:硬件设备Mount Unit:文件系统的挂载点Automount Unit:自动挂载点Path Unit:文件或路径Scope Unit:不是由 Systemd 启动的外部进程Slice Unit:进程组Snapshot Unit:Systemd 快照,可以切回某个快照。

2024-10-15 16:16:17 1107

原创 【ESP32】ESP32系列选型

ESP32系列处理器简介

2024-10-13 22:22:27 8812

原创 【xboot】xboot环境搭建

XBoot是一个为嵌入式系统设计的高效、灵活的启动加载器(bootloader),它支持多种处理器架构,如ARM和MIPS,并具有广泛的设备树支持。它由Alex Forencich开发和维护,目的是提供一种简单、轻量级的方式来引导嵌入式系统。XBoot的主要特点包括:1.支持多种处理器架构,包括ARM和MIPS。2.提供了对多种SoC和开发板的设备树支持。3.高度可配置,以满足特定需求和限制。4.支持多种文件系统类型,例如FAT、EXT2/EXT3/EXT4、JFFS2等。

2024-07-25 09:57:29 630

原创 【RawSocket】RawSocket的使用方法

RawSocket是数据链路层的socketRaw socket(原始套接字)是一种特殊的网络套接字类型,它允许应用程序直接发送和接收底层的网络数据包,而不需要经过标准的传输层协议(如TCP或UDP)的处理。3.4.5.6.7.

2024-07-24 10:57:17 1800

原创 【UML】UML的使用方法

在UML图中,类图、用例图、时序图是较为常用的。类图是面向对象系统建模中最常用和最重要的图,是定义其他图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图中最基本的元素是类、接口。软件设计师设计出类图后,程序员就可以用代码实现类图中包含的内容。

2024-07-23 10:23:00 1270

原创 【生产-消费模型】生产者 - 消费者模型原理及实现

假设有两个进程(或线程)A、B和一个固定大小的缓冲区,A进程生产数据放入缓冲区,B进程从缓冲区中取出数据进行计算,这就是一个简单的生产者-消费者模型。这里的A进程相当于生产者,B进程相当于消费者。

2024-07-23 10:19:57 2666

原创 【编解码】视频编码原理及主要指标

H264压缩技术主要采用了以下几种方法对视频数据进行压缩。帧内预测压缩,解决的是空域数据冗余问题。帧间预测压缩(运动估计与补偿),解决的是时域数据冗徐问题。整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化。CABAC压缩。I帧:关键帧,采用帧内压缩技术。P帧:向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧音压缩技术。B帧:双向参考帧,在压缩时,它即参考前而的帧,又参考它后面的帧。采用帧间压缩技术。

2024-07-23 10:06:45 1554

原创 【selinux】Linux的信息安全模块 - selinux

selinux全称(Security-Enhanced Linux)安全增强型Linux,它是一个Linux内核模块,也是Linux的一个安全子系统。

2024-07-23 09:56:29 862

原创 【Linux网络】ip route 命令

*6.boardcast(广播):**目的地是广播地址,数据包作为链路广播发送,通常是向本地网络广播;**4.prohabit(禁止):目的地不可达,数据包会被丢弃,**ICMP 会返回。/etc/iproute2/rt_tables文件中。

2024-07-23 09:53:22 2910

原创 【GSML】千兆多媒体串行链路GMSL协议

GSML,中文名称千兆多媒体串行链路,是Maxim公司推出的一种高速串行接口,适用于音频,视频和控制信号的传输,通信介质支持同轴电缆以及屏蔽双绞线,使用50欧同轴电缆或者100欧屏蔽双绞线(STP)时,长度可达15m甚至更长。核心技术时串行器/解串器,简称SerDes.首先通过串行器将并行数据流转为串行数据流,然后通过更高的频率进行传输,之后通过解串器将接收到的串行数据流转换为并行数据流。

2024-07-22 18:14:03 748

原创 【Ubuntu服务器】用户分配及sudo权限赋予

接下来即可在本地通过SSH工具远程访问Ubuntu服务器了,我的电脑到此已经可以成功连接,如果访问还是不成功,请检查Ubuntu防火墙配置工具。连接成功后,即可通过SSH来增加使用成员,并赋予sudo权限(因为日常开发经常会用到sudo,所以未做权限限制)各用户空间是无法互相访问的,如有共享文件,可以在其他目录建立公共目录,作为共享资源的存放地址。安装完成后,SSH服务将被自动启动,验证SSH服务是否被开启。配置完成后,各个用户即可通过自己的用户账号和密码登录服务器。以下操作需以root账户进行操作。

2024-07-22 18:09:25 436

原创 【windows】在windows右键菜单加入在当前路径打开cmd功能

在Ubuntu中可以在一般目录下点击右键选中Open in Terminal即可打开一个命令终端,由于自己平常在windows上开发时也常常使用cmd命令行进行操作,但是每次都需要提前复制好要访问的路径,打开cmd后,cd到需要到的路径,这样做比较麻烦,所以在windows右键菜单栏中添加一个类似于Ubuntu上的功能可以带来一定程度的方便。在任意目录下点击右键,菜单中就会出现cmd_here的功能项,点击后就会之间在当前路径打开cmd。

2024-07-22 18:07:09 347

原创 【Ubuntu】如何将Ubuntu软件源切换到国内源?

当初次部署Ubuntu镜像时,会发现更新软件时速度非常慢,因为Ubuntu的软件都来自与国外,所下载或更新软件时的速度非常慢,此时就可以选择切换到国内的软件源来解决此问题。使用编辑器打开sources.list文件,并将1中复制的配置信息替换到sources.list中,然后保存退出。清华源: https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/打开清华源链接,切换到自己所使用的Ubuntu版本,复制文本框中的配置信息。至此完成更新Ubuntu软件源整个过程。

2024-07-22 17:59:54 4100

原创 【VirtualBox】VirtualBox磁盘扩容

关闭正在运行的镜像,Tools->Properties,选中需要扩容的vdi磁盘,拖动下main的Size进度条进行扩容,完成后点击Apply。5.删除/dev/sda1下的一些文件腾出空间,然后reboot重启即可,正常起来后用上面的方法对磁盘进行扩容,后续即可正常使用。注意未分配和主分区/dev/sda1之间不能有其他分区,所以我们需要将他们之间的分区删除掉,然后在resize主分区。启动镜像,打开命令行,输入gparted启动硬盘扩容工具,如果没有则使用。查询磁盘的使用空间确实已经到了极限。

2024-07-22 17:55:49 566

原创 【网络调试工具】wrieshark&tcpdump

网络报文的参数非常多,在实际抓包的时候都是采用条件过滤的选项来获取我们关心的报文。

2024-07-22 10:50:08 714

原创 【Linux文件系统】文件描述符fd是什么?

1.用户open文件得到一个非负数句柄fd,之后针对改文件的IO操作都是基于这个fd2.文件描述符fd本质上讲就是数组索引,fd等于5,对应数组的第5个元素,数组是进程打开的所有文件的数组,数组元素类型为struct file;3.结构体task_struct对应一个抽象的进程,files_struct是这个进程管理该进程打开的文件数组管理器。fd对应着数组的编号,每一个打开的文件用file结构体表示,内含当前偏移等信息。

2024-07-22 10:38:44 850

原创 【Linux中断】中断下半部-tasklet的原理与使用

(1)一种特定类型的tasklet只能运行在一个CPU上,不能并行,只能串行执行(2)多个不同的类型的tasklet可以并行在多个CPU上(3)软中断是静态分配的,在内核编译好后,就不能再改变了。但tasklet灵活很多,可以在运行时改变tasklet是在两种软中断类型的基础上实现的,因此如果不需要软中断的并行也行,tasklet就是最好的选择。所以也可以说tasklet是软中断的一种特殊用法,即延迟情况下的串行执行。

2024-07-22 10:38:08 509

原创 【Linux中断】中断下半部-软中断softirq的原理与使用

软中断是中断下半部的典型处理机制,是随着SMP的出现应运而生的,也是tasklet实现的基础,软中断的出现是为了满足中断上半部和下半部的区别,使得对时间不敏感的任务延后执行,而且可以在多个CPU上并行执行,使得总的系统效率可以更高。

2024-07-22 10:37:32 842

原创 【Linux中断】Linux系统中断机制简述

1.使能中断,初始化相应的寄存器2.注册中断服务函数,也就是向irqTable数组的指定标号处写入中断服务函数3.中断发生以后进入IRQ中断服务函数,IRQ的中断服务函数在irqTable里面查找具体的中断处理函数,找到以后执行相应的中断处理函数。

2024-07-22 10:36:34 815

原创 【协程】进程,线程和协程

协程是用户态的线程,通常创建协程时,会从进程的堆中分配一段内存作为协程的栈。线程的栈有8MB,而协程的栈大小通常只有几十KB。而且C库的内存池不会给协程预分配内存,因为它感知逼到协程的存在。这样更低的内存空间为高并发提供了保证为什么要搞出协程:1.节省CPU资源,避免系统内核级的线程频繁切换,造成CPU资源浪费,而协程是用户态的线程,用于可以自行控制协程的创建和销毁,可以避免系统级线程上下文切换造成的资源浪费。

2024-07-22 10:33:43 259

原创 【mmap】零拷贝 - mmap原理

使用 mmap 对文件进行读写操作时可以减少内存拷贝的次数,并且可以减少系统调用的次数,从而提高对读写文件操作的效率。由于内核不会主动同步 mmap 所映射的内存区中的数据,所以在某些特殊的场景下可能会出现数据丢失的情况(如断电)。为了避免数据丢失,在使用 mmap 的时候可以在适当时主动调用 msync 函数来同步映射内存区的数据。

2024-07-22 10:30:15 965

原创 【Linux内核】Linux内核 - 进程管理

进程是在处理器上执行的一个实例,进程可使用任意资源以便Linux内核可以处理完成它的任务。在Linux上运行的所有进程都是通过task_struct结构来管理的,被称为进程描述符。一个进程描述符包含单个进程在运行期间的所有必要的信息,比如进程表示,进程的属性,构建进程的资源等等。

2024-07-19 15:42:18 476

原创 【v4l2】Linux多媒体框架 - videobuf2概览

框架可以分为两部分看:控制流+数据流,之前已经大概的描述了控制流,数据流部分就是video buffer,V4l2 buffer的管理是通过videobuf2来完成的,它充当于用户空间和驱动空间之间的中间层,并提供模块化的内存管理功能。上图大体包含了videobuf2的框架。

2024-07-19 15:41:31 479

原创 【v4l2】Linux多媒体框架 - v4l2 core详解

V4L2是Video for linux2的简称,是Linux中关于视频设备的内核驱动框架。定义在include/linux/videodev2.h。

2024-07-19 15:39:16 809

原创 【cmd】Linux常用命令

ps -a:显示现行终端机下所有程序,包括其他用户的程序ps u:已用户为主的格式来显示程序状况ps x:显示所有程序,不以终端机来区分STAT有关状态D:不可中断的静止R: 正在执行中S: 静止状态T: 暂停执行Z: 不存在但暂时无法消除W: 没有足够的内存分页可分配。

2024-07-19 15:36:49 215

原创 【workqueue】workqueue原理和机制

/ 工作队列中的工作链表// 获取work// 工作队列中的线程工作项结构体// 将该工作项挂载到工作链表上// 工作项绑定的函数指针// 用户自定义数据,当工作项执行时会调用此函数work:工作项结构体指针work_func : 回调函数,工作项执行时调用work_data : 用户自定义数据,回调函数参数返回值:无此接口初始化work指针指向的工作项,并绑定回调函数work_func以及用户自定义数据work_data。

2024-07-19 15:34:26 755

原创 【Linux内核】Linux内核-进程创建过程

在 fork 创建进程的时候,地址空间 mm_struct、挂载点 fs_struct、打开文件列表 files_struct 都要是独立拥有的,所以都去申请内存并初始化了它们。但由于今天我们的例子父子进程是同一个命名空间,所以 nsproxy 还仍然是共用的。其中 mm_struct 是一个非常核心的数据结构,用户进程的虚拟地址空间就是用它来表示的。对于内核线程来讲,不需要虚拟地址空间,所以 mm 成员的值为 null。

2024-07-19 15:32:38 524

原创 【Linux内核】Linux中进程与线程的区别

上面调用 dup_task_struct 时传入的参数是 current,它表示的是当前任务。和 copy_files 函数类似,在 copy_fs 中如果指定了 CLONE_FS(创建线程的时候),并没有真正申请独立的 fs_struct 出来,近几年只是在原有的 fs 里的 users +1 就算是完事。从代码看出,如果指定了 CLONE_FILES(创建线程的时候),只是在原有的 files_struct 里面 +1 就算是完事了,指针不变,仍然是复用创建它的进程的 files_struct 对象。

2024-07-19 15:23:17 1140

原创 【pthread】POSIX接口简述

POSIX Threads简称Pthreads,此标准定义了一套C语言的类型,函数和常量。线程管理:包括线程创建(create),线程分离(detach),线程连接(join)及设置和查询线程属性的函数等互斥锁:用于限制线程对共享数据的访问,保护共享数据的完整性。包括创建、销毁、锁定和解锁互斥锁及一些用于设置或修改互斥量属性等函数。条件变量:用于共享一个互斥量的线程间的通信。包括条件变量的创建、销毁、等待和发送信号等函数读写锁和屏障:包括读写锁和屏障的创建、销毁、等待及相关属性设置等函数。

2024-07-18 14:40:28 413

原创 【pthread】pthread - 线程的高级属性

线程接收取消请求后会结束运行的地方, 根据POSIX标准,pthread_join()、pthread_testcancel()、pthread_cond_wait()、pthread_cond_timedwait()、sem_wait()等会引起阻塞的系统调用都是取消点。pthread多线程程序中所有线程共享信号处理函数,如果在一个线程中为某个信号绑定信号处理函数,当这个信号触发后,其他的线程都会跟随响应,如果在一个线程中修改信号处理函数,这个结果也会影响到其他线程。设置取消状态,由线程自己调用。

2024-07-18 14:38:36 405

原创 【I/O模型】异步IO的原理和使用

但是使用默认信号SIGIO会存在一些问题,SIGIO是标准信号,不可靠信号,非实时信号,不支持信号排队机制,不知道文描述符发生了什么事件,未判断文件描述符是否处于可读的就绪态,所以需要进一步优化(实时信号替换)。很多三方库异步IO库不是真正的异步IO,而是通过多线程来模拟异步IO,比如libeio。以上步骤完成后,进程可以去执行其他的任务,当I/O就绪时,内核会向进程发送一个SIGIO信号,当进程接收到信号时,会执行预先注册号的信号处理函数,这样就可以在信号处理函数中进行I/O操作了。

2024-07-18 14:36:20 1047

原创 【I/O模型】什么是IO多路复用?

什么是IO多路复用:单线程或单进程同时检测若干文件描述符是否可以执行IO操作的能力。使用场景:应用程序需要处理来自多条事件流中的事件,比如web服务器入nginx,需要同时处理来自N个客户端的事件。逻辑控制流在时间上的重叠叫做并发。传统方法是使用多线程或多进程来处理,但是资源开销成本很大:1.线程/进程创建成本2.CPU切换不同线程/或进程成本3.多线程资源竞争而IO多路复用是一种可以在单线程/进程处理多个事件流的方法。所以IO多路复用解决的本质问题是在用更少的资源完成更多的事。

2024-07-18 14:35:00 535

原创 【Linux IO模型】IO模型 - epoll的原理与应用

实现处理tcp请求,为一个连接对应一个线程,在高并发的场景,这种多线程模型于epoll相比就相形见绌了。epoll是linux2.6内核的一个新的系统调用,在设计之初,就是为了替代select,poll线性复杂度的模型,epoll的事件复杂度为O(1),也就是说epoll在高并发场景,随着文件描述符的增长,有良好的可扩展性。

2024-07-18 14:33:38 395

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除