文章目录
- 1.内核模块:必须包含module.h
- 2.内核模块参数:权限位是用在sysfs文件系统里,只读权限用S_IRUGO设置
- 2.1 extern:声明来自另一个模块
- 3.设备号:主设备号对应驱动程序,具有相同主设备号设备使用相同驱动程序,次设备号用来标识连接系统中相同的设备
- 3.1 字符设备申请主设备号:三个函数,三个宏
- 3.2 块设备申请主设备号:hello_major为0是系统自动分配的主设备号即register_blkdev函数分配
- 4.字符设备的驱动程序:控制外部设备都是通过读写dev下设备文件实现
- 5.驱动加载后自动生成设备节点:让系统udev自动生成/dev目录下的设备节点,udevadm info
1.内核模块:必须包含module.h
主设备号:哪一类。次设备号:哪一个。设备文件->设备号->cdev。
编译模块之前要如下安装内核源码树目录。
如下make后显示的第一行就是make命令。lsmod
就是查看/pro/modules
里文件。/sys是一个基于RAM的FS,和 /proc差不多。
2.内核模块参数:权限位是用在sysfs文件系统里,只读权限用S_IRUGO设置
2.1 extern:声明来自另一个模块
3.设备号:主设备号对应驱动程序,具有相同主设备号设备使用相同驱动程序,次设备号用来标识连接系统中相同的设备
3.1 字符设备申请主设备号:三个函数,三个宏
3.2 块设备申请主设备号:hello_major为0是系统自动分配的主设备号即register_blkdev函数分配
4.字符设备的驱动程序:控制外部设备都是通过读写dev下设备文件实现
5.驱动加载后自动生成设备节点:让系统udev自动生成/dev目录下的设备节点,udevadm info
linux系统中有一个后台程序udev(用来自动生成设备节点的软件),当一个设备接入到系统中时会发送一个事件到udev
。udev接到这事件后就会获取这些设备信息,这些信息大部分保存在/sys/class/xx文件系统(sysfs)中。udev获得到这些信息后就会根据获得到的信息以及udev规则在/dev下生成对应设备节点。