insmod: failed to load hello.ko: Function not implemented
在内核构建到注销消息(如"helloworld"(期间,我遇到了这样一个错误,以下步骤将重现错误:
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( 然后我尝试在内核目录(金鱼(中使用这个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。
你好.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);
Makefile
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
将hello.ko复制到android模拟器
8( 然后我在/data/local
中尝试insmod hello.ko
我得到了上述错误,请帮我解决这个问题。提前感谢
在代码中添加两件事
- 函数进入和退出例程module_init(init_module(;module_exit(cleanup_module(
- 让init_module函数返回0而不是1,因为0表示我们很好