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

4412 make menuconfig和make的更多相关文章

  1. 基于讯为4412开发板的Android开发流程

    讯为4412开发板  使用三星2410芯片,基于arm9架构,由于自己电脑硬件的局限,只能跑Android4.0.3系统. 1.Uboot这个直接使用官方镜像烧写就可以了,一般情况不用去重复烧写. 略 ...

  2. 迅为4412开发板Linux驱动教程之GPIO的初始化

    视频下载地址:http://pan.baidu.com/s/1c06oiti GPIO的初始化 • 在内核源码目录下使用命令“ls drivers/gpio/*.o”,可以看到“gpio-exynos ...

  3. 4412 移植mpu9250尝试

    4412的板子IO都是1.8v的.只有I2C6是用了电平转换到了3.3v.所以我准备使用I2C6来驱动mpu9250 一.首先去掉占用的模块 menuconfig中去掉触摸的驱动 Device Dri ...

  4. 4412 4路pwm输出

    一.4412 xpwmTOUT1 这是4412的GPD0_1路,itop中被使用为LCD的背光电路的pwm功能.因此如果使用教程中的代码,同样操作GPD0_1是行不通的. 会出现错误,所以需要解除在内 ...

  5. 4412 GPIO初始化

    一.GPIO的初始化 • 在内核源码目录下使用命令“ls drivers/gpio/*.o”,可以看到“gpioexynos4”被编译进了内核.通过搜索*.o文件,可以知道内核编译内哪些文件.针对的看 ...

  6. make menuconfig出错,需要安装libncurses5-dev找不到文件的终极解决办法(不必更换源,适用于ubuntu 32位平台)

    make menuconfig 错误,显示有curse 字样的文件没有装.用apt-get install 找不到,网上其他的办法说是源的问题,所以又更新了一下源,但是还是不好用,网速慢,更新太慢. ...

  7. Linux kernel4.4.12 添加make menuconfig 可选项

    Linux kernel 源码添加可选项 闲来无事,顺便记录一篇在Linux kernel make menuconfig 内添加一个可选项. 说不定将来就要用到这个东西呢. linux kernel ...

  8. 【转帖】嵌入式4412开发板QT5.7编译安装到arm

    QT5.7.0+UBUNTU16.04+ARM-NONE-LINUX-GNUEABI4.8+busybox最小LINUX系统 Orandragon记录 本文转自迅为4412开发板群:http://to ...

  9. 4412开发板搭建Uboot、Kernel和Android4.0的编译环境方法

    本文转自迅为4412开发板实战教程书籍:http://www.topeetboard.com 迅为是基于Ubuntu12.04.2平台做开发,所有的配置和编译脚本也是基于此平台,没有在其它平台上测试过 ...

随机推荐

  1. python比C程序相比非常慢

    w http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001374738136930 ...

  2. 网易新闻实战 --- flask,ORM, Ajax异步删除

    项目概述: 包含功能: 前端-- 新闻首页 新闻分类页 新闻详情页 后端-- 后台新闻管理(列表,分页) 新增新闻 修改新闻 删除新闻(AJAX)

  3. 【小刘的linux学习笔记 】——01认识操作系统

    1.操作系统的地位 计算机系统由硬件和软件两部分组成.通常把未配置软件的计算机称为裸机.直接使用裸机不仅不方便,而且将严重降低工作效率和机器的利用率. 操作系统(OS,Operation System ...

  4. 基于vux的Vue路由切换动画

    const history = window.sessionStorage history.clear() let historyCount = history.getItem('count') * ...

  5. JavaScript实现的发布/订阅(Pub/Sub)模式

    JavaScript实现的发布/订阅(Pub/Sub)模式 时间 2016-05-02 18:47:58  GiantMing's blog 原文  http://giantming.net/java ...

  6. mysql 5.7 创建函数报错,This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creat

    今天用命令创建函数, 报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration ...

  7. Pandas处理缺失的数据

    处理丢失数据 有两种丢失数据: None np.nan(NaN) import numpy as np import pandas from pandas import DataFrame 1. No ...

  8. 【Linux】php7.2.8 + xdebug + composer + php代码覆盖率 + jenkins配置 (实操记录,亲测可用)

        [一.linux安装php 7.2.8] 1.wget http://nginx.org/download/nginx-1.9.9.tar.gz              # nginx可不安 ...

  9. project euler-34

    145是个奇怪的数字.由于1!+ 4! + 5! = 1 + 24 + 120 = 145. 请求出能表示成其每位数的阶乘的和的全部数的和. 请注意:由于1! = 1和2! = 2不是和,故它们并不包 ...

  10. 为什么需要在 React 类组件中为事件处理程序绑定this?

    https://juejin.im/post/5afa6e2f6fb9a07aa2137f51 事件绑定作为回调函数参数传递给函数,丢失其上下文,执行的是默认绑定,不是隐式绑定 类声明和类表达式的主体 ...