本章内容对应《嵌入式Linux应用开发完全手册》第16章 - 移植Linux内核。
移植Linux内核 - 内核配置裁剪及启动流程

本章和u-boot很像,那一章更全:https://blog.csdn.net/weixin_45519751/article/details/107667326

一、第001节_内核启动流程分析之编译体验

1.1、解压、打补丁

首先找到文件:
linux-2.6.22.6.tar.bz2
linux-2.6.22.6_jz2440_v1.patch
把这两个文件放到Ubuntu上。
然后解压、打补丁,如下:
移植Linux内核 - 内核配置裁剪及启动流程

1.2、配置内核

有三种方法配置内核:

方法1、直接在Ubuntu中执行
make menuconfig
但是这种方法配置项太多了,我们去选择修改太麻烦。我们不用这种方法,我们去直接看方法2。

方法2、使用默认配置,并在上面进行修改
执行find -name “* defconfig*”,去查找文件名为defconfig的文件,你会在里面发现了arm架构的comfig:
移植Linux内核 - 内核配置裁剪及启动流程
因此我们到./srch/arm/config下去看看:
移植Linux内核 - 内核配置裁剪及启动流程
发现其中有一个s3c2410_defcofig,那我们就可以使用s3c2410_defcofig来配置,如下面两幅如所示:
移植Linux内核 - 内核配置裁剪及启动流程
注意下图中有一个configuration written to .config,意思是说把make s3c2410_defcofig命令是把所有的配置项写到.config文件中。
移植Linux内核 - 内核配置裁剪及启动流程

最后执行命令make menuconfig(这条命令是在s3c2410_defcofig的基础上的显示一个菜单(菜单里面是一些配置项),如下图。在这个菜单中我们就可以选择、修改配置项了)(这些配置项是从.config文件中读取的)。
Ubuntu终端出现如下:
这个菜单的使用:下图最上面的文字已经给出了操作说明。
移植Linux内核 - 内核配置裁剪及启动流程

方法3、使用厂家提供的配置文件
执行如下两条命令即可:
cp config_厂家 .config
make menuconfig
如韦东山提供了韦东山的厂家配置文件,叫做config_ok
移植Linux内核 - 内核配置裁剪及启动流程
执行完毕之后也会出现方法2所示的菜单。

1.3、 编译

即编译内核。
我们可以在Ubuntu中输入make uImage命令,然后就会生成一各uImage文件。

uImage是什么?补充一下uImage概念:
内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。
那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。

1.4、实验

我们想试试,把内核烧写进2440并运行它。
步骤:
先把u-boot烧写进2440(有了u-boot才可以启动内核)
然后在串口执行u-boot,显示如下:
移植Linux内核 - 内核配置裁剪及启动流程
然后需要执行u-boot的 [k] 命令。[k]命令是把内核下载到2440板子。
(要知道,你要想执行[k]命令,需要连接2440与电脑之间的USB device线)。
连接上USB线之后,我们使用一个软件名为dnw.exe文件(在F:\1\002_JZ2440资料光盘_20180516(免费)\资料光盘\B盘\工具和驱动\USB DNW\for win7 & win8 & win10)去把uImage发送到2440,然后就完成内核的烧写了。
再看u-boot菜单,[b] 表示启动system(操作系统的核心部分就是内核),因此我们在uboot里输入b,就启动了操作系统。
u-boot中k命令与b命令输入之后串口如下图所示:
移植Linux内核 - 内核配置裁剪及启动流程
移植Linux内核 - 内核配置裁剪及启动流程
上图就是内核启动过程的信息。

好,我们这节课是体验内核的启动,完成了!

二、第002节_内核启动流程分析之配置

上节课,关于配置项,咱们没有具体讲。这节课来讲这个内核配置。
由第一节课可知,make s3c2410_defcofig会生成一个.comfig文件,我们可以执行vi .config命令去查看一下这个文件,这个文件里面就是各种配置项。

我们以DM9000为例,分析一下配置。
输入grep “CONFIG_DM9000” * -nwR命令,终端上会打印出所有的含有CONFIG_DM9000的文件:
移植Linux内核 - 内核配置裁剪及启动流程
但是含有CONFIG_DM9000的这些文件,只以下四者对我们有用,并且我们对这4者进行分析:
1、C源码中有CONFIG_DM9000,可以大胆猜想CONFIG_DM9000肯定是个宏,而只有头文件中有宏,因此我们又可以猜出此头文件即为④include/linux/autoconf.h,我们可以vi autoconf.h查看autoconf.h,发现autoconf.h中的CONFIG_DM9000的值为1。
2、再来看②makefile。
你看下图最左侧内容“内核子目录”的内容以及下下一幅图,就是说如果obi后面为-y,则dm9000.c就会被编译到内核里面去,如果后面是-m,则dm9000.c被编译成一个模块dm9ks.o。看下下一幅图,obj后面是配置项CONFIG_DM9000,而这个配置项CONFIG_DM9000到底是等于y还是等于m,就是在③include/config/auto.cinf文件中定义的。
移植Linux内核 - 内核配置裁剪及启动流程
移植Linux内核 - 内核配置裁剪及启动流程

相关文章: