在编译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目录:
进入该目录以后可以看到如果没有选中TEST SUPPORT,那么下面的菜单式不会弹出来的,这是由于前面Kconfig中:
config TEST_DRIVER_USER
tristate "TEST user-space interface"
depends on TEST_DRIVER

的配置,使得这个需要依赖于CONFIG_TEST宏,如下图所示:

        选择TEST DRIVER以后就会出现下面的TEST user-space interface选项,我们将它选成M,也就是变成内核模块

配置完成以后保存配置 ,然后编译内核模块,这里由于是进行交叉编译,所以会多出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.h\u201d\u662f\u6700\u65b0\u7684\u3002
  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

35、在编译Linux内核中增加程序需要完成以下3项工作的更多相关文章

  1. (repost)在ARM Linux内核中增加一个新的系统调用

    实验平台内核版本为4.0-rc1,增加一仅仅打印Hello World的syscall,最后我们在用户空间swi验证 实验平台内核版本为4.0-rc1,增加的系统调用仅仅是简单打印一个Hello Wo ...

  2. 【转】Linux驱动模块编译进内核中

    原文网址:http://blog.chinaunix.net/uid-29287950-id-4573481.html BQ27501驱动编译进内核 一.       驱动程序编译进内核的步骤 在 l ...

  3. 【总结】嵌入式linux内核中Makefile、Kconfig、.config的关系及增加开机Hello World【转】

    本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/73772109 为了弄清内核的组织结构,我们先来实现下面这个简单的例子. 一.增加 ...

  4. 调皮的程序员:Linux之父雕刻在Linux内核中的故事

    本文内容由公众号“格友”原创分享. 1.引言   (不羁的大神,连竖中指都这么帅) 因为LINUX操作系统的流行,Linus 已经成为地球人都知道的名人.虽然大家可能都听过钱钟书先生的名言:“假如你吃 ...

  5. 为什么要编译Linux内核?

    新的内核修订了旧内核的bug,并增加了许多新的特性.如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译Linux内核. 通常,更新的内核会支持更多的硬件,具 ...

  6. Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解

    在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...

  7. 嵌入式C语言自我修养 01:Linux 内核中的GNU C语言语法扩展

    1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核.驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”.说它是C语言吧, ...

  8. Linux内核中内存cache的实现【转】

    Linux内核中内存cache的实现 转自:http://blog.chinaunix.net/uid-127037-id-2919545.html   本文档的Copyleft归yfydz所有,使用 ...

  9. Linux 内核中的 GCC 特性

    https://www.ibm.com/developerworks/cn/linux/l-gcc-hacks/ GCC 和 Linux 是出色的组合.尽管它们是独立的软件,但是 Linux 完全依靠 ...

随机推荐

  1. Model、ModelMap、ModelAndView的作用及区别

    Model.ModelMap.ModelAndView的作用及区别 对于MVC框架,控制器controller执行业务逻辑 用于产生模型数据Model 视图view用来渲染模型数据 Model和Mod ...

  2. atime&&mtime&&ctime区别

  3. Linux 创建新用户并添加到sudo用户组

    附上一份相当奢华的文档:  https://www.cnblogs.com/jxhd1/p/6528574.html 添加用户到组 usermod -a -G sudo newone

  4. Css学习总结(1)——20个很有用的CSS技巧

    1. 黑白图像 这段代码会让你的彩色照片显示为黑白照片,是不是很酷? img.desaturate { filter: grayscale(100%); -webkit-filter: graysca ...

  5. HDU 2191 悼念512汶川大地震

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  6. Input/output subsystem having an integrated advanced programmable interrupt controller for use in a personal computer

    A computer system is described having one or more host processors, a host chipset and an input/outpu ...

  7. [Angular] Make a chatbot with DialogFlow

    Register a account on https://console.dialogflow.com/api-client/ "Creat a intent" -- you c ...

  8. ZOJ 3587 Marlon's String 扩展KMP

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3587 题意:给出两个字符串S和T.S,T<=100000.拿出 ...

  9. 【MySQL】常见错误与经常使用命令的集锦

    [背景介绍]     在使用SQL Server数据库期间,想必大家一定都有过解决各种问题的经历了.非常多时候,都会在大家的博客中看到问题与解决方式. 如今开发使用的是MySQL数据库.如今来看,发现 ...

  10. scroolspy滚动监听插件

    <nav id="nav" class="navbar navbar-default"> <a href="#" clas ...