linux 编译内核驱动,嵌入式开发Linux驱动篇——驱动编译到内核

文章目录

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图形化界面?

首先进入到内核源码的路径下

6e76ac116831b82840648ef3784bd4f4.png

然后输入

make menuconfig

即可打开这个界面

3eceeca159145561256ec9664b190b3c.png

2. make menuconfig图形化界面的操作

搜索功能

输入 “ / ” 即可弹出搜索界面,然后输入我们想要搜索的内容即可

edef1d02a3f26824d3f35629fd286197.png

例如搜索led

71011fef6492746cfecc239bfeea113f.png

配置驱动状态

把驱动编译编译成模块(用M表示)

把驱动编译到内核里面(用*来表示)

不编译

3. 退出

退出分为保存退出和不保存退出

babdb583fef2739f183e56ec476b3380.png

4. 和make menuconfig有关的文件

Makefile

编译规则,告诉我们在make的时候要怎么编译,相当于怎么做饭

Kconfig

内核配置的选项,相当于我们去饭店吃饭服务员给我们的菜单

.config

配置完内核之后生成的配置选项,相当于我们要点的菜

5. make menuconfig会读哪个目录下的Kconfig文件

arch/ $ARCH/目录下的Kconfig

7114f777be2285dc823d2571b79a31a0.png

arch/arm/configs

9c14b0a3f0bc2e2805e768e2f966bb2b.png

有好多的配置文件,相当于这个饭店的特色菜

6. 为什么要复制成.config而不是其他文件

复制配置文件到源码根目录

cp imx_v7_defconfig /work/linux-4.1.15/.config

注意:

复制成.config格式

31883fb0af37490dfcb13395244bc964.png

查看我们复制的.config格式文件

85c80bfb42de0efd6eef17ce5a192a15.png

能不能是其他的文件名字?

肯定是不行的,因为内核会默认读取Linux内核根目录下的.config作为默认的配置选项,所以不可以改名字

7. 我们复制的这个默认的配置选项不符合我们的要求怎么办?

我们要就要点菜,菜单是Kconfig,通过make menuconfig来调出来这个菜单了

3eceeca159145561256ec9664b190b3c.png

也就是按照要求从图形化界面选择就是了。

配置完成以后会自动更新到.config里面

8. 怎么和Makefile文件建立的关系

当我们make menuconfig保存退出以后,Linux会将所有的配置选项以宏定义的形式保存在include/generated/下面的autoconf.h里面

65a992f25c97d7dfc5f943864d8b06dc.png

3dea4062b481d1e618f778e334d928c1.png

具体怎么建立关系也不是我们关心的内容。

驱动编译到内核

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/

5faccd79550d703a5477fcc92fde0950.png

新建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

9f95ddfa4224d1df44a320d06187e78d.png

第三步,新建helloworld对应的Makefile

nano Makefile

obj-$(CONFIG_HELLOWORLD)+=helloworld.o

d37e92f4312a380d32a8bdb846796562.png

第四步,修改char目录下的Kconfig Makefile

返回上一层目录,来到char目录

d73f26c88ccb589c2af5ec3be712dfa8.png

首先是Makefile

obj-$(CONFIG_HELLOWORLD) += helloworld/

5cbea9c76020e1ac3a99714ad74c5eb6.png

然后就是Kconfig文件

source "drivers/char/helloworld/Kconfig"

a6135596d79a83313d187187eb9b45e2.png

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

bc31152defb05486712a205d5288e9d6.png

我们这里后面还需要用到,现在需要的是把imx_v7_defconfig复制成linux源码根目录下的.config文件

cp imx_v7_defconfig /work/linux-4.1.15/.config

af34423f0c87cfc10b69032219a7eb23.png

make menuconfig

上一步的复制主要为了这一步,因为我们的make menuconfig运行,就是配置我们的.config文件

然后我们就可以找到我们的hello world了

710e30ceb5339bba2a8da986b22a021a.png

48e8b09c74735b52ac1ef4c01fa63d80.png

a8e1a94f0716a1274529343d244a5a2a.png

bd58b886ee3d5c9a1a20bf1b0cb0ff08.png

找到以后,使用 空格 操作,修改成编译到内核

之后保存退出就可以了

这时候我们可以打开.config文件,查看是不是修改成功了

nano .config

047e1c4f4567763e646268b28d1765d4.png

打开后,ctrl+w 就可以搜索我们的hello

6967e730d5a3c07f164693dea3f35b32.png

.config—>imx_v7_defconfig

刚才默认配置文件imx_v7_defconfig变成临时的配置文件 .config,现在我们要变回去,因为后面的 make imx_v7_defconfig 操作,会从目录/arch/arm/configs中找到imx_v7_defconfig来进行加载配置

679ac2fb3c08037a7d001ceba080dd1f.png

编译

这里使用脚本文件

#!/bin/bash

make distclean

make imx_v7_defconfig

make zImage -j16

make dtbs

make modules -j16

执行完毕后,我们查看是否成功,通过helloworld目录下有没有编译后生成的helloworld.o文件就可以了

fbcfdcb715222393730e7bd2c02c275a.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值