kernel打补丁,编译流程
内核源码包: linux-2.6.22.6.tar.bz2
补丁文件: linux-2.6.22.6_jz2440_v2v3.patch

1. 解压
    tar xjf linux-2.6.22.6.tar.bz2
2. 打补丁
    cd linux-2.6.22.6                                // 先进入源码顶层目录
    patch -p1 < ../linux-2.6.22.6_jz2440_v2v3.patch    // -p1 表示忽略补丁文件中的第一层目录
    
3. 配置, 配置的结果是为了生成.config
    3.1 可以直接执行make menuconfig   从头到尾每一项都去配置一下
    3.2 可以使用默认配置, 在默认配置上修改    
        find ./ -name "*defconfig" 命令可以找到默认配置文件,
        arm架构默认配置文件所在目录linux-2.6.22.6/arch/arm/configs
        在linux-2.6.22.6/arch/arm/configs目录下找到合适的默认配置文件, 比如s3c2410_defconfig
        回到顶层目录执行
            make s3c2410_defconfig   // 所有配置信息保存到.config文件里面
        然后执行
            make    menuconfig         // 读取.config文件,修改菜单配置项

3.3  使用厂家提供的配置文件
        找到厂家的配置文件,比如 config.ok
        把config_ok复制为.config
            cp  cofig.ok  .config
        然后执行
            make   menuconfig         // 读取.config文件,修改菜单配置项

4、编译
    make   uImage      // uImage 是  头部  +  真正内核  的镜像文件                  
                  
                  
配置的结果就是生成了一个.config文件:
下面分析.config文件
里面是一些配置项, 配置项由以下几种值
                  =y 表示对这一选项的支持会编进内核里面去
                  =m 表示对这一选项的支持会编译成模块, 模块可以动态加载
                  is no set 表示未设置改选项
                  
以CONFIG_DM9000=y为例:
搜索该选项包含的文件: grep "CONFIG_DM9000" * -nwR
book@www.100ask.org:/work/system/linux-2.6.22.6$ grep "CONFIG_DM9000" * -nwR
...
arch/arm/configs/s3c2410_defconfig:588:CONFIG_DM9000=y
...
arch/arm/plat-s3c24xx/common-smdk.c:46:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c:162:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c:200:#endif /* CONFIG_DM9000 */
arch/arm/plat-s3c24xx/common-smdk.c:250:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
...
drivers/net/Makefile:197:obj-$(CONFIG_DM9000) += dm9dev9000c.o
drivers/net/Makefile:198:#obj-$(CONFIG_DM9000) += dm9000.o
drivers/net/Makefile:199:#obj-$(CONFIG_DM9000) += dm9ks.o
include/config/auto.conf:144:CONFIG_DM9000=y
include/linux/autoconf.h:145:#define CONFIG_DM9000 1

可以发现有以下几种文件用到了CONFIG_DM9000配置项:
1. C源码文件 用到CONFIG_DM9000宏, 在include/linux/autoconf.h中定义
2. 子目录drivers/net/Makefile
3. include/config/auto.conf
4. include/linux/autoconf.h  定义CONFIG_DM9000宏

include/linux/autoconf.h从名字可以看出autoconf.h是自动生成的,
autoconf.h的内容来源于.config,
当make uImage时候, make机制会自动的根据.config生成autoconf.h

下面分析include/linux/autoconf.h:
可以看到里面定义了一些宏, 这些宏几乎都被定义为1
.config中的配置项不管是=y或=m着这里都会被定义为1, 其他配置项定义了数据的都会照搬过来
#define CONFIG_DM9000 1

而.config配置项=m或=y是在子目录Makefile中体现
下面分析子目录Makefile:
obj-y += xxx.o // 表示xxx.o文件最终会被编译进内核里面
obj-m += aaa.o // 表示aaa.o文件最终会被编译成一个可加载的.ko模块里面

在子目录drivers/net/Makefile中
就是用到了.config中的CONFIG_DM9000=y

obj-$(CONFIG_DM9000) += dm9000c.o
=>
obj-y += dm9000c.o // 这样就会把dm9000c.o编译进内核

综上:
1. include/linux/autoconf.h所定义的宏来源于.config
2. 子目录的Makefile定义的obj-$(CONFIG_xx)是根据.config中的CONFIG_xxx=y或CONFIG_xxx=m决定的

