第一天,linux设备驱动 字符设备(杂)

第一天,linux设备驱动 字符设备(杂)

本类学习笔记是linux设备驱动笔记
linux内核为linux4.0,作者学习随笔记录
学习完结后会抽空总结
遇到的问题和解答,及一些看法
未经作者同意,不得转载

不多介绍,了解过的懂,不了解设备的自行百度

字符设备

1.MKDEV(int major, int minor)
宏则可以通过主设备号和次设备号生成dev_t

dev_t是cdev结构体的成员变量,表示设备号

cdev描述一个字符设备

2.container_of()
container_of()的作用是通过结构体成员的指针找到对应结构体的指针,
类似实现
#define NodeParent(node,parent,name) (parent *)((uint32_t)node - (uint32_t)&(parent *)0->name)

解释下,已知结构体成员变量的地址,将结构体地址找出来通过计算结构体与结构体成员之间的偏移量,从而得出结构体地址。
版权为电子发烧友网所有,若侵权,联系删除
图片版权为电子发烧友网所有,若侵权,联系删除

3.register_chrdev_region
ret = register_chrdev_region(devno, DEVICE_NUM, “globalmem”);
ret = alloc_chrdev_region(&devno, 0, DEVICE_NUM, “globalmem”);
register_chrdev_region()函数用于已知起始设备的设备号的情况,而alloc_chrdev_region()用于设 备号未知,向系统动态申请未被占用的设备号的情况,函数调用成功之后,会把得到的设备号放入第一个 参数dev中。
失败返回<0的一个数

4.kzalloc(sizeof(struct globalmem_dev) * DEVICE_NUM, GFP_KERNEL);
kzalloc()申请了一份globalmem_dev结构体的内存并清0。成功返回0,失败记得注销设备号,一般使用goto

5.GFP_KERNEL作用
————————————————

GFP_KERNEL是linux内存分配器的标志,标识着内存分配器将要采取的行为。
分配器标志分为行为修饰符,区修饰符及类型。行为修饰符表示内核应当如何分配所需的内存。
区修饰符表示内存区应当从何处分配。类型就是行为修饰符和区修饰符的合体。

在include/linux/gfp.h中定义,GFP_KERNEL是内核内存分配时最常用的,无内存可用时可引起休眠.
#define GFP_KERNEL(__GFP_WAIT | __GFP_IO | __GFP_FS)
__GFP_WAIT : 缺内存页的时候可以睡眠;
__GFP_IO : 允许启动磁盘IO;
__GFP_FS : 允许启动文件系统IO。
————————————————
版权声明:本文为CSDN博主「慢慢的燃烧」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010164190/article/details/84789220

6.globalmem_setup_cdev
globalmem_setup_cdev(globalmem_devp, 0);通过申请的到结构体内存将得到

cdev_add()函数和cdev_del()函数分别向系统添加和删除一个cdev,完成字符设备的注册和注 销。

7.模块加载函数以“module_init(函数名)”的形式被指定。它返回整型值,若初始化成功,应返回0。 而在初始化失败时,应该返回错误编码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值