番外篇:linux硬件驱动程序开发简介

源码地址:http://download.csdn.net/detail/yongyu_it/9535181


0、linux内核编译

linux内核编译分3个步骤:

0.1)添加交叉编译工具:export PATH=$PATH:/home/yong/dev/android-2.3/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin。android源代码为我们提供了一个交叉编译工具arm-eabi-gcc。对于2.3版本源码而言位于android-2.3/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin,对于6.0版本的源码而言位于android-6.0/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin。

0.2)根据CPU架构修改Makefile文件(即修改ARCH和CROSS_COMPILE值)。执行make goldfish_defconfig(CUP架构版本不同,文件可能不同。例如arm V7对应的文件是goldfish_armv7_defconfig)。

0.3)执行make

1、硬件驱动程序代码结构

*假设linux内核源码(2.6.29版)的根目录是goldfish,要开发的驱动程序名是freg

goldfish--|

                 |--drivers--|

                                   |--freg--|

                                                |--freg.h

                                                |--freg.c

                                                |--Kconfig    //编译选项配置文件

                                                |--Makefile  //编译脚本


2、编写驱动源码(源代码见附件)

这份源代码(freg.h & freg.c)实现的是:为一个虚拟寄存器(单个字节长度)向用户空间提供三种访问接口。proc文件系统接口,devfs文件系统接口,传统设备文件文件系统接口。

3、编写编译配置文件和编译脚本(源代码见附件)

注意:驱动程序可以以三种方式编译:直接内建在内核中,编译成内核模块,不编译到内核中。

4、编译硬件驱动到内核

经历上面2、3步骤之后,源码开发部分就完成了。接下来是编译驱动到内核,分5个步骤

4.1)修改内核Kconfig文件。因为在0.2步骤里面设置了Makefile文件的CPU架构相关参数,所以这一步也要到对应的目录下修改KConfig文件。以arm架构为例,需要设置arch/arm下的KConfig文件

4.2)修改drivers/Kconfig文件

4.3)修改内核Makefile文件(即drivers/Makefile文件)

4.4)执行make menuconfig修改配置Device Drivers (Enter) --> Fake Register Driver (Y或者M) --> Esc and Save

4.5)执行make

5、验证

用编译好的linux内核作为android系统的内核,用模拟器启动,然后用adb shell验证proc文件系统接口和devfs文件系统接口。




你可能感兴趣的:(Android底层)