![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
driver
文章平均质量分 83
driver
码农编程录
openbmc软件开发
展开
-
【driver4】kobject,platform总线
当调用read,系统调用从文件中读取一些字节时,linux内核除了读取指定字节数据外,还会额外预读取一些数据到内核的缓存区里,下次再读取文件内容时,会先从内核缓存区里查找,如果找到,则省去等待慢磁盘定位和数据传输时间,大多数linux系统中预读取数据长度为128kb,也可根据系统可用的内存大小进行动态调整。写入文件内容时,函数将数据回写到内核缓冲区后才进行返回,(read,wtite)内核在稍后一段时间内才会将内容写入磁盘中,除了更新文件内容外,还会更新元数据(文件大小,文件最后修改的时间)。原创 2024-06-24 00:15:00 · 527 阅读 · 0 评论 -
【driver5】pcie
如下阴影是32位寄存器即31-0对应400-403【400,401,402(存储16-9bit),403(存储8-0bit)】大端存储,devmem2…高低高是一次reset(相当于手动跳帽一次pin),System reset and PCIe reset绑定在一起,不能为低扯着,为高释放掉。主机即pci驱动程序初始化会扫描设备即读出配置寄存器,知道了是某类型寄存器和想申请多大空间。一个pci设备最多有8种功能,每种功能都有256字节的配置寄存器,怎样选中某一种功能,再怎么选中功能里哪一个寄存器?原创 2024-06-24 00:18:15 · 153 阅读 · 0 评论 -
【driver3】调试:调用堆栈函数,printk,动态打印,top,dstat,perf,ftrace,proc,debugfs,性能优化,内存泄漏,主频,驱动稳定性
printk会关中断影响性能,如果在usb的read/write里printk,那么usb就没法直接用了。我想加很多调试信息,但是不想影响linux性能,所以用动态打印,调试时才打开,control节点默认不输出,如下操作才输出,+p是转为printk。likely一般用在if判断里,cpu会把当前指令后面指令预取出来,等到执行时就去执行,效率提高,但是也要判断后面那条指令大概率执不执行,执行的话取出来,不执行则跳过。dmesg会显示不全,因为环形buffer会覆盖。如下案例:mpstat,perf。原创 2024-06-24 00:14:03 · 544 阅读 · 0 评论 -
【driver1】内核模块,设备号,字符驱动,设备读写,同步和互斥,ioctl,进程休眠,时间和延时,延缓
udev接到这事件后就会获取这些设备信息,这些信息大部分保存在/sys/class/xx文件系统(sysfs)中。udev获得到这些信息后就会根据获得到的信息以及udev规则在/dev下生成对应设备节点。linux系统中有一个后台程序udev(用来自动生成设备节点的软件),设备文件->设备号->cdev。如下次设备号个数不是次设备号(hello_minor)。如下测试读写设备,group改变组,mode改变权限。如下static int…只是初始化给默认值。原创 2024-06-24 00:13:44 · 2019 阅读 · 4 评论 -
【driver2】proc文件系统,内存分配,数据类型/移植/对齐,内核中断,通过IO内存访问外设
【这种情况多数发生在中断处理上,当一个中断发生后,在中断回调函数中希望尽可能短和尽可能快执行,所以把那些费时间的,不是很紧要的任务放稍后执行即放在中断回调函数后执行】。rmmod就没有/proc/下接口了,"hello proc"有11个字符(连空格和换行符),所以show next调用了11次。非延迟工作队列效果跟tasklet类似,把API换成没有delayed的即可。如下delta连1次jiffies值都没达到。再去执行其他操作,可使用。执行指定操作,可使用。原创 2024-06-24 00:13:54 · 1838 阅读 · 1 评论