22:05-22:40 35m p64-p75
Scull 的内存使用
为了彻底理解代码,我们需要知道“如何分配”,而“为何分配”则表明驱动程序编写所需做出的选择。
两个核心函数 kmalloc()和 kfree()
将NULL 指针传给 kfree 是合法的。
scull 设备的布局, 每个内存区被称为一个量子,是多大?怎样理解 ?
使用宏和整数值同时允许在编译期间和加载阶段进行配置,对于驱动程序中任何不确定的或与策略相关的数,都推荐使用这种技巧。
read 和 write 方法
read 和 write 方法的 buff 参数是用户空间的指针。内核代码不能直接引用其中的内容。
驱动程序必须访问用户空间的缓冲区,这种访问必须通过内核提供的专有函数来完成,以确保安全性。
copy_to_user() 和 copy_from_user()
如果参数已经检查过,则用下面两个函数,更有效
_ _copy_to_user() 和 _ _copy_from_user()
通常内核会将文件位置的修改传回 file 结构。但是 pread() 和 pwrite() 不会。
如果出错,用户空间得到的返回值始终是-1.为了找到错误原因,用户空间的程序必须访问 errno 变量。这是规范。
read 方法
write 方法
10-17
10-17
10-17