这一章主要讲了控制发光二极管。
主要学习的内容有,编写驱动,创建LED驱动设备文件的时候:使用cdev_init函数初始化cdev;指定设备号;使用cdev_add函数将字符设备添加到内核中的字符设备数组中;使用class_creat宏创建struct class;使用device_creat函数创建设备文件。
还有学习的内容有,卸载LED驱动的设备文件的时候:调用device_destroy,class_destroy和unregister_chrdev_region方法;设置寄存器与初始化LED驱动;通过字符串控制LED:使用命令行方式或通过write函数;通过I/O命令控制LED:通过ioctl函数发出;LED驱动的模块参数。
在此章节中我们需要知道的是:通过module_param_array宏的第三个参数指定数组长度时需使用指针类型的数据;linux驱动含多个模块参数,参数要用单引号或双引号括起来;指定数组类型的参数值时,逗号前后不能有空格。
虽然 LED 驱动并不复杂,只是控制 了 4个 LED"但 LED 驱动已经包括了 Linux 驱动所有必要的部分 一个完整的 Linux 驱动主要由 内部处理和与硬件交互降部分组成。其中内部处理主要是指 Linux 驱动的装载、卸载、与设备文件 相关的动作处理(读写设备文件、向设备文件发送 νo命令等动作〉以及业务逻辑等。与硬件交互 主要是指通过iowrite32、 . ioread32 等函数与硬件中的寄存器进行数据交互。 -Linux 驱动在不同平台 的移植也是处理这两部分。如果在不同 Lin肌 肉核版本之间的移植,主要是移植第 1 部分( Linux 驱动的内部处理,一般 Linux 内核版本相差较大时, Linu叉’内核的 APl 会有很大差别〉,如果在不同硬件平台的移植,主要是移植第 2部分。
一个完整的LINUX的驱动主要由内部处理和与硬件交互两部分组成。其内部处理主要是LINUX驱动的装载,卸载等等。与硬件交互主要指通过一些函数与硬件中的寄存器进行数据交互。Linux驱动在不同平台也是处理这两部分。所以我还需要深入的学习LINUX驱动的这些技术,以便可以驾轻就熟的编写linux驱动。