第3阶段——内核启动分析之make menuconfig内核配置(2)
目标:
分析make menuconfig内核配置过程
在上1小结中(内核编译试验)讲到了3种不同的配置:
(1)通过make menuconfig 直接从头到尾配置.config文件
(2) 通过make s3c2410_deconfig 命令在默认的配置上进行自动修改.config文件
(3)使用厂家提供的配置config_ok文件覆盖.config文件
所以,所有的配置结果都是配置.config文件
1 在linux下通过vi指令查看.config内核配置文件
如上图所示:就是一堆配置项: CONFIG_XXX=y/CONFIG_XXX=m/ CONFIG_XXX=n
=y:表示编进内核
=m:表示编译成模块,提供动态加载
=n:表示不参与编译
输入grep “CONFIG_DM9000” -nwR (grep指令详细介绍入口链接http://www.cnblogs.com/lifexy/p/7009706.html)
可以看到4个地方在使用它
(1) include/linux/autoconf.h中定义宏DM9000
include/linux/autoconf.h::#define CONFIG_DM9000 1
然后通过vi include/linux/autoconf.h得到,不管menuconfig中是y/m/n, autoconf.h所有宏都等于1,供C源码使用
(2)在C源码里通过判断autoconf.h的宏DM9000
arch/arm/plat-s3c24xx/common-smdk.c::#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c::#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c::#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
(3)在include/config/auto.conf中设置COMFIG_DM9000=y,供./drivers/net/ Makefile使用
include/config/auto.conf::CONFIG_DM9000=y
通过vi include/config/auto.conf如下图可以看出,和.config配置文件非常相似, 它被顶层Makefile包含,被子目录Makefile使用
(4)在./drivers/net/ 子目录Makefile中添加DM9000文件到obj-$(CONFIG_DM9000)中,其中CONFIG_DM9000=y,所以编译进内核中.
drivers/net/Makefile::obj-$(CONFIG_DM9000) += dm9dev9000c.o drivers/net/Makefile::#obj-$(CONFIG_DM9000) += dm9000.o drivers/net/Makefile::#obj-$(CONFIG_DM9000) += dm9ks.o
因为, 当make uImage编译内核刚开始时,内核会根据.config自动生成auto.conf和autoconf.h这两个文件( 其中autoconf.h是供c源码使用(宏开关),而auto.conf被顶层Makefile包含,供子目录Makefile使用)
2.通过子目录Makefile得出:
如果auto.conf中CONFIG_xxx=y,对应的源码文件会被Makefile编译进内核;
如果auto.conf中CONFIG_xxx=m,对应的源码文件会被Makefile编译成xxx.ko模块文件
如果auto.conf中CONFIG_xxx=n,对应的源码文件不会被makefile编译;
接下来分析Makefile来找到内核编译过程,明白make uImage做了什么
第3阶段——内核启动分析之make menuconfig内核配置(2)的更多相关文章
- Linux内核启动分析过程-《Linux内核分析》week3作业
环境搭建 环境的搭建参考课件,主要就是编译内核源码和生成镜像 start_kernel 从start_kernel开始,才真正进入了Linux内核的启动过程.我们可以把start_kernel看做平时 ...
- 第3阶段——内核启动分析之start_kernel初始化函数(5)
内核启动分析之start_kernel初始化函数(init/main.c) stext函数启动内核后,就开始进入start_kernel初始化各个函数, 下面只是浅尝辄止的描述一下函数的功能,很多函数 ...
- mkimage工具 加载地址和入口地址 内核启动分析
第三章第二节 mkimage工具制作Linux内核的压缩镜像文件,需要使用到mkimage工具.mkimage这个工具位于u-boot-2013. 04中的tools目录下,它可以用来制作不压缩或者压 ...
- 第3阶段——内核启动分析之prepare_namespace()如何挂载根文件系统和mtd分区介绍(6)
内核启动并初始化后,最终目的是像Windows一样能启动应用程序,在windows中每个应用程序都存在C盘.D盘等,而linux中每个应用程序是存放在根文件系统里面,那么挂载根文件系统在哪里,怎么实现 ...
- 第3阶段——内核启动分析之创建si工程和分析stext启动内核函数(4)
目标: (1)创建Source Insight 工程,方便后面分析如何启动内核的 (2)分析uboot传递参数,链接脚本如何进入stext的 (3) 分析stext函数如何启动内核: (3.1) ...
- tms320dm6446内核启动分析
关于达芬奇DM6446,里面内部有两个部分,一个是ARM926ejs的核,还有一个是C64+DSP的视频处理核,而我需要关心的重点是arm926ejs的核(bootload和linux内核) 从boo ...
- linux-2.6.22.6内核启动分析之head.S引导段代码
学习目标: 了解arch/arm/kernel/head.S作为内核启动的第一个文件所实现的功能! 前面通过对内核Makefile的分析,可以知道arch/arm/kernel/head.S是内核启动 ...
- Linux内核启动分析
张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 我的代码可见https://www.shiyanlo ...
- linux-2.6.22.6内核启动分析之Makefile文件
学习目标 分析Makefile文件,了解内核中的哪些文件被编译,如何被编译,连接时顺序如何确定! Linux内核源码中包含很多的Makefile文件,这些Makefile文件又包含其它的一些文件,比如 ...
随机推荐
- goroutine 加 channel 代替递归调用,突破递归调用的层级限制
package main import ( "fmt" "github.com/davecgh/go-spew/spew" "github.com/B ...
- mybatis 详解(二)------入门实例(基于XML)
通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一 ...
- 解决oracle数据库删除sql语句出现^H字样
1:安装readline包 yum install readline* 2:安装源码包: rlwrap-0.30.tar.gz ./configure && make & ...
- 初识Java,猜字游戏
import java.util.*; public class caizi{ public static void main(String[] args){ Scanner in=new Scann ...
- gitlab 实现自动部署(简单Python实现)
功能说明: 当本地master分支执行push动作的时候,服务器端会自动执行master分支的pull操作(还可以执行一些自动化脚本) 原理: git hooks就是那些在git执行特定事件(如com ...
- F数圈圈
Description 幼儿园的小朋友对数字其实不是很感兴趣,他们更感兴趣的是形状,现在给你一个数字,小朋友都会数出其中一共有多少圆圈圈 Input 一个数字n长度不超过19位 Output 输出其中 ...
- java中使用poi导出excel表格数据并且可以手动修改导出路径
在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下
- vs2013下载地址以及安装方法
1.下载vs2013 http://download.microsoft.com/download/0/7/5/0755898A-ED1B-4E11-BC04-6B9B7D82B1E4/VS2013_ ...
- mysql 报错 session halted的解决办法,实际工作中的结论。
写后台程序,发现执行到sql语句时就报错session halted,如下图: 也上网搜过蛮多方法,都不能解决我的问题.后来自己发现了症结所在,其实很简单:执行insert的语句没有包含not nul ...
- (转)CentOS无损调整磁盘分区大小的实现方法
前几天在QQ群里,有一个朋友问到关于Linux中如何无损调整磁盘分区大小的问题,针对这个问题我在实际使用的过程中也曾探索过,所以比较关注如何无损的调整磁盘分区大小,而不丢失数据!在Windows中,我 ...