(一)移植准备
1)linux-2.6.22.6,在可以下载
2)yaffs2文件系统,在获取代码root.tar.gz
(二)linux内核启动过程分析
linux启动主要分两个部分,第一是与架构和开发板相关的引导阶段,第二是通用的启动过程,下面分别介绍两部分的具体过程。
1)第一部分:首先检测是否支持当前的架构的处理器,调用函数是__lookup_processor_type函数,然后检测是否支持当前开发板,调用函数是__lookup_machine_type函数;如果满足前面两个条件,则下面开始为调用下一阶段的start_kernel函数作准备,比如开始设置页表,禁止ICache,Dcache,数据Cache,指令Cache使能MMU等,以便连接内核的时候使用虚拟地址,然后是调用start_kernel的常规步骤,包括复制数据段,清除BSS段,设置栈指针,保存CPU ID,到processor_id变量保存机器类型ID,到__machine_arch_type变量调用start_kernel函数等;
2)第二部分:使用C语言编写,进行内核的初始化全部工作,最后调用rest_init函数启动init进程,创建第一个进程:init进程,还包括部分架构和开发板相关的代码,如重新设置时钟,页表,初始化串口等;
下面图标示例kernel启动过程
(三)开始移植内核
1)首先配置内核,编译内核,修改顶层Makefile文件如下
185 ARCH ?= $(SUBARCH)
186 CROSS_COMPILE ?=
修改为
185 ARCH ?= arm
186 CROSS_COMPILE ?= arm-linux-
2)然后选择一个相近的配置文件如arch/arm/configs/s3c2410_defconfig文件来配置内核,从而生成.config文件
make s3c2410_defconfig
3)编译内核make zImage或make uImage在arch/arm/boot/下生成zImage文件
make zImage
4)使用u-boot的工具mkimage制作uImage文件,将上面步骤中生成的zImage文件拷贝至u-boot-1.1.6/tools/目录下,然后使用下面命令制作uImage文件
.mkimage -A arm -O linux -T kernel -C none -a 32000000 -e 32000040 -n linux-2.6.22.6 -d zImage uImage
5)然后开启tftp服务使用下面命令可以下载uImage至nand flash,启动会显示如下信息
tftp 0x32000000 uImage
bootm 0x32000000
在串口超级终端会显示如下信息
阅读(948) | 评论(0) | 转发(0) |