首页 > 代码库 > 开发Android硬件驱动程序

开发Android硬件驱动程序

一、

1、实现内核驱动程序模块

      驱动程序freg的目录结构如下:

      ~/android-2.3_r1/kernel/goldfish

      ----drivers

            ----freg

                   ----freg.h

                   ----freg.c

                   ----Kconfig

                   ----Makefile

     freg.h和freg.c请参考Linux字符设备驱动http://blog.csdn.net/jltxgcy/article/details/29184391。

     Kconfig如下:

config FREG
	tristate "Fake Register Driver"
	default n
	help
	This is the freg driver for android system.
     在编译驱动程序freg之前,我们可以通过执行make memuconfig命令来设置这些编译选项,以便可以指定驱动程序freg的编译方式。驱动程序freg可以以三种方式来编译。第一种方式是直接内建在内核中;第二种方式是编译成内核模块;第三种方式是不编译到内核中。

     这个文件定义了驱动程序freg的编译选项。

     tristate定义了make menuconfig时弹出界面,配置freg编译选项的名字。

     default n表示默认不编译到内核中。

     Makefile如下:

obj-$(CONFIG_FREG) += freg.o
     其中$(CONFIG_FREG)是一个变量,它的值与驱动程序freg的编译选项有关。如果选择将驱动程序freg内建到内核中,那么变量$(CONFIG_FREG)的值为y;如果选择以模块的方式来编译驱动程序freg,那么变量$(CONFIG_FREG)的值为m;如果变量$(CONFIG_FREG)的值既不为y,也不为m,那么驱动程序freg就不会被编译。

    

2、修改内核Kconfig

     打开arch/arm/Kconfig,找到以下两行内容:     

menu "Device Drivers"
......

endmenu

     在这两行之间添加下面一行内容,将驱动程序freg的Kconfig文件包含进来。

menu "Device Drivers"
source "drivers/freg/Kconfig"
......

endmenu
 

3、修改内核Makefile文件

    在drivers/Makefile,里面添加以下一行内容:

obj-$(CONFIG_FREG)+= freg/

4、编译内核驱动程序模块

    首先执行三句命令:

export ANDROID_PRODUCT_OUT=~/android-2.3_r1/out/target/product/generic  有了这个声明emulator 不用加入那三个img文件
export PATH=$PATH:~/android-2.3_r1/out/host/linux-x86/bin/     emulator命令所在位置
export PATH=$PATH:~/android-2.3_r1/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin  编译内核时使用
    然后执行:


    

    弹出下面的界面:



      Enable loadable module support前面的[ ],可以按Y(会显示*)或者N(什么都不显示),Y代表内核可以支持动态加载模块,N代表内核不支持动态加载模块。

      如果按了Y,那么进入Enable loadable module support后,在子选项"Module unloading",同理按Y,表示支持动态卸载模块。

      只有按了Y,在弹出来的第一个配置页面中用上下箭头键选择“Device Drivers”项,接着在弹出的第二个配置界面中继续用上下箭头键选择“Fake Register Driver”项,按Y或者M键,就可以看到奥选项前面方括号的字符变成"*"或者“M”符号,它们分别表示将驱动程序freg编译到内核中或者以模块的方式编译。


      最后执行:


      

      编译得到的内核镜像文件zImage保存在arch/arm/boot目录下。


二、

1、开发C可执行程序验证Android硬件驱动程序

      ~/android-2.3_r1/kernel/goldfish

      ----external

            ----freg

                   ----freg.c

                   ----Android.mk

     freg.c请参考Linux字符设备驱动http://blog.csdn.net/jltxgcy/article/details/29184391

     Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := freg
LOCAL_SRC_FILES := $(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)
     include $(BUILD_EXECUTABLE),表示当前要编译的是一个可执行应用程序模块。

2、编译C可执行文件

     首先执行以下命令:


     编译成功后,就可以在out/target/product/gerneric/system/bin目录下看到一个freg文件。

  

     然后打包:

     在out/target/product/gerneri目录下会生成Android系统镜像文件system.img。


3、启动模拟器,验证正确性。


     然后adb shell。

     说明我们驱动程序编译正确。