韦东山 jz2440 学习笔记 —— 内核启动流程分析(一)—— 解压、打补丁、配置、编译

1. 解压、打补丁

解压打补丁的操作同uboot 一致,可以参考这里。

2. 配置

2.1 配置的目的

在编译内核前,在源码根目录下应有一个.config ,里边定义了许多宏,用来控制内核许多功能的开启与否。如下为一个 .config 文件的部分截图:
在这里插入图片描述
如红框所示的 宏CONFIG_MMU 表示使用mmu 功能,在源码中搜索该宏,可以看到该宏控制着许多代码是否编译:
在这里插入图片描述

2.2 配置方法

由于linux 源码可以配置的功能非常多,我这里可以看到.config 有一千多行,如果自己一条条配置不现实,并且我感觉也很难有人能记得住所有的配置项的具体功能。因此,这里直接使用厂家提供的 .config 文件,在此基础上使用 make menuconfig命令做更较小的调整。

首先,将厂家提供的配置文件放到源码根目录下,并改名为.config。然后执行 make menuconfig命令。弹出的交互式配置界面如下:
在这里插入图片描述
在交互式页面中的修改的结果将体现在 .config 文件中。
我执行的时候遇到了点问题,不过参照这里,安装了sudo apt-get install libncurses5-dev解决了。

2.3 自定义menuconfig

值得一提的是,menuconfig 的内容可以自己编辑,这些内容都保存在对应的Kconfig 中,如下:
在这里插入图片描述
Kconfig 中的宏(如上图中的LOCALVERSION)在 make menuconfig 后在.config 中会自动添加一个CONFIG_ 前缀(如下图中的CONFIG_LOCALVERSION)。

2.4 .config 文件的作用

2.4.1 生成autoconfig.h

在编译时,make 会自动根据.cofig文件生成autoconfig.h,从而使得该宏可以在c 文件使用。(c文件中只能使用.h 和.c 文件)

include/linux/autoconf.h:230:#define CONFIG_LOCALVERSION "hello_menuconfig"

在.c文件中使用这个宏的时候,主要要加上这个前缀。
在这里插入图片描述

2.4.2 生成auto.cofig

例如,对于网卡芯片 DM9000的支持,可以编译进内核(y),也可以不编进内核(n),还可以编做模块(m)。make 是会生成 auto.config 供子目录的Makefile 使用。auto.config 中有如下定义:

include/config/auto.conf:144:CONFIG_DM9000=y

子目录中的Makefile 会通过下面的方式使用auto.config 中的CONFIG_DM9000 来控制如何编译:

drivers/net/Makefile:197:obj-$(CONFIG_DM9000) += dm9dev9000c.o

3. 编译

直接make。我make的时候遇到了个小问题,好赖也解决了,记在了这里

不过为了将内核给uboot使用,需要将内核编译成uImage,执行make uImage即可。

4. 下载内核

单板上启动 uboot ,输入k 来等待pc 端传输。
单板使用usb线连接pc,并在pc上安装好usb的驱动,使用DNW工具即可下载 uImage 到flash 。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值