相信很多驱动初学者对于安卓平台的驱动移植有一些搞不懂。最开始我也是一头雾水。今天就来以一个初学者的角度,讲解一下android驱动移植的方法。
步骤相对比较简单:
1:增加源代码
2:在Kconfig中增加内容
3:在makefile中增加内容
具体来说定义一个虚拟的字符硬件设备该设备名为freg 这个是我们本次进行移植的程序:
首先准备好需要移植驱动的源文件 freg.c 以及freg.h文件。
找到该驱动的归类。比如emmc驱动存放在mmc目录下。
~/Android/kernel/goldfish
----drivers
----freg
----freg.h
----freg.c
----Kconfig
----Makefile
freg是kernel目录下goldfish分类下的一个驱动,由四个文件组成。freg.h和freg.c是源代码文件,kconfig是编译选项配置文件,makefile是编译脚本文件。
移植工作源代码由厂商提供,这里不做介绍。
这里说明一下kconfig文件:
config FREG
tristate "Fake Register Driver"
default n
help
This is the freg driver for android system.
这个文件定义了驱动程序freg的编译选型,在编译之前可以通过makemenuconfig命令来设置这些编译选项,这个配置选项中可以看出,三种模式 y 直接编译到内核,n不编译到内核中。M 编译为模块.so文件。
接下来是makefile文件:
obj- $(CONFIG_FREG) += freg.o
这个是驱动程序freg的编译脚本文件,其中$(CONFIG_FREG)是一个变量。这个变量的值是y直接编译到内核,变量值为M 则编译为模块。如果变量值不是y也不是n则不会进行编译。
此时我们已经为驱动程序freg编写了kconfig文件,在默认情况下执行makemenuconfig命令配置内核编译选项时,编译系统无法找到这个kconfig文件,我们需要修改内核的根Kconfig文件,这样编译系统能够找到freg 的kconfig文件,。
我们在kernel/arch/arm(非固定视当前架构情况而定)目录下的kconfig文件。实际使用中一般是以项目名后缀,找到
menu “device driver”
endmenu
在这两行内容之间提那家,将驱动程序的freg的Kcongfig文件包含进来
sourece“drivers/freg/Kconfig”
修改内核makefile文件:
默认情况下。执行make命令编译内核时,编译系统无法找到这个makefiel。因此需要在driver目录下的makefile文件。driver/makefile 文件添加:
obj-$(CONFIG_FREG)+= freg/
至此该驱动freg已经移植完成。
检验是否移植成功:
查询当前驱动程序通过什么文件系统进行的。进入当前文件系统中。比如使用proc文件系统,
进入proc目录
android: /proc # cat freg 查看当前freg程序的寄存器值。