美文网首页
Linux module的单独编译

Linux module的单独编译

作者: coder都很懒 | 来源:发表于2020-01-27 20:59 被阅读0次

    目标
    在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的环境变量?

    相关文章

      网友评论

          本文标题:Linux module的单独编译

          本文链接:https://www.haomeiwen.com/subject/moiethtx.html