内核编译与配置

  • 1. Menuconfig
  • 2. Kconfig
  • 3. Makefile
  • 4. 内核配置与编译的流程
  • 5. 注意

1. Menuconfig

Linux编译器是通过.config文件确认哪些代码要编译进内核,如果我们要配置和裁剪内核,需要对.config文件下手。更改.config文件的工具就是muneconfig, 它是基于文本菜单的配置界面。在Linux源码目录下输入命令

make Menuconfig

即可进入配置界面,具体界面如下如所示:

我们可以通过配置menuconfig菜单来对哪些代码编译进内核进行添加与选择。

2. Kconfig

我们可以通过menuconfig选择哪个驱动或者文件需要编译进内核中,但是我们怎么将我们编写的驱动添加到menuconfig中呢?这就要用到Kconfig文件了,我们编写驱动时,绝大多数是字符型驱动,这里就以字符型驱动为例,来描述一下怎么将自己写好的字符型驱动,添加到menuconfig中。
在源码目录下的每个文件夹下都有一个Kconfig文件,当然驱动文件夹driversl里面的每一个子文件夹里也都有一个Kconfig文件。首先,打开字符型驱动文件夹下的Kconfig文件:

vim LinuxKernelPath/drivers/char/Kconfig

我们找到该文件的末尾中的一段:

...
config LEDS_CTLbool "Enable LEDS config"default yhelpEnable LEDS configconfig BUZZER_CTLbool "Enable BUZZER config"default nhelpEnable BUZZER config
...

我们只需要仿照这个格式填写我们的驱动就可以添加到menuconfig中了,以helloworld为例:

config HELLOWORLD_CTLbool "Enable HELLOWORLD config"default nhelpEnable HELLOWORLD config

将这段代码加入到Kconfig中,我们就可以在menuconfig菜单中找到并配置它,具体的位置为:device drivers–>character devices–>Enable HELLOWORLD config:

前面为*号表示编译进内核,为空的话为不编译仅内核。

3. Makefile

现在知道怎么将我们驱动添加到配置文件了,那么我们写好的驱动文件(.c文件)要放在哪里呢?我们编写好的HelloWorld.c文件应该放在内核源目录下的字符型驱动文件夹下。即:

/LinuxKernelPath/drivers/char/

并且我们要在该目录下的Makefile 文件中添加一下语句:

obj-$(CONFIG_HELLOWORLD_CTL) += HelloWorld.o

表示编译的时候会编译HelloWorld.c。观察Makefile可以发现,有的语句是这么写的:

obj-y  += misc.o

obi后面直接加一个y表示该驱动是强制编译到内核的。

4. 内核配置与编译的流程

以HelloWorld.c驱动为例,讲述一下将该驱动编译到内核的流程:
① 在该路径

/LinuxKernelPath/drivers/char/

下的Kconfig文件中添加有关驱动的描述:

config HELLOWORLD_CTLbool "Enable HELLOWORLD config"default nhelpEnable HELLOWORLD config

② 在menuconfig中配置HELLOWORLD config
③ 在路径:

/LinuxKernelPath/drivers/char/

下加入语句:

obj-$(CONFIG_HELLOWORLD_CTL) += HelloWorld.o

④ 在源码目录下,运行命令编译内核:

make zImage

编译好的内核在该路径中:

/LinuxKernelPath/arch/arm/boot/

⑤ 在内核运行fastboot工具,移植到ARM板中即可。

5. 注意

虽然HelloWorld驱动被编译到了内核中,但是该驱动在板子还是无法使用的,因为没有注册设备,这在下一节中会涉及到,一般来说,驱动要工作之间首先要对设备进行注册

Linux驱动(8)--内核编译与配置相关推荐

  1. Linux 2.6内核编译与配置安装升级

    Linux系统更新了很多版本更新,我本人认为Linux 2.6内核在Linux系统系列里很好使的文件系统,在此向大家推荐.如今技术不断更新,各种使用文件都已经淘汰.我认为还是有很不错的如Linux 2 ...

  2. linux 2.6内核编译_03_配置选项注解

    linux 2.6.15.6内核配置(unfinished) http://www.builder.com.cn/2007/1011/545597.shtml 注意: 不同的内核版本配置选项(或组织) ...

  3. 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux 内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 )

    文章目录 一.打开 Linux 内核编译 菜单配置 二.菜单配置中的光标移动与选中状态 三.保存配置 四.配置项帮助文档 一.打开 Linux 内核编译 菜单配置 执行 make menuconfig ...

  4. 【linux系列】内核编译最新教程+常见问题总结

    [linux系列]内核编译最新教程+常见问题总结 编译环境 环境准备 编译准备 修改配置 linux 提供的三种配置命令 使用 gconfig 配置 编译内核 安装内核 载入新内核 检查内核 常见问题 ...

  5. Linux驱动开发—内核I2C驱动详解

    Linux驱动开发--内核I2C驱动 I2C驱动文件结构 I2C数据传输过程 i2c_transfer i2c_msg I2C通讯常用的接口函数(老版本) 快速读写接口函数:(连续读写) 常用的读操作 ...

  6. linux 内核配置mmc,Linux内核编译,配置本机驱动

    1.前言 编译Linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱 ...

  7. 新增linux驱动并重新编译内核,【转】配置并编译内核[更新到linux-2.6.29.2]

    有关内核精简的内容,看3楼. 一.下载源代码和编译软件准备下载内核源代码:http://www.kernel.org/ 注意,点击2.6.29内核的F版,即完整版. 如果你懒得去网站点联接,运行下列命 ...

  8. Linux内核配置网口驱动,linux内核编译,配置本机驱动

    1.前言 编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱 ...

  9. linux 编译指cpu内核,linux内核编译与配置

    linux是如何组成的? 答:linux是由用户空间和内核空间组成的 为什么要划分用户空间和内核空间? 答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的 安全性,比 ...

最新文章

  1. 'libxml/tree.h' file not found
  2. MATLAB   xls数据读写
  3. 【代码笔记】iOS-获得设备型号
  4. 【XSY2719】prime 莫比乌斯反演
  5. mysql table catalog_hibernate 注解@table( catalog=)作用
  6. 3.1. _3. 覆盖与交换
  7. Spring Boot 单例模式中依赖注入问题
  8. c# mysql ef框架_首页 C# EF6数据库第一-EF试图创建我的数据...
  9. arduino neo 定位不可用_arduino霹雳七彩灯
  10. 为什么要简化代码书写
  11. 0的ascii码值(0的ascii码值)
  12. AI插画设计,用AI制作一个只可爱的短腿柯基插画
  13. bootstrap栅格化框架
  14. 可靠的运输层协议,如何抵抗“剪网线”的降维打击?(rdt协议的的总结与思考)
  15. 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?用循环嵌套结构完成。(数字组合)
  16. 油气管道供应可视化数据大屏:连点成线,打破信息孤岛
  17. 蓝桥杯javac组我们的征途是星辰大海
  18. NoSQL 中的 CAP
  19. 【香蕉oi】Tree(欧拉序、线段树)
  20. 欧拉法及其他改进方法——Matlab实现

热门文章

  1. Cocos2d手机游戏引擎介绍
  2. Java基础---常用类之Math类 and Syetem类
  3. BootstrapTable入门Demo
  4. BZOJ 2959 - 长跑
  5. 实体bean里面不要轻易加transient,反序列回来之后会变成null
  6. python--pexpect
  7. webpack整体了解
  8. Centos系统查看CPU有关信息
  9. java必会的英语单词
  10. NHibernate之映射文件配置说明