ARM UBoot

一、UBoot 如何调用内核

         UBoot通过命令把Linux内核镜像文件从Flash中读取到内存的某一位置然后设置PC寄存器执向该位置UBoot调用Linux内核。

        调用内核的条件是:

           1. R0 =0

           2.R1=适当的机器码,位于linux/arch/arm/tools/mach-type文件中

           3.R2 =启动参数标记列表在内存中的位置

           4.CPU必须设置为SVC模式并关闭中断

           5.MMU必须关闭

 

二、UBoot 如何给内核传递参数

       UBoot和内核交互是单向的,两个程序不能同时运行,那么要实现参数传递只能通过把参数存放到一个固定内存位置然后调用theKernel函数给对R0,R1,R2寄存器赋值。Linux启动调用start_kernel函数读取内容即可。

 

三、UBoot 启动流程

(1)、u_bootstage1 部分流程

         

(2)、u_bootstage2 部分流程

      

四、uboot 在mini2440 开发板上移植步骤

从网上下载uboot,内核文件是s3c2410源码

第一:改机器码

    linux2.6.33/arch/arm/tools/mach-type文件中,

   修改s3c2440机器码为1999

第二:修改外部时钟晶振

   修改s3c24xx_init_clocks函数参数改为12M126个零)该函数位于

   (arch/arm/mach-s3c2440/mach-smdk2440.c)

第三:MTD分区(修改Nand Flash文件分区)

   Linux中用static struct mtd_partition这个结构体

   来描述NANDFLASH的分区情况

   (位于linux/arch/arm/plat-s3c24xx/common-smdk.c文件中)

第四:LCD相关参数设置

     /arch/arm/mach-s3c2440/mach-smdk2440.c中定义

第五:编译内核

       yaffs2补丁

       yaffs2 /README-linux-patch

       ./patch-ker.sh c /myfile/linux-2.6.33 (自己指定的linux内核文件夹)

       linux内核顶层makefile文件中 189 ARCH ?=  arm-,CROSS_COMPILE ?= arm-linux-

       make s3c2410_defconfig

第六: 手动修改配置

       make menuconfig

     修改参数有

     (1)内核特性 kernel Features ->[*]use the ARM E ABI to compile

     (2)文件系统 File systems ->Miscellaneous filesysytems ->[*]YAFFS2 file system support

     (3)支持USB输入 Device Drivers ->HID Devices ->[*]USB Human interface Device

                                                   [*]dev hidev run HD device support

第七:执行 make zImage

第八:制作镜像头文件

       uboot源码中的tools目录下的mkimage工具拷贝到内核源码 linux路径arch/arm/boot/

       执行 ./mkimage -n 'linux-2.6.33.7' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage  uImage

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值