给xt800(手机)写一个hello world的内核模块

http://blog.chinaunix.net/space.php?uid=24030346&do=blog&id=145339

我用的是xt800,由于要使用insmod这些命令,所以首先就是获得手机的root权限(adb shell获得root权限)

我看了手机,我的内核是2.6.29-omap1,我就上linux上面去下了一个这个内核。然后是配置,如果这几项不
配置直接将hello.ko加载上去会出现的错误是insmod: init_module '/data/hello1.ko' failed (Exec format error),
用dmesg看发现使版本不一样,我的要求的是2.6.29-omap1 preempt mod_unload ARMv7,所以在配置的时候主要就是
要改一下 preempt mod_unload ARMv7,我用的使make menuconfig配置的,选择system type,然后选择
arm ltd integrator family   ,然后把后面有个support arm v7  processor的选上,在kernel feature上把preempt
选上,把enable loadable module support选上,然后进入选择module unloading,这样在make写的hello模块
就能通过刚才的问题了,但是这时候加载上去会出现mcount(或者__gnu_mcount_nc)unknown symbol,这个使
手机使发行的版本没有调式的符号,所以你编译的时候也不要引人用于调试的信息,我在重新make menuconfig源码,
把所有关于调式的信息都给关了,这个错误也通过了。这时候能够正常加载和卸载hello模块了,但是发现没有运行。
比如里面的printk没有打印任何信息,开始以为使printk在哪里搞错了,但是一直没有找到相关的问题。后面我下载了
android的2.6.29的内核下来,由于这个不是omap1的,所以在版本的位置改了一下(好像说可以去掉版本检查在加载
模块的时候,但是我不知道,所以就改了以下)然后再像上面说的那样做了一遍,再用dmesg时,看到了hello  world
#include <linux/init.h>  
 #include <linux/module.h>  
#include <linux/kernel.h>
 MODULE_LICENSE("GPL");  
 static int __init hello_init(void)  
 {  
     printk("<0>Hello, world\n");  
     return 0;  
 }  
 static void __exit hello_exit(void)  
 {  
     printk("<0>Goodbye, cruel world\n");  
 }  
module_init(hello_init);  
module_exit(hello_exit); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值