来此请教一个 android 的驱动 hello world 报错信息

2017-06-18 18:43:34 +08:00
 capturepointer

我自己不是弄 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 位的,请各位大神指点下呢!

6539 次点击
所在节点    Android
4 条回复
21grams
2017-06-18 18:46:49 +08:00
编译参数加上-fno-pic
capturepointer
2017-06-18 18:53:11 +08:00
@21grams 我是这样编译的,就是不知道应该怎么添加:

sudo make modules M=../../hello ARCH=arm64 CROSS_COMPILE=~/toolchain/aarch64-linux-android-4.9/bin/aarch64-linux-android-

是在 linux 内核的目录下执行的!
21grams
2017-06-18 19:10:59 +08:00
@capturepointer #2 make CFLAGS_MODULE=-fno-pic
capturepointer
2017-06-18 19:40:33 +08:00
@21grams 搞定了,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/369358

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX