4412 make menuconfig和make
一、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驱动不编译进内核
– 测试
最新文章
- SpringMVC前后端数据交互总结
- BC之jrMz and angles
- Vagrant 启用 rsync
- 【转】DPM--对象检测开山之作
- 2016年12月10日 星期六 --出埃及记 Exodus 21:5
- 关于垃圾回收(GC和Marshal)有感
- 固定分隔符字符串与数组互转及ArrayList与数组(Array)互转
- MAC自带的lnmp
- ASP.NET- 播放视频代码
- QT中共享库的生成与使用
- (转) C/C++中结构体(struct)知识点强化
- 20款最好的免费的IDES和编辑器
- 使用github+hexo搭建博客笔记
- hdu--1013--Digital Roots(字符串)
- CSS布局套路
- 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字(python)(原创)
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(4)- RT105x选型
- 多层json的构造,取值,还有使用bootstrap的tree view在前端展示的相关问题
- angular4 数据绑定
- layui table数据表格reload where参数保留问题
热门文章
- MySQL case when then else end用法
- R 保存包含中文的 eps 图片--showtext
- Entity Framework Code First属性映射约定 转载https://www.cnblogs.com/libingql/p/3352058.html
- Nginx 在各种语言框架下的配置 - 以 codeigniter 为例
- State Hook
- 查看mysql 的版本信息
- 边界安全 - CDN/DMZ/网络协议
- [Linux] 027 RPM 包与 源码包的区别
- SpringMvc和Mybatis整合需要配置的xml
- vue2.0中router-link详解