我自己不是弄 android 的,但是写了一个 hello world 的驱动程序,始终无法解决问题,我先上代码:
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
MODULE_LICENSE("Dual BSD/GPL");
int dev[8];
static int __init hello_init(void) {
int i;
for (i = 0; i < 8; i++){
dev[i] = kzalloc(sizeof(*dev[i]), GFP_KERNEL);
}
pr_info(KERN_EMERG "Hello world!\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_EMERG "Hello exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
我在 ubuntu 下面交叉编译后,是给华为 P8 手机编译的,通过 adb push 到华为手机上面,然后使用
insmod hello.ko
提示我安装失败,我使用 dmesg 查看日志信息,看到如下提示:
insmod module hello: unsupported RELA relocation: 311
我只知道是因为
kzalloc(sizeof(*dev[i]), GFP_KERNEL);
这句话引起的,但是不明白为什么,另外 P8 手机是 64 位的,请各位大神指点下呢!