也可以到我的博客上查看:https://dantezy.xyz/posts/lkmpg/
在https://sysprog21.github.io/lkmpg/上有新版,示例代码至少在5.15版本内核上可以成功编译。1
一到五章介绍如何写一个Helloworldmodule。
第六章介绍如何实现一个字符设备驱动。实现一个设备驱动,其实就是注册一个设备号(MAJOR),创建一个设备文件,为这个文件实现文件操作(file_operation)。
第七章介绍实现procfs,第八章介绍实现sysfs。内核在5.6.0改变了procfs的实现方式。在这之前,procfs也是通过文件操作实现的。在此之后,procfs由proc_ops实现。这个回答里面认为procfs和sysfs的不同就在于procfs是通过文件操作实现的,sysfs只有两个接口:show
和store
。
第八章介绍实现一个ioctl来改变设备行为。在用户态看来,只有一个复杂的ioctl接口,在内核看来,就是无数的*_ioctl接口。
第九章非常有趣,它讲述如何绕开内核保护改写systemcall.这涉及到:如何找systemcall地址、绕开写保护以及多个module改写systemcall的情况(非常危险)。
十一章和十二章介绍了内核的同步机制。这两章非常潦草。第十二章可以看成内核锁的简单示例。
十三章介绍如何利用tty进行输出以及timerapi。里面的示例是操作键盘,让键盘的LED灯闪烁。这个示例挺有意思的。
十四章介绍tasklet和work_queue。十五章介绍中断处理,十六章介绍内核加密接口。这三章都很一般。
十七章实现了一个虚拟输入设备。十八章介绍了标准设备模型。十九章介绍了(un)likely
宏以及statickey,这两个工具可以优化代码性能。二十章简单说两件事:moduleprogramming里面不能用标准库的函数以及关了中断赶紧干活
However,register_chrdev()wouldoccupyarangeofminornumbersassociatedwiththegivenmajor.
单纯看书不会明白这里为什么这样说,要看源代码才知道register_chrdev
最终调用__register_chrdev_region
并占用256个minornumber。
这本书对内核开发菜鸟和SRE都有所裨益。
__kernfs_create_file
创建的。↩︎相关推荐
© 2023-2025 百科书库. All Rights Reserved.
发表评价