Linux驱动(8)--内核编译与配置
内核编译与配置
- 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)--内核编译与配置相关推荐
- Linux 2.6内核编译与配置安装升级
Linux系统更新了很多版本更新,我本人认为Linux 2.6内核在Linux系统系列里很好使的文件系统,在此向大家推荐.如今技术不断更新,各种使用文件都已经淘汰.我认为还是有很不错的如Linux 2 ...
- linux 2.6内核编译_03_配置选项注解
linux 2.6.15.6内核配置(unfinished) http://www.builder.com.cn/2007/1011/545597.shtml 注意: 不同的内核版本配置选项(或组织) ...
- 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux 内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 )
文章目录 一.打开 Linux 内核编译 菜单配置 二.菜单配置中的光标移动与选中状态 三.保存配置 四.配置项帮助文档 一.打开 Linux 内核编译 菜单配置 执行 make menuconfig ...
- 【linux系列】内核编译最新教程+常见问题总结
[linux系列]内核编译最新教程+常见问题总结 编译环境 环境准备 编译准备 修改配置 linux 提供的三种配置命令 使用 gconfig 配置 编译内核 安装内核 载入新内核 检查内核 常见问题 ...
- Linux驱动开发—内核I2C驱动详解
Linux驱动开发--内核I2C驱动 I2C驱动文件结构 I2C数据传输过程 i2c_transfer i2c_msg I2C通讯常用的接口函数(老版本) 快速读写接口函数:(连续读写) 常用的读操作 ...
- linux 内核配置mmc,Linux内核编译,配置本机驱动
1.前言 编译Linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱 ...
- 新增linux驱动并重新编译内核,【转】配置并编译内核[更新到linux-2.6.29.2]
有关内核精简的内容,看3楼. 一.下载源代码和编译软件准备下载内核源代码:http://www.kernel.org/ 注意,点击2.6.29内核的F版,即完整版. 如果你懒得去网站点联接,运行下列命 ...
- Linux内核配置网口驱动,linux内核编译,配置本机驱动
1.前言 编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱 ...
- linux 编译指cpu内核,linux内核编译与配置
linux是如何组成的? 答:linux是由用户空间和内核空间组成的 为什么要划分用户空间和内核空间? 答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的 安全性,比 ...
最新文章
- 'libxml/tree.h' file not found
- MATLAB xls数据读写
- 【代码笔记】iOS-获得设备型号
- 【XSY2719】prime 莫比乌斯反演
- mysql table catalog_hibernate 注解@table( catalog=)作用
- 3.1. _3. 覆盖与交换
- Spring Boot 单例模式中依赖注入问题
- c# mysql ef框架_首页 C# EF6数据库第一-EF试图创建我的数据...
- arduino neo 定位不可用_arduino霹雳七彩灯
- 为什么要简化代码书写
- 0的ascii码值(0的ascii码值)
- AI插画设计,用AI制作一个只可爱的短腿柯基插画
- bootstrap栅格化框架
- 可靠的运输层协议,如何抵抗“剪网线”的降维打击?(rdt协议的的总结与思考)
- 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?用循环嵌套结构完成。(数字组合)
- 油气管道供应可视化数据大屏:连点成线,打破信息孤岛
- 蓝桥杯javac组我们的征途是星辰大海
- NoSQL 中的 CAP
- 【香蕉oi】Tree(欧拉序、线段树)
- 欧拉法及其他改进方法——Matlab实现