ok6410开发板android底层驱动模块编写,出现insmod:init_module ‘hello.ko’ failed (Exec format error)

来源:互联网 发布:js中的unshift 编辑:程序博客网 时间:2024/06/07 06:11

1.在pc linux 系统上基于linux2.6.32 编译生成hello.ko文件,把hello.ko文件移到以linux2.6.32为内核的linux开发板上,执行insmod hello.ko,成功。

2.把同一个hello.ko文件移植到android开发板,在android串口终端输入insmod hello.ko,失败。显示信息insmod:init_module ‘hello.ko’ failed (Exec format error)。

   查看android系统内核基于linux2.6.36.android内核原文件为forlinx_android2.3_kernel_v1.01.tar.gz,其实是基于linux2.3.6。只是ok6410对其稍作修改。把forlinx_android2.3_kernel_v1.01.tar.gz文件以及arm-linux-gcc-4.3.2.tgz、arm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2两个编译器解压安装到linux系统上,怎么安装就不说了。

3.解压forlinx_android2.3_kernel_v1.01.tar.gz至/home/wangben/ 目录下,命令切换至android2.3_kernel_v1.01

#cd /home/wangben/android2.3_kernel_v1.01

#make clean

#make

4.在/home/wangben/android2.3_kernel_v1.01/arch/arm/boot生成uImage.内核即编译完成。

5.编写hello.c

 
和Makefile文件
 
6.把此两个文件放在同一个文件夹hello内。
将命令切换至hello下
#cd /home/wangben/hello
#make
 
生成hello.ko文件。也可以在linux终端使用命令
 # make    -C  /home/wangben/android2.3_kernel_v1.01/   M=/home/wangben/hello
也可生成hello.ko文件。 -C 后为android 对应linux源码目录 M为hello.c所在目录。
把文件传送到android开发板根目录。在开发板android串口终端把路径切换为android开发板根目录,执行insmod hello.ko.哈哈。。成功执行了。配android 串口终端如下所示:
/ # insmod hello.ko
Hello world
/ # lsmod
hello 593 0 - Live 0xbf006000
/ # rmmod hello
 Hello world exit
/ #
大功告成!!
原创粉丝点击