博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符设备驱动3:驱动代码与文件系统中的设备信息的关系
阅读量:6976 次
发布时间:2019-06-27

本文共 2065 字,大约阅读时间需要 6 分钟。

不使用mknod,在驱动代码里自动生成设备号:

 

1.在内核驱动中用class_create,device_create两个函数,内核启动后就会在sysfs文件系统中建立相应的设备信息,记得把sysfs文件系统挂载到/sys,为下一步做准备

2.去官网下载udev,编译生成udevd,udevstart......等9个工具,只要把udevd,udevstart拷到自己的文件系统,配置好udev,并在系统启动时运行(可以在rcS脚本中加入),这样内核启动后,udev就会根据/sys里信息在/dev下建立设备文件.[1]

 

module被加载时,udev 自动在/dev下创建my_device设备文件(前提是用了class_create和class_device_create[2])。 我们在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在 /dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。

 

 

测试:查看设备,对比文件系统中的设备和驱动代码的关系

 

#define DEVICE_NAME     "ledd"  /* 加载模式后,执行”cat /proc/devices”命令看到的设备名称 */#define LED_MAJOR       231     /* 主设备号 */static int __init s3c24xx_leds_init(void){    ...    register_chrdev(LED_MAJOR, DEVICE_NAME, &s3c24xx_leds_fops);    leds_class = class_create(THIS_MODULE, "ledc");        leds_class_devs[0] = class_device_create(leds_class, NULL, MKDEV(LED_MAJOR, 0), NULL, "leds");    for (minor = 1; minor < 4; minor++)    {        leds_class_devs[minor] = class_device_create(leds_class, NULL, MKDEV(LED_MAJOR, minor), NULL, "led%d", minor);        if (unlikely(IS_ERR(leds_class_devs[minor])))            return PTR_ERR(leds_class_devs[minor]);    }        ...}# cat /proc/devices     Character devices:        1 mem        2 pty        3 ttyp        ...        231 ledd        253 usb_endpoint        254 rtc# ls /sys/class/| grep ledledc# ls -l /sys/class/ledcdrwxr-xr-x    2 0        0               0 Jan  1 00:18 led1drwxr-xr-x    2 0        0               0 Jan  1 00:18 led2drwxr-xr-x    2 0        0               0 Jan  1 00:18 led3drwxr-xr-x    2 0        0               0 Jan  1 00:18 leds# ls -l /dev | grep ledcrw-rw----    1 0        0        231,   1 Jan  1 00:18 led1crw-rw----    1 0        0        231,   2 Jan  1 00:18 led2crw-rw----    1 0        0        231,   3 Jan  1 00:18 led3crw-rw----    1 0        0        231,   0 Jan  1 00:18 leds

 

 

 

 

参考:

1.  加载驱动时怎么使系统自动创建设备文件    http://bbs.chinaunix.net/thread-1960639-1-1.html2.  linux-2.6.35内核版本中class_create()和device_create的使用    http://blog.csdn.net/farsight2009/article/details/8814121

 

你可能感兴趣的文章
32个云服务通过第三批可信云服务认证 信用体系建设持续加力
查看>>
云生态:云计算棋局中的“胜负手”
查看>>
顺德拟投15亿元建大数据中心
查看>>
隐藏恶意软件的三大黑客技术
查看>>
《Spark与Hadoop大数据分析》——1.3 工具和技术
查看>>
数字时代反思竞争理论
查看>>
思科年中报告:坏人正变得更坏
查看>>
IDC:移动化发展增速 传统企业需要制定全方位移动战略
查看>>
物超所值的七大Windows安全工具
查看>>
从零学React Native之07View
查看>>
BYOD管理市场 EMM潜力无限
查看>>
[React Native]StatusBar的使用
查看>>
2016年BYOD四大趋势
查看>>
被WannaCry勒索蠕虫加密的文件是否能复原?
查看>>
三大步骤找到理想云数据归档服务
查看>>
2015年的智能大招是怎么憋出来的?
查看>>
2.5万名网友认同流量跑得快 电信计量监管陷尴尬局面
查看>>
你未必知道 十大服务器虚拟化优化窍门
查看>>
POTN——新时代网络融合的必经之路
查看>>
浅谈各地降低能耗技术 关注可持续发展
查看>>