《Android深度探索》第七章心得体会

时间:2021-05-23 16:27:47

      《Android深度探索》第七章讲的是LED将为我闪烁:控制发光二极管。1.创建LED驱动的设备文件:第1步:使用cdev_init函数初始化cdev;第2步:指定设备号,Linux设备文件的设备号分为主设备号和次设备号。设备号有直接在代码中指定和动态分配两种指定方法;第3步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中;第4步:使用class_create宏创建struct class;第5步:使用device_create函数创建设备文件。2.卸载LED驱动的设备文件,需要依次调用device_destroy、class_destroy和unregister_chrdev_region方法。3.控制LED,LED驱动可以通过字符串和I/O命令两种方式控制LED。

      通过对第七章的学习,我知道了Linux驱动与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互。所谓I/O内存是通过各种接口连接到主机的硬件在主机内存中的映射。Linux内核的内存管理模块负责同步I/O内存与硬件中的数据。每一个连接Linux的硬件在I/O内存中都会有映射首地址。LED驱动是本书第一个真正与硬件打交道的Linux驱动,虽然LED驱动并不复杂,只是控制了4个LED,但LED驱动已经包括了Linux驱动所有必要的部分。一个完整的Linux驱动主要由内部处理和硬件交互两部分组成。其中内部处理主要是指Linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑等。与硬件交互主要是指通过iowrite32、ioread32等函数与硬件中的寄存器进行数据交互。Linux驱动在不同平台的移植也是处理这两部分。如果在不同的Linux内核版本之间的移植,主要是移植第1部分,如果在不同硬件平台的移植,主要是移植第2部分。