(二)linux内核镜像制作

(一)目的

在进行嵌入式开发的时候,我们往往会先在电脑上安装交叉编译器,然后编译目标板上的代码,最后把代码下载到电路板中,嵌入式系统组成包括:BootLoader+kernel+filesystem+application,前面我们已经制作好了BootLoader,这一节我们制作一个kernel镜像

(二)工具
  • linux-3.5版本内核
  • Ubuntu 16.04
  • linux交叉编译环境(我已经安装过,没有安装的可以下载arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)

这里说明一点我们获取linux内核一般可以从linux官方获取,或者从开发板的厂商那获取,我比较推荐第二种,因为第一种还需要我们进行有关硬件的配置

(三)操作流程

1、将linux-3.5-20141114.tar拷贝到Linux系统中

2、解压linux-3.5-20141114.tar

tar -xvf linux-3.5-20141114.tar

3、进入解压后的目录

make menuconfig:打开配置界面,若无法打开需要安装库
apt install ncurses-dev

图一
运行make menuconfig打开上面的窗口可以进行内核功能的删减
按下面的步骤修改一个地方:

System Type  --->    
[ ] Support TrustZone-enabled Trusted Execution Environment   //按空格取消该模块

4、修改内核的顶层Makefile
因为最终内核运行到arm开发板,编译需要在PC端,所以需要使用到交叉编译器,在Makefile里指定交叉编译器为arm-linux-
图二
5、拷贝Linux3.5目录下的tiny4412_linux_defconfig为默认配置文件

cp  tiny4412_linux_defconfig   .config

6、编译内核

make -j8

若出现一下错误:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
/driver/linux-3.5/kernel/Makefile:133: recipe for target 'kernel/timeconst.h' failed
make[1]: *** [kernel/timeconst.h] Error 255
make[1]: *** 正在等待未完成的任务....

修改kernel/timeconst.pl的373行:

if (!defined(@val)) {
		@val = compute_values($hz);
	}
为
if (@val) {
		@val = compute_values($hz);
	}

7、烧写内核到SD卡

编译完成会提示:Kernel: arch/arm/boot/zImage is ready

将SD卡插入读卡器并连接到Ubuntu

cd arch/arm/boot
dd iflag=dsync oflag=dsync if=./zImage of=/dev/sdb  seek=1057

大概持续40秒

8、验证是否烧写成功
将SD卡拔出插到自己的开发板上验证,启动后在串口里会提示内核启动的流程即为成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值