
#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 搞定了,谢谢 |