声明
本文源自(ISBN 978-7-121-31359-2)的2-6章的课后习题,有删减,个人期末预习自用。
内核模块
模块初始化函数 init_module
模块清除函数 cleanup_module
加载模块命令 insmode、modprobe
查看模块信息 modinfo
内核模块参数类型不包括 结构
内核模块导出所用宏 EXPORT_SYMBOL
内核模块不能调用C库函数接口
在内核模块代码中,不能定义任意大小的局部变量
字符设备驱动
字符设备和块设备的区别不包括 字符设备只能处理可打印字符,块设备可以处理二进制数据
在3.14.25版本内核中,主设备号占12位,次设备号占20位
用于分配主次设备号的函数 alloc_chrdev_region
在字符设备驱动中,struct file_operations结构中的函数指针成员不包括 close
高级IO操作
ioctl接口函数的命令包含 幻数、参数传输方向、参数大小,不包含 权限
proc文件系统是一种伪文件系统,通常挂载在/proc目录下,包含了进程相关信息,但硬件信息主要输出非该文件系统
阻塞型IO会唤醒多个进程
I/O多路复用在select、poll或epoll系统调用中发生阻塞
在一次异步操作中,可以将多个I/O请求合并
当打开一个字符设备文件后,异步通知默认是非使能的
mmap的最大优点是将内核空间的一片内存映射到用户空间,从而提高效率
大多数字符设备都不支持文件定位操作
中断和时间管理
在中断处理例程中,如果中断是共享的,内核会决定具体调用哪一个驱动的中断服务例程(❌)
中断的下半部机制包括软中断、tasklet、工作队列
关于中断下半部机制,在下半部中可以响应新的硬件中断
下半部机制工作在进程上下文的是工作队列
修改低分辨率定时器的expires成员使用mod_timer函数
关于低分辨率定时器,所有定时器都放在一个组中,遍历整个链表非常耗时(❌)
高分辨率定时器是用ktime_t来定义时间的
互斥和同步
内核中的并发情况有硬件中断、软中断和tasklet、抢占内核的多进程环境、普通的多进程环境、多处理器或多核CPU
local_irq_save的作用是禁止本CPU中断并将之前的中断使能状态保存下来
可以对原子变量进行的操作有自减并测试结果是否为0、加上一个整数值并返回结果、进行位清除
在所有系统中,即不管是否抢占、是否是多核,自旋锁都是忙等待(❌)
如果不能获得信号量,则进程休眠(❌)
写者完成写后立即更新指针(❌)
完成量的complete函数可以唤醒所有一个进程