1.驱动(driver)和设备(device)的关系:
这涉及到两个/dev/文件夹 和 /proc/devices文件
/dev/目录下的文件表示设备,这些设备是通过mknod创建的.
/proc/devices文件的每一项都表示一个设备类型,也即驱动.
mknod在创建/dev/下的设备时,需要指定设备类型。如:
mknod /dev/somedev c
1 20 1(major)表示类型为mem.查看/proc/devices文件看到,1对应的是mem. 通过ls -l /dev查看/dev底下有好几个设备类型都是mem。也就是说当你
register_chrdev()时,你只是写了一块代码,这些代码还没有具体地跑起来,mknod创建设备文件,由于指定了你的设备类型(major),这个设备文件对应的write,read,ioctl函数和你写的函数绑定在一起了。当read write ioctl这个设备文件时就执行了你写的代码。
20(minor)是为了区分1这种类型下的多个设备。 major与minor一起才能确定这个设备。
设备类型由
register_chrdev(),register_blkdev()注册。
register_chrdev(),
register_blkdev()可以由kernel调用,也可以由内核模块调用。
2.模块(module)和驱动(driver)的关系:
模块就是*.ko文件,可以由insmod动态地加载到内核,模块调用
register_chrdev( ),这个模块也就是驱动了。
3.linux的模块主要有几类,可以动态增强内核功能:
Functionality | Functions for Dynamic Registration |
---|
Character devices | (un)register_chrdev( ) |
Block devices | (un)register_blkdev( ) |
Binary formats | (un)register_binfmt( ) |
File systems | (un)register_filesystem( ) |
Serial interfaces | (un)register_serial( ) |
Network adapters | (un)register_netdev( ) |
Layer-3 protocols | dev_add_pack( ), dev_remove_pack( ) |
Layer-4 protocols (TCP/IP) | inet_add_protocol( ), inet_del_protocol( ) |
Console drivers | tty_(un)register_driver( ) |
Symbol tables | (un)register_symtab( ) |
Modules | init_module( ), cleanup_module( ) |
阅读(1782) | 评论(0) | 转发(0) |