1. 字符设备的基本的框架:1.1 组合主设备号和次设备号:设备号是一个 dev_t 的一个数,其实是一个32位的数
[cpp] view plain copy
print?<img id="aimg_tlDto" class="zoom" width="12" height="12" file="https://code.csdn.net/assets/CODE_ico.png" border="0" alt="" /><img id="aimg_WpL14" class="zoom" width="12" height="12" file="https://code.csdn.net/assets/ico_fork.svg" border="0" alt="" />
int hello_major = 250; int hello_minor = 0; dev_t dev = 0; dev = MKDEV(hello_major, hello_minor);
1.2 注册设备号:
注册上设备号后能用 lsmod 查看模块,一般是 xxx.ko 的 xxx
[cpp] view plain copy
print?<img id="aimg_TCSiQ" class="zoom" width="12" height="12" file="https://code.csdn.net/assets/CODE_ico.png" border="0" alt="" /><img id="aimg_OFkgq" class="zoom" width="12" height="12" file="https://code.csdn.net/assets/ico_fork.svg" border="0" alt="" />
int result; int number_of_devices = 1; result = register_chrdev_region(dev, number_of_devices, &quot;hello_dev&quot;); if(result < 0){ printk(KERN_WARING &quot;hello: can't get major number %d\n&quot;, hello_major); return result; }
1.3 取消注册的设备号:
[cpp] view plain copy
print?<img id="aimg_bf29g" class="zoom" width="12" height="12" file="https://code.csdn.net/assets/CODE_ico.png" border="0" alt="" /><img id="aimg_dttHP" class="zoom" width="12" height="12" file="https://code.csdn.net/assets/ico_fork.svg" border="0" alt="" />
dev_t devono = MKDEV(hello_major, hello_minor); unregister_chrdev_region(devno, number_of_devices);
2. 函数说明:MKDEV: --组合主设备号和次设备号,设备号的释放要晚于释放 cdev
包含的库:
linux/fs.h
函数原型:(所在文件include/linux/kdev_t.h)
#define MINORBITS 20
#define MKDEV(ma.mi) (((ma) << MINORBITS) | (mi))
参数:
ma,主设备号前 12 位
mi,次设备号后 20 位
返回值:
设备号,类型是 dev_t ,一般的变量时 dev
register_chrdev_region: --静态注册设备号
包含的库:
linux/fs.h
函数原型:
int register_chrdev_region(dev_t from, unsigned count, const char *name)
参数:
from,设备号,240-254 是留给本地和实验用
count,数量
name,设备的名字,如果数量是多个,那名字应该放在一个数组里,这里就是是实现的(com1,com2,com3...)
会显示在/proc/devices 中
返回值:
0,成功
<0,出错
unregister_chrdev_region: --取消注册的设备号
包含的库:
linux/fs.h
函数原型:
void unregister_chrdev_region(dev_t from, unsigned count)
参数:
from,设备号
count,数量
3. 两个结构体:file_operations: --字符设备操作的集合,包括很多函数的索引 |