一、Menuconfig的操作

• Linux编译器通过.config文件确认哪些代码编译进内核,哪些被裁减掉
• menuconfig是生成.config的一个工具
• 在Linux发展过程中,配置内核可以使用一下命令:
– #make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本菜单的配置界面)
– #make xconfig(要求QT被安装)
– #make gconfig(要求GTK+被安装)

• 在Linux源码目录下输入命令make Menuconfig,可以进入配置界面
– menuconfig实现的代码在源码“scripts”目录下(了解即可)

常用操作

– 上下选择→按键“上下方向键”
– 左右选择→按键“左右方向键”
– 进入下级界面→按键“回车”
– 返回上级界面→选择“Exit”+按键“回车”
– 帮助→选择“help”+按键“回车”

• 搜索

– 界面输入“/”,输入查找关键词,输入“回车”即可搜索
• 使用“空格”键选择具体驱动配置,有三种状态
– “M”编译成模块(需要在编译文件里面特殊定义,后面介绍)
– “空”不编译状态
– “*”编译进内核

• 退出

– 不保存退出
– 保存退出

• Kconfig也是通过脚本编写而成,所以学会“仿写”即可
• Kconfig文件在每一级目录下都有,源码下的如下图所示。
– mainmenu菜单可以看到平台“arm”和内核版本“3.0.15”

Kconfig文件——源码目录下的Kconfig

• Kconfig也是通过脚本编写而成,所以学会“仿写”即可
• Kconfig文件在每一级目录下都有,源码下的如下图所示。
– mainmenu菜单可以看到平台“arm”和内核版本“3.0.15”

driver目录下的Kconfig分析

• menu "Device Drivers"菜单类
– source “xxx”
• menu "Character devices"
– source "xxx"
• 最终选项
– Enable LEDS config

• 看到这么复杂的配置不要慌,记住以下点
– 拿到Linux源代码的时候,已经将基本的配置好了
– 常用的配置基本在drivers目录下
– 所有你想要的配置方式都带有例子
• 千万别花太多精力去学习脚本语法!

个人感觉,目录下有个Kconfig文件,driver目录下也有Kconig,char目录下也有Kconfig。这些config文件都是为Makfile准备的

.config文件

• 源码中带的config_for_xxx都是针对不同的操作系统或者功能裁减的.config文件

Linux内核配置裁减

• 在Kconfig中的添加HELLO,然后查看menuconfig

在driver/char目录下,修改Kconfig。在LEDS上插入Hello部分

config HELLO_CTL
tristate "Enable Hello config"
default m
help
Enable Hello config
#tristate是三态的,前面用tab

• 配置和裁减HELLO的驱动,查看.config文件的变化
• 将HELLO定义为“tristate”,可选为“M”状态

小结

• Menuconfig熟练使用即可,不用知道Linux怎么实现的
• Kconfig能够仿写即可

二、Make

编译器路径设置

• 拿到源码后一般需要设置一下编译器路径,在源码目录Makefile文件中可以设置编译路径“CROSS_COMPILE”
• 前面编译环境搭建的时候,解压arm-2009q3的目录和这里对应

vim Makfile

强制编译

– 源码开发者强制要求编译进内核的文件
• 打开drivers/Makefile文件
– 类似下面的写法,只要编译内核就必须编译这个文件
– obj-y += gpio/

配置编译

– 驱动开发人员可以通过配置选择编译
• 打开drivers/Makefile文件
– 强制编译char目录下的文件
– obj-y += char/
• 打开drivers/char/Makefile文件
– 如果定义了宏CONFIG_LEDS_CTL则将itop4412_leds.c文件编译进内核
– obj-$(CONFIG_LEDS_CTL) += itop4412_leds.o

依赖编译

– 一个驱动的编译需要另外驱动的支持
– 这一部分不需要另外写编译脚本,只需要在Kconfig中配置即可
• 例如显卡驱动VIDEO_JPEG_V2X中需要MEDIA_SUPPORT等驱动,那么编译显卡驱动的同时也需要将依赖的驱动选上

简单测试(实验)

• 将LEDS驱动编译进内核
– 测试
• 将LEDS驱动不编译进内核
– 测试

最新文章

  1. SpringMVC前后端数据交互总结
  2. BC之jrMz and angles
  3. Vagrant 启用 rsync
  4. 【转】DPM--对象检测开山之作
  5. 2016年12月10日 星期六 --出埃及记 Exodus 21:5
  6. 关于垃圾回收(GC和Marshal)有感
  7. 固定分隔符字符串与数组互转及ArrayList与数组(Array)互转
  8. MAC自带的lnmp
  9. ASP.NET- 播放视频代码
  10. QT中共享库的生成与使用
  11. (转) C/C++中结构体(struct)知识点强化
  12. 20款最好的免费的IDES和编辑器
  13. 使用github+hexo搭建博客笔记
  14. hdu--1013--Digital Roots(字符串)
  15. CSS布局套路
  16. 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字(python)(原创)
  17. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(4)- RT105x选型
  18. 多层json的构造,取值,还有使用bootstrap的tree view在前端展示的相关问题
  19. angular4 数据绑定
  20. layui table数据表格reload where参数保留问题

热门文章

  1. MySQL case when then else end用法
  2. R 保存包含中文的 eps 图片--showtext
  3. Entity Framework Code First属性映射约定 转载https://www.cnblogs.com/libingql/p/3352058.html
  4. Nginx 在各种语言框架下的配置 - 以 codeigniter 为例
  5. State Hook
  6. 查看mysql 的版本信息
  7. 边界安全 - CDN/DMZ/网络协议
  8. [Linux] 027 RPM 包与 源码包的区别
  9. SpringMvc和Mybatis整合需要配置的xml
  10. vue2.0中router-link详解