第3阶段——内核启动分析之makemenuconfig内核配置

NQian NQian     2022-09-14     630

关键词:

目标:

分析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:129:#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: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:250:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

(3)在include/config/auto.conf设置COMFIG_DM9000=y,供./drivers/net/ Makefile使用

include/config/auto.conf:128: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:197:obj-$(CONFIG_DM9000) += dm9dev9000c.o

drivers/net/Makefile:198:#obj-$(CONFIG_DM9000) += dm9000.o

drivers/net/Makefile:199:#obj-$(CONFIG_DM9000) += dm9ks.o

因为make uImage编译内核刚开始时,内核会根据.config自动生成auto.confautoconf.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阶段——内核启动分析之makemenuconfig内核配置

目标:分析makemenuconfig内核配置过程 在上1小结中(内核编译试验)讲到了3种不同的配置:(1)通过makemenuconfig直接从头到尾配置.config文件(2)通过makes3c2410_deconfig 命令在默认的配置上进行自动修改.config文件(3)使用厂家提供的配置c... 查看详情

第3阶段——内核启动分析之start_kernel初始化函数

内核启动分析之start_kernel初始化函数(init/main.c)stext函数启动内核后,就开始进入start_kernel初始化各个函数,下面只是浅尝辄止的描述一下函数的功能,很多函数真正理解需要对linux相关体系有很深的了解后才能明白 代码如下:&nbs... 查看详情

第3阶段——内核启动分析之挂载根文件系统和mtd分区介绍

内核启动并初始化后,最终目的是像Windows一样能启动应用程序在windows中每个应用程序都存在C盘、D盘等而linux中每个应用程序是存放在根文件系统里面那么挂载根文件系统在哪里,怎么实现最终目的运行应用程序? 1.进入stext函... 查看详情

内核启动分析(代码片段)

...分析的准备工作2.16.2.head.S文件分析12.16.3.内核启动的汇编阶段2.16.4.内核启动的C语言阶段12.16.5.内核启动的C语言阶段22.16.6.内核启动的C 查看详情

内核启动12(代码片段)

...分析的准备工作2.16.2.head.S文件分析12.16.3.内核启动的汇编阶段2.16.4.内核启动的C语言阶段12.16.5.内核启动的C语言阶段22.16.6.内核启动的C 查看详情

第1阶段——uboot启动函数bootm命令分析

本节主要学习:详细分析UBOOT中"bootcmd=nandread.jffs20x30007FC0kernel;bootm0x30007FC0"中怎么实现bootm命令启动内核.其中bootm要做的事情:a读取头部,把内核拷贝到合适的地方(0X30008000)b在do_boom_linux()中把参数给内核准备好,并告诉内核参数的首地... 查看详情

androido:init进程启动流程分析(阶段二)

在前一篇博客AndroidO:init进程启动流程分析(阶段一)中,我们分析了init进程第一阶段(内核态)的流程。在本篇博客中,我们来看看init进程第二阶段(用户态)的工作。一、初始化属性域init进程的第二阶段仍然从main函数开始入... 查看详情

内核启动过程分析

...考博客:《如何快速确定程序的入口》。3、汇编代码阶段3.1、设置成SVC模式并禁止终端s 查看详情

android笔记-android启动之linux内核启动

...以分为三篇文章来介绍,其实也就是Android启动的三个阶段。第一个阶段是Lin 查看详情

《linux操作系统分析》之linux系统的理解及学习linux内核的心得

...行第二篇:《Linux操作系统分析》之分析精简的Linux的内核中断和时间片轮询第三篇:《Linux操作系统分析》之跟踪分析Linux内核的启动过程第四篇:《Linux操作系统分析》之使用库函数API和C代码中嵌入汇编代码两种方... 查看详情

uboot启动源码分析

开发板smdk2410的uboot为例。 第一阶段文件为cpu/arm920t/start.S和board/smdk2410/lowlevel_init.S。一、第一阶段 1、设置cpu为svc模式 2、关看门狗、关中断 3、cpu初始化 4、设置栈 5、时钟初始化 6、拷贝uboot到ram 7、清除bss段 8、setPreLoadedONRAM 9... 查看详情

第1阶段——uboot通过nand命令读内核分析

本节主要学习:详细分析UBOOT中"bootcmd=nandread.jffs20x30007FC0kernel;bootm0x30007FC0"怎么实现nand命令读内核.1.nandread.jffs20x30007FC0kernel步骤a:从NANDFILSHE中kernel分区读出步骤b:放到0x30007FC0去1.1 kernel分区:是flash中内核区其中在flash中定 查看详情

u-boot.2012.10——mini2440(启动流程分析)

...:https://blog.csdn.net/suiyuan19840208/article/details/72399491、第一阶段功能  *硬件设备初始化  *加载u-boot第二段代码到RAM空间  *设置好栈  *跳转到第二段代码入口2、第二段代码的功能  *初始化本阶段使用的硬件设备  *检... 查看详情

uboot启动第一阶段分析(代码片段)

一.uboot第一阶段初识  1.1.什么是uboot第一阶段    1.1.1.启动os三个阶段      1.1.1.1.bl0阶段        a.这段代码是三星固化到iROM中,可以查看《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》        b.... 查看详情

第二篇:白话tornado源码之待请求阶段

...的整个过程,对于整个过程可以分为两大部分:启动程序阶段,又称为待请求阶段(上图1、2所有系列和3.0)接收并处理客户端请求阶段(上图3系列)简而言之:1、在启动程序阶段,第一步,获取 查看详情

内核配置裁剪及启动流程(代码片段)

文章目录一、内核分析之编译初体验二、内核分析之配置三、内核分析之Makefile四、内核分析之启动过程一、内核分析之编译初体验1.解压缩2.配置内核的配置有三种方法(1)直接执行makemenuconfig,从头到尾每一条都自... 查看详情

androido:init进程启动流程分析(阶段一)

目的最近打算回顾一下以前研究Framework时遇到的问题。自己发现Android演进到8.0后,许多流程又都发生了改变,于是打算在之前博客的基础上,结合新的代码重新梳理一遍。本篇博客主要记录一下Android8.0中的init流程。... 查看详情

rk3399快速上手|03-rk3399启动流程分析

文章目录一、Rockchip处理器通用启动流程1.启动路径2.启动阶段3.启动流程分析3.1.图示3.2.第一阶段3.3.第二阶段3.4.第三阶段3.5.第四阶段3.6.第五阶段二、rockchip固件打包方法1.启动流程需要的文件2.idbloader.img3.uboot.img4.trust.img三、烧... 查看详情