自定义博客皮肤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的博客

持续学习,快速迭代

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

原创 【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 145

原创 【RawSocket】RawSocket的使用方法

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

2024-07-24 10:57:17 322

原创 【UML】UML的使用方法

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

2024-07-23 10:23:00 748

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

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

2024-07-23 10:19:57 640

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

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

2024-07-23 10:06:45 792

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

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

2024-07-23 09:56:29 598

原创 【Linux网络】ip route 命令

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

2024-07-23 09:53:22 957

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

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

2024-07-22 18:14:03 216

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

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

2024-07-22 18:09:25 131

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

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

2024-07-22 18:07:09 142

原创 【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 398

原创 【VirtualBox】VirtualBox磁盘扩容

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

2024-07-22 17:55:49 177

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

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

2024-07-22 10:50:08 525

原创 【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 656

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

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

2024-07-22 10:38:08 360

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

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

2024-07-22 10:37:32 663

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

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

2024-07-22 10:36:34 616

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

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

2024-07-22 10:33:43 204

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

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

2024-07-22 10:30:15 577

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

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

2024-07-19 15:42:18 235

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

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

2024-07-19 15:41:31 354

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

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

2024-07-19 15:39:16 289

原创 【cmd】Linux常用命令

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

2024-07-19 15:36:49 178

原创 【workqueue】workqueue原理和机制

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

2024-07-19 15:34:26 345

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

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

2024-07-19 15:32:38 314

原创 【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 867

原创 【pthread】POSIX接口简述

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

2024-07-18 14:40:28 276

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

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

2024-07-18 14:38:36 258

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

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

2024-07-18 14:36:20 377

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

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

2024-07-18 14:35:00 385

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

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

2024-07-18 14:33:38 310

原创 【Linux环境部署】Python版本更新及替换

当前默认python版本为2.7.18。2.查看当前环境的python环境。1.测试当前默认python版本。3.删除默认python版本。8.pip检查哪些包需要更新。6.pip安装程序包。7.pip3更新软件。

2024-07-18 14:32:32 299

原创 【根文件系统】根文件系统是什么?

根文件系统也叫roofs,它不同于FATFS、FAT和EXT4,更像是一个文件夹或者目录。根目录和子目录中会有很多的文件,这些文件时Linux运行所必须的,比如库、常用软件和命令、设备文件、配置文件等等。根文件系统是linux内核启动以后mount的第一个文件系统,然后从根文件系统中读取初始化脚本,比如rcS,inittab等。根文件系统和Linux内核是分开的,单独的Linux内核是无法工作的,必须要搭配根文件系统。如果不提供根文件系统,Linux内核就会提示Kernel panic的提示。

2024-07-18 14:30:25 329

原创 【Linux软中断】信号与信号集(signal&sigset)

软中断信号(signal)用来通知进程发生了。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号只是用来通知进程发生了什么事件,并不给进程传递任何数据。收到信号的进程对信号的处理方法有三种:• 类似中断的处理程序,进程可以指定处理函数,回调处理• 忽略某个信号,对此信号不做任何处理• 对此信号的处理保留系统默认值,对大部分信号的缺省操作时使得进程终止。

2024-07-18 14:29:15 261

原创 【RawSocket】Linux环境下RawSocket收发实例

第三个参数htons(ETH_P_ALL)只对recvfrom有意义。用这个socket发送的数据,都需要自己维护数据包协议首部,包括网络数据包中的mac地址。

2024-07-17 14:50:06 235

原创 【LIN总线】LIN总线传输协议

LIN(Local InterconnectNetwork)总线,是基于UART/SCI(Universal Asynchronous Receiver-Transmitter/SerialCommunication Interface通用异步收发器/串行通信接口)的低成本串行通信协议。相对于CAN总线而言,LIN总线协议较为简单,对单片机的要求也并不高,基本的串口就可以实现,因而成本较低。作为CAN总线的辅助总线,LIN总线广泛应用于车门、车窗、车灯以及中控锁等车身控制领域。

2024-07-17 13:24:18 938

原创 【SPI】SPI总线协议及驱动框架

SPI采用主-从(master-slave))模式的控制的方式。一个Master设备可以通过提供Clock以及对slave设备进行片选来控制多个Slave设备,SPI协议还规定Slave设备的Clock由Master设备通过SCK管脚提供给Slave设备,Slave设备本身不能产生和控制Clock,没有Clock则Slave设备不能工作。

2024-07-17 13:19:21 538

原创 【STM32】STM32启动流程-从启动文件分析

栈的作用是用于局部变量,函数调用,函数形参等的开销,STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式只是将各自存储空间的地址映射到0x00000000中。第35行:表示开辟栈的大小为 0X00000400(1KB),EQU是伪指令,相当于C 中的 define。第37行:开辟一段可读可写数据空间,ARER 伪指令表示下面将开始定义一个代码段或者数据段。此处是定义数据段。ARER 后面的关键字表示这个段的属性。段名为STACK,可以任意命名;NOINIT 表示不初始化;

2024-07-17 10:42:48 610

原创 【ARM中断系统】Cortex-A和Cortex-M中断系统异同

CortexA以A7为例,Cortex-A7也有中断向量表,中断向量表也是在代码最前面。向量地址中断类型中断模式0x00复位中断(Reset)特权模式(SVC)0x04未定义指令中断(Undefined Instruction)未定义指令终止模式(Undef)0x08软中断(Software Interrupt,SWI)特权模式(SVC)0x0C指令预取中止中断(Prefetch,Abort)中止模式0X10数据访问中止中断(Data Abort)中止模式0X14。

2024-07-17 10:40:22 526

原创 【中断与异常】ARM Cortex-M的中断与异常

前面的符号如NMI_Handler、HardFault_Handler)将被执行弱化处理,如果整个代码在链接时遇到了名称相同的符号(例如与NMI_Handler相同名称的函数),那么代码将使用未被弱化定义的符号(与NMI_Handler相同名称的函数),而与弱化符号相关的代码将被自动丢弃。当系统正在服务一个中断时,如果有一个更高优先级的中断触发,那么处理器同样会打断当前运行的中断服务例程,然后把老的中断服务例程上下文的PSR,R0,R1,R2,R3和R12寄存器自动保存到中断栈中。

2024-07-17 10:37:17 255

空空如也

空空如也

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

TA关注的人

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