现在的位置: 首页 > 综合 > 正文

Android中驱动开发 如何下载并编译Android4.0内核源码goldfish(图文)Linux globalfifo 驱动程序和测试程序

2018年03月16日 ⁄ 综合 ⁄ 共 3388字 ⁄ 字号 评论关闭

一、Android 内核源码下载以及内核源码的编译

       参考博文如何下载并编译Android4.0内核源码goldfish(图文)

       按照官网上的步骤编译内核和android源码即可。

       注意:如果配置android4.0内核源码使用以下命令(不要执行make goldfish_defconfig),否则模拟器虽然可以打开,但是进不了android启动画面

make goldfish_armv7_defconfig 
make

      注意:如果要以模块的形式加载自己编写的驱动,需要配置执行

make menuconfig

       配置内核,将enable loadable module suppot选项选上。否则编译驱动模块时会以下出错:

/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:8: error: variable '__this_module' has initializer but incomplete type
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:9: error: unknown field 'name' specified in initializer
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:9: warning: excess elements in struct initializer
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:9: warning: (near initialization for '__this_module')
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:10: error: unknown field 'init' specified in initializer
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:10: warning: excess elements in struct initializer
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:10: warning: (near initialization for '__this_module')
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:14: error: unknown field 'arch' specified in initializer
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:14: error: 'MODULE_ARCH_INIT' undeclared here (not in a function)
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:14: warning: excess elements in struct initializer
/root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/globalfifo.mod.c:14: warning: (near initialization for '__this_module')

      编译完内核以及android源码后就可以执行以下命令启动模拟器

emulator -kernel ../kernel/goldfish/arch/arm/boot/zImage -sysdir out/debug/target/product/generic/ -system system.img -data userdata.img &

      -kernel选项是内核路径, -sysdir选项是android源码编译输出目录

二、驱动编写

       1、代码的编写,详见Linux globalfifo 驱动程序和测试程序

       注意:驱动程序需要支持自动创建设备文件的功能,即在模块加载的时候调用class_create和device_create两个函数创建设备文件节点,在模块卸载的时候调用相应的函数删除文件节点。

       2、设备模块的编译

        (1)、将设备驱动文件所在目录链接到kernel目录中driver目录下,执行以下命令:

ln -s /root/workspace/androidsrc/packages/apps/android_test/driver/globalfifo/ /root/workspace/kernel/goldfish/drivers/

          (2)、在设备驱动文件所在目录添加两个文件:Kconfig和Makefile,内容分别如下:

config GLOBALFIFO
        tristate "Global Fifo Driver"
        default n
        help
        This is a android test deriver.

Makefile中的文件内容:

obj-$(CONFIG_GLOBALFIFO)+= globalfifo.o

            (3)、在arch/arm/Kconfig和drivers/kconfig这两个文件中的menu "Device Drivers"和endmenu之间添加

source "drivers/globalfifo/Kconfig"

               这样在make menuconfig中就配置globalfifo驱动了;

             (4)、在driver目录下的Makefile文件中添加;

obj-$(CONFIG_GLOBALFIFO)        += globalfifo/

        3、重新配置内核,然后在make menuconfig中选中globalfifo就可以了:

make goldfish_armv7_defconfig
make menuconfig
make

         这样就把驱动编译进内核了。

        4、启动emulator测试以下,emulator指定内核文件,命令以及选项如下:

emulator -partition-size 512 -kernel ../kernel/goldfish/arch/arm/boot/zImage -sdcard sdcard.img -sysdir out/debug/target/product/generic/ -system system.img -data userdata.img  &

        5、进入adb shell,测试输入输出如下:

root@ubuntu:~/workspace/androidsrc# adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
# ls /dev/globalfifo
/dev/globalfifo
# echo "hello world" >>/dev/globalfifo
# cat /dev/globalfifo
hello world



抱歉!评论已关闭.