• 35、在编译Linux内核中增加程序需要完成以下3项工作


    在编译Linux内核中增加程序需要完成以下3项工作:
    • 将编写的源代码拷入Linux内核源代码的相应目录。
    • 在目录的Kconfig文件中增加关于新源代码对应项目的编译配置选项
    • 在目录的Makefile文件中增加对新源代码的编译条目
    下面给出在内核中新增驱动代码目录和子目录的实例
    假设我们要在内核源代码drivers目录下为ARM体系结构新增如下用于 test driver的树形目录:
    |--test
          |-- test.c
            在内核中增加目录和子目录,我们需要为相应的新增目录创建Makefile和Kconfig文件,而新增目录的父目录中的Kconfig和Makefile能被引用。
            在新增的test目录下,应该包含如下Kconfig文件:
    #
    # TEST driver configuration
    #
    menu "TEST Driver "
    comment " TEST Driver"
     
    config TEST_DRIVER
    bool "TEST support "
     
    config TEST_DRIVER_USER
    tristate "TEST user-space interface"
    depends on TEST_DRIVER
    help
    TEST Driver Configuration
     
    endmenu
            由于 test driver对于内核来说是新的功能,所以需要首先创建一个菜单TEST Driver。然后显示“TEST support”,等待用户选择;接下来判断用户是否选择了TEST Driver,如果是(CONFIG_TEST_DRIVER=y),则进一步显示子功能:用户接口与CPU功能支持;由于用户接口功能可以被编译成内核模块,所以这里的询问语句使用了tristate。
    注意:这里config TEST_DRIVER语句最终被同一层Makefile读取到的变量是CONFIG_TEST_DRIVER
            为了使这个Kconfig能起作用,修改drivers/Kconfig文件,增加:

    source "drivers/test/Kconfig"

            脚本中的source意味着引用新的Kconfig文件。
            在新增的test目录下,应该包含如下Makefile文件:
    # drivers/test/Makefile
    #
    # Makefile for the TEST
    #
    obj-$(CONFIG_TEST_DRIVER_USER) += test.o
     
    obj-$(CONFIG_XXX_XXX) += xxx/
    (如果还有子目录的话需要在Kconfig中添加相应的变量并且在Makefile中添加上面这句话)
            在drivers/Makefile中加入

    obj-$(CONFIG_TEST_DRIVER) += test/

    使在用户进行内核编译时能够进入test目录。
            增加了Kconfig和Makefile之后的新的test属性目录为:
    |--test
         |-- test.c
         |-- Makefile
         |-- Kconfig
            在内核顶层目录中输入

    make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- menuconfig

    (如果是x86就不需要ARCH和CROSS_COMPILE这两个变量了,我是交叉编译linux)
    找到Device Driver---> TEST DRIVER目录:
    在Linux内核中添加程序--Kconfig和Makefile配置 - 小辉辉 - 小辉辉的博客
    进入该目录以后可以看到如果没有选中TEST SUPPORT,那么下面的菜单式不会弹出来的,这是由于前面Kconfig中:
    config TEST_DRIVER_USER
    tristate "TEST user-space interface"
    depends on TEST_DRIVER
     的配置,使得这个需要依赖于CONFIG_TEST宏,如下图所示:
    在Linux内核中添加程序--Kconfig和Makefile配置 - 小辉辉 - 小辉辉的博客
            选择TEST DRIVER以后就会出现下面的TEST user-space interface选项,我们将它选成M,也就是变成内核模块
    在Linux内核中添加程序--Kconfig和Makefile配置 - 小辉辉 - 小辉辉的博客
            配置完成以后保存配置 ,然后编译内核模块,这里由于是进行交叉编译,所以会多出ARCH=arm以及CROSS_COMPILE=arm-xilinx-linux-gnueabi-两个变量:
    $ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- modules -j8
      CHK     include/linux/version.h
      CHK     include/generated/utsrelease.h
    make[1]: u201cinclude/generated/mach-types.hu201du662fu6700u65b0u7684u3002
      CALL    scripts/checksyscalls.sh
      CC [M]  drivers/test/test.o
      Building modules, stage 2.
      MODPOST 23 modules
    WARNING: modpost: Found 1 section mismatch(es).
    To see full details build your kernel with:
    'make CONFIG_DEBUG_SECTION_MISMATCH=y'
      CC      drivers/test/test.mod.o
      LD [M]  drivers/test/test.ko
  • 相关阅读:
    二十三种设计模式 python实现
    python logging的输出
    redis
    Django1.11序列化与反序列化
    Django1.11基础视图
    Django1.11模型类数据库操作
    Django1.11创建
    泛型全面分析和应用(二)
    泛型全面分析和应用(一)
    注解的基本盘点 -- 《Java编程思想》
  • 原文地址:https://www.cnblogs.com/liusiluandzhangkun/p/8945865.html
Copyright © 2020-2023  润新知