如何解决如何在android自定义内核中构建Helloword
insmod: failed to load hello.ko: Function not implemented
在内核构建到诸如“hello world”之类的注销消息期间,我遇到了这样的错误,以下步骤将重现该错误:
1)我从git clone https://android.googlesource.com/kernel/goldfish/ -b android-goldfish-3.18
2) 还使用 git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9
3) 我将目录更改为金鱼并创建了文档中提到的路径 (github)
4) 然后我尝试在内核目录 (goldfish) 中使用此 sudo make ARCH=x86_64 CROSS_COMPILE=/home/ana/x86_64-linux-android-4.9-nougat-dev/bin/x86_64-linux-android-
构建内核并设置 LOADABLE_MODULES=y
5)下一步,我在helloKernel目录下创建了hello.c文件和与之相关的Makefile。
hello.c
#include<linux/module.h>
#include<linux/init.h>
#include<linux/kernel.h>
MODULE_AUTHOR("Robert P. J. Day");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_VERSION("2:1.0") ;
MODULE_DESCRIPTION("You have to start somewhere.");
static int hello_init(void){
printk(KERN_ALERT "Hello TheLittleNaruto it’s your first driver.\n");
return 0;
}
static void hello_exit(void){
printk(KERN_INFO "Goodbye TheLittleNaruto No point in keeping this driv er running.\n");
}
module_init(hello_init);
module_exit(hello_exit);
生成文件
obj-m := hello.o
KERNELDIR := /home/ana/goldfish/
PWD :=$(shell pwd)
ARCH=x86_64
CROSS_COMPILE=/home/ana/x86_64-linux-android-4.9-nougat-dev/bin/x86_64-linux-android-
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)ld
CFLAGS_MODULE=-fno-pic
modules:
make -C $(KERNELDIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=$(PWD) modules
clean:
rm *.o *.ko *.mod.c *.order *.symvers
- 在同一个目录中,我用这个
sudo make ARCH=x86_64 CROSS_COMPILE=/home/ana/x86_64-linux-android-4.9-nougat-dev/bin/x86_64-linux-android-
创建了 hello.ko
7) 然后我使用 sudo adb push hello.ko /data/local
8) 然后我在 insmod hello.ko
/data/local
我得到了上述错误,请帮我解决这个问题。提前致谢
解决方法
要在代码中添加两件事
- 函数进入和退出例程 模块初始化(init_module); module_exit(cleanup_module);
- 让 init_module 函数返回 0 而不是 1,因为 0 意味着我们很好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。