Linux module的单独编译

2020-01-27  本文已影响0人  coder都很懒

目标
在Ubuntu、基于iMX8QXP Android P BSP环境中、基于4412的Linux3.0嵌入式环境中,通过不同的Makefile选项,单独编译linux module,生成相应的ko文件。
条件
需要一个已经编译OK的Linux内核环境
示例
test_module.c

#include <linux/module.h>
#include <linux/init.h>
int  test_module_init(void){
    printk("%s ===>\n",__FUNCTION__);
    return 0;
}
void  test_module_exit(void){
    printk("%s ===>\n",__FUNCTION__);
}
module_init(test_module_init);
module_exit(test_module_exit);
MODULE_LICENSE("Dual BSD/GPL");

Makefile中的make的选项说明如下:
make -C (KERNEL_DIR) M=(MODULE_PATH) modules

-C表示利用(KDIR)路径中的源代码进行编译;
M=(PWD)指明当前模块代码在哪里;
modules 进行编译模块这样一个动作;

# ubuntu 18
UBUNTU_KERNEL_PATH=/lib/modules/$(shell uname -r)/build/
# iTop4412
ITOP4412_KERNEL_PATH=/home/topeet/workspace/source/iTop4412_Kernel_3.0/
# IMX8 && Android P
MY_ANDROID=/home/xyhu/workspace_GA/android_build
ANDROID_P_KERNEL_OUT_PATH=$(MY_ANDROID)/out/target/product/mek_8q/obj/KERNEL_OBJ/
ANDROID_P_KERNEL_CROSS_COMPILE_PATH=$(MY_ANDROID)/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
MODULE_PATH=$(shell pwd)
obj-m+=test_module.o
all:
    make -C $(ANDROID_P_KERNEL_OUT_PATH) M=$(MODULE_PATH) modules ARCH=arm64 CROSS_COMPILE=$(ANDROID_P_KERNEL_CROSS_COMPILE_PATH)/aarch64-linux-android-
clean:
    rm -rf *.o *.ko *.mod.* *.order *.symvers .test_module.* .tmp_versions

注意这里编译嵌入式IMX8的Linux ko的时候中才需要添加ARCH=arm64 CROSS_COMPILE=$(ANDROID_P_KERNEL_CROSS_COMPILE_PATH)/aarch64-linux-android-,但是我编译嵌入式4412的时候,不添加ARCH以及CROSS_COMPILE也可以编译得到,可能是4412的环境已经添加好了ARCH以及CROSS_COMPILE的环境变量?

上一篇 下一篇

猜你喜欢

热点阅读