【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
Linux设备文件系统的起源-1, linux2.4之前, devfs还没出现的时候
当时的Linux设备驱动, 是这么写的:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
static int major = 111;
static struct file_operations hi3516cv500_led_fops = {
.owner = THIS_MODULE,
};
int __init led_drv_init(void)
{
register_chrdev(major, "led_drv", &hi3516cv500_led_fops); //向Linux内核注册设备驱动.
return 0;
}
void __exit led_drv_exit(void)
{
unregister_chrdev(major, "led_drv"); //向Linux内核注销设备驱动.
}
module_init(led_drv_init);
module_exit(led_drv_exit);
MODULE_AUTHOR("yangbkGit");
MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("A led driver.");
MODULE_ALIAS("led");
结果:
-
cat /proc/devices
[命令可以获取到系统中注册的设备,第一列为主设备号,第 2 列为设备名称]
结果: 可以找到我们insmod安装的驱动Character devices:
111 led_drv -
ls -l /dev
[命令可以获取到系统中包含的设备文件,日期的前两列分别给出了主设备号和次设备号]
结果: 找不到我们insmod安装的驱动的设备文件.备注:
主设备号是与驱动对应的概念,同一类设备使用相同的主设备号。
同一驱动可支持多个同类设备,因此次设备号就是用来表示同一驱动下的不同设备。
优点:
- 注册和注销简单, 只需要一个函数就可以了.
缺点:
- 需要为设备驱动程序分配主设备号以及处理次设备号.
- 不会自动创建设备文件, 需要我们手工创建, 非常麻烦.(mknod /dev/xxx c [主设备号] [次设备号])