Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2600896
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5920
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: LINUX

2014-03-25 12:43:45

(一)移植准备
   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
 
     在串口超级终端会显示如下信息
 

阅读(906) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~