文章目录

  • 全系列传送门
  • 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
    • 编译

全系列传送门

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

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_CLASShelpThis 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 HELLOWORLDtristate "helloworld"helpThis 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文件就可以了

Linux嵌入式驱动开发02——驱动编译到内核相关推荐

  1. Linux驱动开发 -- touch驱动注册

    Linux i2c驱动开发 – touch 驱动 文章目录 Linux i2c驱动开发 -- touch 驱动 前言 一.i2c 驱动框架 二.Linux的MODULE声明 1. MODULE相关声明 ...

  2. Linux驱动开发——串口设备驱动

    Linux驱动开发--串口设备驱动 一.串口简介 串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线路简单.使用两条线即可实现双向通信,一条用于发送,一条用于 ...

  3. STM32MP157驱动开发——SPI驱动

    STM32MP157驱动开发--SPI驱动 一.简介 1.SPI介绍 2.STM32MP1 SPI介绍 3. ICM-20608 简介 4.Linux下的SPI框架 二.驱动开发 1)IO 的 pin ...

  4. 【内核配置】六、修改内核自带的的LCD驱动源码并编译进内核 | 烧写到Mini2440__TD35 完整攻略...

    主   机:VMWare--Ubuntu-16.04.2-x64-100ask 开发板:Mini2440--256M NandFlash, 2M NorFlash, 64M SDRAM, LCD-TD ...

  5. 嵌入式Linux驱动开发 02:将驱动程序添加到内核中

    文章目录 目的 基础说明 添加到内核中 Kconfig Makefile 驱动程序 编译与测试 模块方式 编译到内核中 总结 目的 在上一篇文章 <嵌入式Linux驱动开发 01:基础开发与使用 ...

  6. linux驱动开发音频设备驱动,linux驱动开发—基于Device tree机制的驱动编写

    摘要:媒介 Device Tree是一种用去描绘硬件的数据布局,类似板级描绘说话,发源于OpenFirmware(OF).正在现在遍及应用的kernel 2.6.x版本中,对分歧仄台.分歧硬件,往] ...

  7. Linux驱动开发 | 模块驱动

    应用层的进程是通过内核层驱动来访问硬件的,Linux内核源码在每次编译之后生成一个总的镜像,将镜像加载内存中运行并使用(内核在系统运行时会占用内核空间).驱动属于内核源码的一部分,如果每次修改驱动都要 ...

  8. Linux 设备驱动开发思想 —— 驱动分层与驱动分离

    前面我们学习I2C.USB.SD驱动时,有没有发现一个共性,就是在驱动开发时,每个驱动都分层三部分,由上到下分别是: 1.XXX 设备驱动 2.XXX 核心层 3.XXX 主机控制器驱动 而需要我们编 ...

  9. 转:Linux设备驱动开发(1):内核基础概念

    一.linux设备驱动的作用 内核:用于管理软硬件资源,并提供运行环境.如分配4G虚拟空间等. linux设备驱动:是连接硬件和内核之间的桥梁. linux系统按个人理解可按下划分: 应用层:包括PO ...

最新文章

  1. 剑指offer_第13题_调整数组顺序使奇数位于偶数前面
  2. dede:php不显示,dede 织梦编辑框显示不出来的问题
  3. python爬虫 小白轻松从0到1_小白学 Python 爬虫(1):开篇
  4. (网页)JS编程中,有时需要在一个方法返回两个个或两个以上的数据
  5. php数据访问层设计,php - Zend框架数据访问层(DAL) - 堆栈内存溢出
  6. oracle 中DATETIME与TIMESTAMP区别
  7. 编译原理(第3版) 清华大学出版社 黄贤英等人著作 部分课后习题答案
  8. Altium Designer PCB等长线设计终极技巧(单端和差分线)
  9. 【前端_React】React小书
  10. 51单片机简易智能温度检测系统
  11. 傲腾内存 可以用ghost系统_英特尔傲腾是什么?让你秒懂英特尔傲腾技术
  12. 微信商户平台关闭自动提现
  13. “法外狂徒”为什么那么多?用程序来告诉你!
  14. ggplot2 annotate()函数
  15. Aurora 8b/10b AXI4-ST回环测试
  16. linux客户端交互,客户端交互性
  17. Android中获取GPS搜索到的卫星颗数、并获取每颗卫星的信噪比
  18. 4x4按键c语言,52单片机C语言4X4键盘.docx
  19. 微信小程序开发 01
  20. Pinterest的开源兴趣

热门文章

  1. 朱铎先:忽视这一点,工业几点零都是零!
  2. PowerDesigner 字体设置等操作
  3. 21世纪网络费用明明过分便宜,为什么网络运营商却收取过高的费用?
  4. Galaxy A系列新品亮相,看三星如何解决年轻消费痛点?
  5. 大话设计模式--Python
  6. 古诗词推荐(二):若似月轮终皎洁,不辞冰雪为卿热
  7. AppStore 上架中的分类
  8. 铱配合物探针比较新进展|铱配合物玻璃化温度|铱配合物的异构化原因|多功能铱配合物磷光材料的合成及其性质研究
  9. Unity发布预审:检查出调用苹果禁用api: [dlopen, dlsym]
  10. pdf文件里面水印如何全部去掉