LDD3 D04 2018.01.04 星四

  • 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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值