编译Android内核模块

Android内核模块的编译与普通Linux内核的编译稍有不同

1.下载android内核

#如果git需要使用代理可以使用如下命令

exporthttps_proxy="http://192.168.1.105:8087"

gitclonehttps://android.googlesource.com/kernel/goldfish.git

上面得到的是主线上的内核源代码,现在我们需要适用于模拟器用的内核,因此,我们需要checkoutgoldfish版本:

cdgoldfish

gitbranch-a//查看branch

gitcheckoutremotes/origin/android-goldfish-3.4

2.下载交叉编译工具

gitclonehttps://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6

设置环境变量

exportPATH=$PATH:/home/alan/workspace/arm_toolchain/arm-eabi-4.6/bin

exportARCH=arm

exportSUBARCH=arm

exportCROSS_COMPILE=arm-eabi-

3、现在是要得到android的内核编译参数的配置文件的时候了,该文件需要从已经安装好的android的模拟器

配置文件在模拟器的"/proc/config.gz"目录,pull出来,解压,将config文件改名为.config,拷贝到内核代码goldfish目录下。

这是在goldfish目录下make,可编译内核

http://source.android.com/source/building-kernels.html

下面讲解编译内核模块

1.在内核源码drives目录下添加hello目录,内含hello.cKconfigMakefile文件

hello.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init (void)
{
	printk("hello linux kernel\n");
	return 0;
}

static void hello_exit (void) 
{
    printk("bye..lwave from the kernel\n");
}

module_init(hello_init);
module_exit(hello_exit);

Kconfig

config HELLO
tristate "Helllo module test created by lz"  
default m
help
	test for adding driver to menuconfig

Makefile

KERNELDIR :=/home/alan/workspace/android_kernel/goldfish
PWD :=$(shell pwd)
ARCH=arm
CROSS_COMPILE=arm-eabi-
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)ld
obj-$(CONFIG_HELLO) +=hello.o

1.通过给下面的Kconfig文件再加上下面的代码,可使hello项出现在配置菜单中:

(1)在arch/arm/Kconfig文件中menu"DeviceDrivers"endmenu之间添加source"drivers/hello/Kconfig"(这个文件好像没有menu"DeviceDrivers"endmenu,要自己写)

menu "Device Drivers"
source "drivers/hello/Kconfig"
endmenu

(2)在drivers/Kconfig文件中menu"DeviceDrivers"endmenu之间添加source"drivers/hello/Kconfig"

2.修改Drivers目录下的Makefile文件,添加如下行:

obj-$(CONFIG_HELLO)+=hello/

当CONFIG_HELLO为y或m时,使系统能找到hello驱动的makefile

以上过程完成便将hello模块添加至内核menuconfig菜单,注意格式与上下文保持一致

这是在goldfish目录下make,则模块在

drivers/hello/目录的hello.ko

相关推荐