子目录下的Makefile用到的配置项哪里来的???
来源于include/config/auto.conf, 而include/config/auto.conf也是来源于.config
include/config/auto.conf是根据.config自动生成的, 会被顶层Makefile包含用来给子目录Makefile使用

make uImage过程总结:
1、.config被用来自动创建include/linux/autoconf.h文件,给源代码使用
2、.config被用来自动创建include/config/auto.conf文件,被顶层Makefile来包含,给子目录下Makefile使用

下面从顶层Makefile分析.

01-kernel打补丁,配置,编译流程相关推荐

  1. 高通mdm9607 mcfg_sw.mbn配置编译流程

    mdm9607 mcfg_sw.mbn修改编译方法 一.平台实际遇到问题: 1.未添加运营商mcfg_sw.mbn配置文件,存在设备找网速度慢的问题. 2.添加高通默认配置mcfg_sw.mbn,出现 ...

  2. esp8266 SDK开发之编译流程

    最近刚完成自己8266的小项目,已经发布在github上,有兴趣的朋友可以看一下 github地址:esp-ujn 1. 通过MQTT协议与服务器交互 2. 内置HTTP服务器,支持通过浏览器进行参数 ...

  3. 最新历史版本 :LINUX KERNEL 配置编译中文指南

    LINUX KERNEL 配置编译中文指南 序言 近几年,linux大行其道,令不满windows蓝屏的使用者跃跃欲试,结果发现linux安装不及windows方便,界面不及windows友好,配置不 ...

  4. 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介

    作者 : 韩曙亮 转载请出名出处 : http://blog.csdn.net/shulianghan/article/details/38636827 一. Linux 内核简介 1. 内核功能简介 ...

  5. 开发板与虚拟机组网、uboot源码makefile分析、uboot安全启动与非安全启动方式、uboot源码配置与编译流程、制作TF启动盘

    开发板与虚拟机组网. 局面:开发板.PC(Ubuntu系统).网线直连PC:设置Ubuntu系统:1.设置桥接模式,桥接到PC的有线网卡上:2.手动配置IP V4的地址信息,注意和开发板保持在同一网段 ...

  6. 高通平台android 环境配置编译及开发经验总结

    完全转自:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  7. 高通Android智能平台环境搭建_编译流程分析

    高通Android智能平台环境搭建_编译流程分析 高通平台环境搭建,编译,系统引导流程分析 TOC \o \h \z \u 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境 ...

  8. 高通平台android 环境配置编译及开发经验总结【转】

    1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...

  9. 4-uboot编译流程

    [uboot] (第四章)uboot流程--uboot编译流程 2016年11月01日 21:23:36 阅读数:2983 以下例子都以project X项目tiny210(s5pv210平台,arm ...

最新文章

  1. 可视化文本数据—词云
  2. C 家族程序设计语言发展史
  3. python小游戏源码-python21点小游戏源码免费下载
  4. 【基础】有关T-SQL的10个好习惯
  5. @Transactional 事务失效记录
  6. lingo入门(数据部分)
  7. synchronized的4种用法
  8. java菜单如何点解_解读java菜单
  9. python退出程序 只跳出while_为什么我的简单程序从不退出while循环?
  10. 医院信息管理系统需求分析
  11. Hello MySQL(四)——MySQL数据库创建实例
  12. openGL中向量的加减乘除运算
  13. ubuntu WPS字体缺失 解决方法
  14. 贪吃蛇大作战中的“马太效应”
  15. 【李峋的爱心代码4】
  16. mac book 华为C8815不能debug
  17. 从头开始学51单片机之4:C51程序设计基础
  18. Gym - 100543G Virus synthesis Gym
  19. 青岛新媒体运营教程:短视频没脚本怎么行,镜头脚本模板直接套用
  20. 【数学模型】层次分析

热门文章

  1. Spring Boot配置Quartz定时任务
  2. 华北科技学院计算机专业录取分数线,华北科技学院录取分数线2021是多少分(附历年录取分数线)...
  3. iOS 整体项目竖屏 相机横屏
  4. macos\Linux下使用fcrackzip破解zip压缩文件密码
  5. linux 没有nc命令,linux nc命令
  6. 5、canvas 渐变填充色
  7. win7系统环境变量path默认值
  8. 3D点云之PCL学习之路(二)
  9. TMS320F2812调试记录一
  10. 30多岁转行做python_零基础30 岁可以转行做Python开发吗?