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

时间: 2024-10-26 10:55:20

Android深度探索--第七章读后感的相关文章

Android深度探索——第七章读书笔记及心得

控制发光二极管 ——第七章读书笔记及心得 通过本章的学习掌握了一个真正和硬件打交道的linux驱动程序.知道了一个完整的linux驱动只要由内部处理与硬件交互两部分组成.其中的内部处理指linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑.与硬件交互主要是指通过部分函数与硬件中的寄存函数进行数据交互. Linux驱动直接与硬件打交道,但是并不是linux启动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.每一个连接linux的硬件在I/O内存中都会有映射首地址. 创建LED

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

对于编写linux驱动程序的步骤:主要有第一步,建立其驱动骨架,任何类型的程序都有一个基本的结构:第二步,注册和注销设备文件,任何一个linux驱动都需要有一个设备文件,否则应用程序将无法与驱动程序交互.建立设备文件的工作一般在第一步编写的处理linux初始化工作的函数中完成,删除设备文件一般在第1步编写的处理linux退出工作的函数中完成:第三步,指定与驱动相关的信息,驱动程序是自描述的:第四步是指定回调函数,linux 驱动包含了多种动作,也可称为事件:第五步,编写业务逻辑,这一步是Linu

Android深度探索第三章读后感

第三章主要介绍了Git.   Git并不是学习Android移植和Linux内核.驱动开发必须掌握的技术,但对于想深入研究底层技术的人来说,Git将成为学习过程中必不可少的工具. 学习新技术的最好方式不是阅读技术书籍或者在网上查看牛人写的文章,而是自己阅读自己感兴趣的源代码.因为源代码是最能体现软件作者的真正思路的.学习Linux内核开发也是相同的道理,只是找几本书看看,并不能真正体会Linux内核的核心设计理念.直接阅读Linux内核的源代码才是唯一可以接近Linux内核的方法 .虽然一开始很

Android深度探索第四章读后感

第一章中讲过Android移植主要就是Linux内核的移植,而Linux内核移植主要是Linux驱动的移植,所以为了开发和测试Linux驱动,有必要学习在Ubuntu Linux下如何搭建两套开发环境:Android应用程序开发环境和Linux内核开发环境.Linux内核开发环境的搭建是重点中的重点.下面根据书上的内容和网上的资料写出了步骤: 1配置Android源代码下载环境: # mkdir ~/bin # PATH=~/bin:$PATH \\创建用于存放脚本文件的目录 # curl ht

Android深度探索第七章总结

通过本章的学习掌握了一个非常实用的linux驱动程序.知道了一个完整的linux驱动只要由内部处理与硬件交互两部分组成.其中的内部处理指linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑.与硬件交互主要是指通过部分函数与硬件中的寄存函数进行数据交互. Linux驱动是与本机的I/O内存进行交互.每一个连接linux的硬件在I/O内存中都会有映射首地址. 创建LED驱动的设备文件的步骤: 1.使用cdev_init函数初始化cdev 2.指定设备号 3.使用cdev_add函数将字符

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

建立Linux驱动骨架:Linux内核在使用驱动时需要装载与卸载驱动,装载驱动:建立设备文件.分配内存地址空间等:module_init 函数处理驱动初始化,卸载驱动:删除设备文件.释放内存地址空间等:module_exit函数处理退出,包含这两个函数的两个宏的C程序文件也可看做是Linux驱动的骨架,注册和注销设备文件:任何一个Linux驱动都需要有一个设备文件,否则应用程序将无法与驱动程序交互.建立设备文件:在第一步编写的处理Linux初始化工作的函数中完成.misc_register函数,

Android深度探索第七章

linux驱动直接与硬件交互,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.每一个连接Linux的硬件在I/O内存中都会有映射首地址.任何现代的操作系统主机插入硬件时都会检测到该硬件,但硬件被检测只能说明在内核空间中建立了I/O内存,要想用户空间的程序可以访问硬件,还必须安装可与I/O内存交互的驱动程序. 读者可以根据下面的步骤创建一个设备文件: (1)使用cdev_init函数初始化cdev; (2)指定设备号,可以直接在代码中指定也可以动态分配: (3)使用

Android深度探索第七章心得

从上到下,一个软件系统可以分为:应用程序.库.操作系统(内核).驱动程序.开发人员可以专注于自己熟悉的部分,对于相邻层,只需要了解它的接口,无需关注它的实现细节.以点亮LED为例,这4层软件的协作关系如下: 1.应用程序使用库提供的open函数打开代表LED的设备文件. 2.库数据open函数传入的参数执行“swi”指令,这条指令会引起CPU异常,进入内核. 3.内核的异常处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库,进而返回给应用程序. 4.应用程序得到文件句柄后,使用库提供的

Android深度探索第四章总结

Android深度探索第四章主要是源代码的下载和编译.要下载Android源代码首先需要配置Android源代码下载环境(1.创建一个用于存放下载脚本文件的目录:2.下载repo脚本文件:3.创建用于存放Android晕代码的目录:4.初始化:5.开始下载Android源代码).介绍了Android源代码目录结构(/bootable这个目录下存放 android 部分启动相关代码,包括 android 的 recovery模式,一般用于进行 OTA 升级,由 C++ 编写,可以看到用于显示的ui