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驱动不编译进内核
测试

 

posted @ 2018-08-07 14:39  习惯就好233  阅读(445)  评论(0编辑  收藏  举报