文章目录
make menuconfig图形化配置界面
1. 怎么进入到make menuconfig图形化界面?
2. make menuconfig图形化界面的操作
3. 退出
4. 和make menuconfig有关的文件
5. make menuconfig会读哪个目录下的Kconfig文件
6. 为什么要复制成.config而不是其他文件
7. 我们复制的这个默认的配置选项不符合我们的要求怎么办?
8. 怎么和Makefile文件建立的关系
驱动编译到内核
Kconfig例子
helloworld准备
第一步,复制.c文件到指定位置
第二步,新建helloworld对应的Kconfig
第三步,新建helloworld对应的Makefile
第四步,修改char目录下的Kconfig Makefile
imx_v7_defconfig—>.config
make menuconfig
.config—>imx_v7_defconfig
编译
make menuconfig图形化配置界面
1. 怎么进入到make menuconfig图形化界面?
首先进入到内核源码的路径下
然后输入
make menuconfig
即可打开这个界面
2. make menuconfig图形化界面的操作
搜索功能
输入 “ / ” 即可弹出搜索界面,然后输入我们想要搜索的内容即可
例如搜索led
配置驱动状态
把驱动编译编译成模块(用M表示)
把驱动编译到内核里面(用*来表示)
不编译
3. 退出
退出分为保存退出和不保存退出
4. 和make menuconfig有关的文件
Makefile
编译规则,告诉我们在make的时候要怎么编译,相当于怎么做饭
Kconfig
内核配置的选项,相当于我们去饭店吃饭服务员给我们的菜单
.config
配置完内核之后生成的配置选项,相当于我们要点的菜
5. make menuconfig会读哪个目录下的Kconfig文件
arch/ $ARCH/目录下的Kconfig
arch/arm/configs
有好多的配置文件,相当于这个饭店的特色菜
6. 为什么要复制成.config而不是其他文件
复制配置文件到源码根目录
cp imx_v7_defconfig /work/linux-4.1.15/.config
注意:
复制成.config格式
查看我们复制的.config格式文件
能不能是其他的文件名字?
肯定是不行的,因为内核会默认读取Linux内核根目录下的.config作为默认的配置选项,所以不可以改名字
7. 我们复制的这个默认的配置选项不符合我们的要求怎么办?
我们要就要点菜,菜单是Kconfig,通过make menuconfig来调出来这个菜单了
也就是按照要求从图形化界面选择就是了。
配置完成以后会自动更新到.config里面
8. 怎么和Makefile文件建立的关系
当我们make menuconfig保存退出以后,Linux会将所有的配置选项以宏定义的形式保存在include/generated/下面的autoconf.h里面
具体怎么建立关系也不是我们关心的内容。
驱动编译到内核
Kconfig例子
source "drivers/redled/Kconfig"
config LED_4412
tristate "Led Support for GPIO Led"
depends on LEDS_CLASS
help
This option enable support for led
source "drivers/redled/Kconfig"
包含drivers/redled这个路径下的驱动文件,方便对菜单管理
config LED_4412
配置选项的名称LED_4412
tristate "Led Support for GPIO Led"
tristate表示驱动状态(1、驱动编译成模块,2、驱动编译到内核,3、不编译),
与之对应的还有bool(1、编译到内核,2、不编译)
“Led Support for GPIO Led” 是make menuconfig显示的名字
depends on LEDS_CLASS
helloworld准备
第一步,复制.c文件到指定位置
首先是打开我们linux源码的char文件位置
cd /work/linux-4.1.15/drivers/char/
新建helloworld文件夹
mkdir helloworld
chmod 777 helloworld
复制过来我们之前的helloworld.c 文件就可以了
第二步,新建helloworld对应的Kconfig
nano Kconfig
根据上面的例子写出helloworld的Kconfig
config HELLOWORLD
tristate "helloworld"
help
This option enable support for helloworld
第三步,新建helloworld对应的Makefile
nano Makefile
obj-$(CONFIG_HELLOWORLD)+=helloworld.o
第四步,修改char目录下的Kconfig Makefile
返回上一层目录,来到char目录
首先是Makefile
obj-$(CONFIG_HELLOWORLD) += helloworld/
然后就是Kconfig文件
source "drivers/char/helloworld/Kconfig"
imx_v7_defconfig—>.config
首先执行一个操作
. /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
make distclean
清除掉linux源码根目录下的.config文件
然后可以
ls .config
查看一下是否被清除掉
make menuconfig的配置文件有一个默认的
cd arch/arm/configs/
我们可以在文件下找到imx_v7_defconfig
我们这里后面还需要用到,现在需要的是把imx_v7_defconfig复制成linux源码根目录下的.config文件
cp imx_v7_defconfig /work/linux-4.1.15/.config
make menuconfig
上一步的复制主要为了这一步,因为我们的make menuconfig运行,就是配置我们的.config文件
然后我们就可以找到我们的hello world了
找到以后,使用 空格 操作,修改成编译到内核
之后保存退出就可以了
这时候我们可以打开.config文件,查看是不是修改成功了
nano .config
打开后,ctrl+w 就可以搜索我们的hello
.config—>imx_v7_defconfig
刚才默认配置文件imx_v7_defconfig变成临时的配置文件 .config,现在我们要变回去,因为后面的 make imx_v7_defconfig 操作,会从目录/arch/arm/configs中找到imx_v7_defconfig来进行加载配置
编译
这里使用脚本文件
#!/bin/bash
make distclean
make imx_v7_defconfig
make zImage -j16
make dtbs
make modules -j16
执行完毕后,我们查看是否成功,通过helloworld目录下有没有编译后生成的helloworld.o文件就可以了