Linux嵌入式驱动开发01——第一个驱动Hello World(附源码)
Linux嵌入式驱动开发02——驱动编译到内核
Linux嵌入式驱动开发03——杂项设备驱动(附源码)
Linux嵌入式驱动开发04——应用层和内核层数据传输
Linux嵌入式驱动开发05——物理地址到虚拟地址映射
Linux嵌入式驱动开发06——第一个相对完整的驱动实践编写
Linux嵌入式驱动开发07——GPIO驱动过程记录(飞凌开发板)
Linux嵌入式驱动开发08——字符设备(步步为营)
Linux嵌入式驱动开发09——平台总线详解及实战
Linux嵌入式驱动开发10——设备树开发详解
Linux嵌入式驱动开发11——平台总线模型修改为设备树实例
Linux嵌入式驱动开发12——pinctl和gpio子系统实践操作
Linux嵌入式驱动开发13——ioctl接口(gpio控制使用)
Linux嵌入式驱动开发14——中断的原理以及按键中断的实现(tasklet中断下文)
Linux嵌入式驱动开发15——等待队列和工作队列
Linux嵌入式驱动开发16——按键消抖实验(内核定时器)
Linux嵌入式驱动开发17——输入子系统
Linux嵌入式驱动开发18——I2C通信
然后输入
make menuconfig
arch/arm/configs
有好多的配置文件,相当于这个饭店的特色菜
复制配置文件到源码根目录
cp imx_v7_defconfig /work/linux-4.1.15/.config
注意:
复制成.config
格式
查看我们复制的.config
格式文件
能不能是其他的文件名字?
肯定是不行的,因为内核会默认读取Linux内核根目录下的.config作为默认的配置选项,所以不可以改名字
我们要就要点菜,菜单是Kconfig,通过make menuconfig来调出来这个菜单了
也就是按照要求从图形化界面选择就是了。
配置完成以后会自动更新到.config里面
当我们make menuconfig保存退出以后,Linux会将所有的配置选项以宏定义的形式保存在include/generated/下面的autoconf.h里面
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
首先是打开我们linux源码的char文件位置
cd /work/linux-4.1.15/drivers/char/
mkdir helloworld
chmod 777 helloworld
复制过来我们之前的helloworld.c 文件就可以了
nano Kconfig
根据上面的例子写出helloworld的Kconfig
config HELLOWORLD
tristate "helloworld"
help
This option enable support for helloworld
nano Makefile
obj-$(CONFIG_HELLOWORLD)+=helloworld.o
obj-$(CONFIG_HELLOWORLD) += helloworld/
source "drivers/char/helloworld/Kconfig"
首先执行一个操作
. /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
运行,就是配置我们的.config文件
然后我们就可以找到我们的hello world了
找到以后,使用 空格 操作,修改成编译到内核
之后保存退出就可以了
这时候我们可以打开.config文件,查看是不是修改成功了
nano .config
刚才默认配置文件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