#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 位的,请各位大神指点下呢!
1
21grams 2017-06-18 18:46:49 +08:00
编译参数加上-fno-pic
|
2
capturepointer OP @21grams 我是这样编译的,就是不知道应该怎么添加:
sudo make modules M=../../hello ARCH=arm64 CROSS_COMPILE=~/toolchain/aarch64-linux-android-4.9/bin/aarch64-linux-android- 是在 linux 内核的目录下执行的! |
3
21grams 2017-06-18 19:10:59 +08:00
@capturepointer #2 make CFLAGS_MODULE=-fno-pic
|
4
capturepointer OP @21grams 搞定了,谢谢
|