Android深度探索--第七章读后感

编写LED驱动

创建LED驱动的设备文件

1.使用cdev_init函数初始化cdev。

2.指定设备号:用1个int类型表示 Linux设备文件的设备号,前12位表示主设备号,后20位表示次设备号设备号有两种指定方法:直接在代码中指定(硬编码);动态分配 (alloc_chrdev_region)。分别使用MAJOR和MINOR宏从设备号号中获取主设备号和次设备号。

3.使用cdev_add函数将字符设备添加到内核中的字符设备数组中

4.使用class_create宏创建struct class

5.使用device_creat函数创建设备文件

卸载LED驱动的设备文件:依次调用device_destroy、class_destroy和unregister_chrdev_region方法。

控制LED:通过字符串控制LED;通过I/O命令控制LED。

LED驱动的模块参数:为Linux驱动指定一个模块参数需要使用module_param(name,type,perm)宏,name表示参数名,type表示参数类型,perm表示读/写权限。

 

混杂设备驱动中需要实现的是填充file_operations结构,然后设置miscdevices的各个字段值,然后注册到内核即可。详细流程如下:

1.编写ioctl接口函数

2.填充file_operations结构,主要是将ioctl函数注册进去

3.填充miscdevice结构,主要是次设备号、fops和设备名称。

4.编写要提供给module_init宏使用的初始化代码,设置LED端口为输出,注册到内核

5.编写要提供给module_exit宏使用的注销代码,主要是注销掉初始化中注册到内核的miscdevice设备

LED驱动虽然并不复杂,只是控制了4LED,但LED驱动已经包括了Linux驱动所必要的部分。一个完整的Linux驱动主要是由内部处理和与硬件交互两部分组成。其中内部处理主要是指Linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑等。

 

原文地址:https://www.cnblogs.com/alancnn/p/5561329.html