picaso77
从事嵌入式linux软件开发工作
展开
-
Linux内核vfs
通用文件系统模型对象:1、超级块对象 struct super_block 存放文件系统相关信息,对于基于磁盘的文件系统该对象对应存放在磁盘上的文件系统控制块; --》通过链表进行管理,需要回写对磁盘保证数据一致性2、索引节点对象 struct inode 存放具体文件的信息,基于磁盘的文件系统该对象对应存放在磁盘上的文件控制块,每个索引节点对象对应文件系统中的一个文件;---》通过链表,包括未使用、正在使用、已使用链表进行管理,同时也通过inode_hashtable...原创 2021-06-28 21:30:57 · 329 阅读 · 0 评论 -
bpf原理与入门
一、bpf架构如上图所示,bpf由六部分构成,以下为其在bpf中的作用:bpf工具:该部分涉及bpf用户态程序、bpf的编译工具,通过bpf编译工具如Clang、LLVM将bpf用户态程序编译成bpf字节码;加载器:可以简单理解为bpf系统调用,将bpf字节码加载到内核;验证器:对bpf程序的合法性进行检查;bpf虚拟机:实现将bpf字节码转化成机器码并运行,使用内核解释器的话需要根据字节码执行对应的机器码,使用JIT可以直接将字节码编码生成机器码;静态跟踪:为内核为bpf程原创 2022-03-26 17:25:06 · 4370 阅读 · 0 评论 -
自旋锁与互斥锁
一、概念自旋锁:CPU一直检测锁状态尝试进行锁的获取,这种锁等待方式也称旋转或忙等待;互斥锁:当进程或线程获取锁失败时释放CPU,由系统调度转到执行其它进程或线程,这种锁等待方式也可称为阻塞;二、特点和使用场景使用锁的前提条件为系统运行在多处理器CPU下;自旋锁:不释放CPU,适用于希望锁延迟时间短的场景;互斥锁:发生线程或进程调度,存在较大的任务切换上下文开销,适用于等待时间较长的场景。...原创 2022-03-01 08:39:37 · 1219 阅读 · 0 评论 -
程序运行过程
一、程序编译过程gcc HelloWorld.c -E -o HelloWorld.i 预处理:加入头文件,替换宏;gcc HelloWorld.c -S -c HelloWorld.s 编译:包含预处理,将 C 程序转换成汇编程序;gcc HelloWorld.c -c HelloWorld.o 汇编:包含预处理和编译,将汇编程序转换成可链接的二进制程序;gcc HelloWorld.c -o HelloWorld 链接:包含以上所有操作,将可链接的二进制程序和其它别的库链接在一起,.原创 2021-10-27 21:10:08 · 504 阅读 · 0 评论 -
X86处理器的寄存器与寻址
一、多功能寄存器多功能寄存器二、专用寄存器三、段寄存器原创 2021-10-16 22:17:41 · 158 阅读 · 0 评论 -
X86处理器与外设的数据读写
1、处理器总线地址总线:传送需要寻址的地址;数据总线:传送cpu与存储器或IO之间读写的数据;控制总线:用于控制读写和访问的是存储器还是IO,大多数计算机系统都有4条控制连线:存储器读控制总线、存储器写控制总线、IO读控制总线、IO写控制总线;2、数据读写 当处理器读取一个存储单元的内容时,通过地址总线向存储器发出一个地址,然后发出存储器读控制信号,最后将从存储器读出的数据通过数据总线送到微处理器,对应存储器写、IO写、IO读的流程也类似;...原创 2021-10-16 21:49:39 · 349 阅读 · 0 评论 -
linux内核访问文件
一、读写文件读文件是基于页的,内核总是一次传送几个完整的数据页。原创 2021-10-04 21:52:49 · 343 阅读 · 0 评论 -
页高速缓存
1、address_space对象 属于同一持有者的页缓存描述符的链表,该对象记录在持有者索引节点对象数据结构中。页描述符的mapping字段指向address_space、index字段表示在所有者地址空间中的页偏移量; 页的持有者可能是文件也可能是块设备文件,若为文件则文件的索引节点对象的i_data字段指向address_space对象,索引节点的i_mapping字段指向同一索引节点的i_data字段,address_space的host字段也指向其索引节点;若持有者...原创 2021-09-11 21:36:58 · 184 阅读 · 0 评论 -
用户空间获取物理地址代码详解
一、背景Linux文件目录中的/proc记录着当前进程的信息,称其为虚拟文件系统。在/proc下有一个链接目录名为self,这意味着哪一个进程打开了它,self中存储的信息就是所链接进程的。self中有一个名为pagemap的文件,专门用来记录所链接进程的物理页号信息。这样通过/proc/pid/pagemap文件,允许一个用户态的进程查看到每个虚拟页映射到的物理页,其内容如下:* /proc/pid/pagemap. This file lets a userspace process fin.原创 2021-07-21 20:35:22 · 526 阅读 · 0 评论 -
linux内存寻址和分页机制
一、内存寻址逻辑地址 -----分段单元------》 线性地址 ------分页单元-------》物理地址 (分段单元和分页单元为硬件电路)1、内存地址: 逻辑地址:用于机器指令(汇编、CPU指令)进行寻址,由段标志符(16位,也称段选择符)+ 段偏移地址组成(指定段内相对地址的偏移量) 线性地址:也称虚拟地址,32位无符号,可以表示4GB的地址; 物理地址:32位或36位无符号(与CPU的管脚数对应),用于内存芯片进行内存单元寻址,与从CPU到内存总...原创 2021-01-26 01:59:39 · 303 阅读 · 0 评论 -
块设备驱动
一、文件系统访问块设备的路径系统调用函数调用vfs函数,vfs获取要访问的文件的描述符、偏移量、数据长度等参数;vfs层获取文件的address_mapping结构体,若所请求的磁盘空间在磁盘高速缓存中,则直接通过操作磁盘高速缓存;vfs未获取到文件对应的磁盘缓存,则通过映射层来查找需要访问的磁盘空间地址。文件和磁盘空间都被拆分成块,映射层调用具体文件系统函数,根据文件inode访问文件对应的磁盘索引节点,根据请求的文件块号(逻辑块号,以文件偏移量进行计算)在磁盘索引节点的数据结构中查找对应原创 2021-08-30 20:36:31 · 142 阅读 · 0 评论 -
Linux设备驱动
一、设备驱动程序模型1、sysfs文件系统 用来体现设备之间的层级关系,设备驱动通过注册kobject、kset、subsystem来创建对应的sysfs目录;kobject:具体的设备对象kset:具有相同层级的设备对象的集合;subsystem:包含多个kset描述设备上下级依赖关系,在kobject创建的sysfs目录下进行体现,在设备的device结构体中,通过parent、children成员进行记录该上下级关系; kset自身通过内嵌的kobj...原创 2021-08-28 22:53:14 · 98 阅读 · 0 评论 -
Linux IO体系结构--io设备
一、IO设备与CPU的连接CPU通过前端总线(北桥)连接RAM控制器、通过后端总线(南桥)连接外部硬件高速缓存;CPU和IO设备的数据通路属于后端总线,通常称为I/O总线,包括对I/O设备寻址的地址总线和传输数据的数据总线;每个io设备都通过其io控制器提供的io接口上的io端口挂载到io总线连接到cpu,io体系结构如下所示:二、IO端口cpu访问io端口的方法:a、io映射方式:cpu提供的io地址空间来映射io设备的io端口(io地址空间大小为io地址总线可访问的范围,io原创 2021-08-26 20:14:04 · 364 阅读 · 0 评论 -
proc文件系统
/proc/sys/fs/file-max:整个系统所有进程可以打开的文件限制数;/proc/sys/fs/file-nr:单个进程可以打开的文件限制数;/proc/self/pagemap:存放当前进程页表的页帧物理地址信息;/proc/self/map_files/:该目录下存放记录当前进程mmap的线性区的文件,文件名为线性区的起始虚拟地址-结束虚拟地址;/proc/$pid/clear_refs:只写,只用于进程的拥有者,清除用于估算内存使用量的PG_Referenced和AC..原创 2021-08-01 17:39:40 · 688 阅读 · 0 评论 -
kexec源码分析
一、kexec -l流程:以elf-x86_64为例 kexec-tools程序解析参数后执行my_load: 1、slurp_decompress_file:读取新内核镜像到内存; 2、get_memory_ranges:获取kexec使用的内存地址访问; 3、根据命令-t参数指定的镜像文件类型,执行对应文件类型对象的probe ops进行文件类型的校验,执行elf_x86_64_probe build_elf_exec_inf...原创 2021-06-30 20:31:11 · 943 阅读 · 0 评论 -
openeuler内核热切换用户态nvwa工具
该工具可作为服务端和客户端运行,服务端和客户端都绑定同一个进程间通信socket,服务端进行服务的注册,监听客户端的请求并执行客户端的请求对应的动作,客户端进行命令的获取并将命令发送到服务端;服务端流程:startServer : ---》loadConfig:解析nvwa-server.yaml、nvwa-restore.yaml中的配置 ---》起goroutine执行runServer: 注册up...原创 2021-06-30 11:56:55 · 545 阅读 · 0 评论 -
pci总线驱动及pci设备驱动注册
一、PCI总线注册1、pci总线注册对应构造函数static int __init pci_driver_init(void){ return bus_register(&pci_bus_type);}postcore_initcall(pci_driver_init);#define postcore_initcall(fn) __define_initcall("2",fn)#define __define_initcall(level,fn) \...原创 2020-12-22 03:01:12 · 910 阅读 · 0 评论