如何在android自定义内核中构建Helloord



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
  1. 在我用这个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表示我们很好

最新更新