U-Boot分析及在S3C2440上的移植

时间:2022-09-20 04:45:32

U-Boot分析及在S3C2440上的移植

摘要 本文简要介绍Bootloader,分析归纳U-Boot的源码结构及启动过程源码,详细阐述U-Boot在嵌入式开发板S3C2440上的移植过程。应用结果表明U-Boot在S3C2440上成功移植,为移植Linux操作系统奠定了基础。

关键词 Bootloader;U-Boot;S3C2440;移植

中图分类号TP39 文献标识码A 文章编号 1674-6708(2011)34-0170-01

1 Bootloader简介

Bootloader在系统上电时开始执行,初始化硬件设备、准备好软件环境,为调用操作系统内核作好准备。U-Boot即通用Bootloader是遵循GPL条款的开放源代码项目。

2 U-Boot的源码结构

本文在 U-Boot-1.1.6的基础上进行分析和移植。U-Boot-1.1.6根目录下共有26个子目录,可分为4类:平台相关的或开发板相关的;通用的函数;设备的驱动程序;U-Boot工具、示例程序、文档。

3 U-Boot启动过程源码

U-Boot属于两阶段的Bootloader。U-Boot第一段代码分析:硬件设备初始化包括屏蔽所有的中断、设置CPU的速度和时钟频率等;为第二阶段代码准备RAM空间;复制第二阶段代码到RAM空间;设置好堆栈;跳转到第二阶段代码的C入口点。

U-Boot第二段代码分析:初始化本阶段用到得硬件设备;检测系统内存映射;将内核映像和根文件系统映像从FLASH读到RAM空间中;为内核设置启动参数;调用内核。

4 U-Boot移植过程

4.1 移植环境

硬件环境:CPU:SAMSUNG S3C2440AL;SDRAM内存:64MB SDRAM HY57V561620,地址范围:0x30000000-0x34000000;FLASH存储器:1MB NOR FLASH 芯片AM29LV800;64MB NAND FLASH 芯片K9S1208。软件环境:RedHat:8.0;U-Boot-1.1.6;交叉编译工具:arm-linux-gcc-3.4.5。

本文采用的是北京扬创科技utu2440-F-V4.5 2440开发板。

4.2 移植步骤

1)在board目录下将smdk2410复制为dongzi2440目录,并将board/ dongzi2440/smdk2410.c改名为dongzi2440.c;

2)在include/configs目录下建立一个配置文件dongzi2440.h;

3)修改顶层的Makefile文件,找到SMDK2410_config:unconfig@$(MKCONFIG)$(@:_config=)arm arm920t s3c2410 NULL s3c24x0在其下加上如下代码dongzi2440_config:unconfig@ $(MKCONFIG)$(@:_config=)arm arm920t dongzi2440 NULL s3c24x0;

4)在board/dongzi2440/Makefile中将COBJS:=smdk2410.o flash.o改为:COBJS:=dongzi2440.o flash.o;

5)修改cpu/arm920t中的start.s文件。修改中断禁止部分,加入s3c2440的终端设置:ldr r1,=0x7fff;ldr r0,=INTSUBMSK;str r1,[r0];mrc p15,0,r1,c1,c0,0;orr r1,r1,#0xc0000000;mcr p15,0,r1,c1,c0,0;

6)支持NAND Flash。在配置文件include/configs/100ask24x0.h的宏CONFIG_COMMANDS中增加CFG_CMD_NAND,另外添加如下三个宏:#define CFG_NAND_BASE、#define CFG MAX_NAND_DEVICE、#define NAND_MAX_ DEVICE ;board_nand_init函数是在cpu/arm920t/s3c24x0目录下nand_flash.c文件中实现的;在cpu/arm920t/s3c24x0目录中添加nand_flash.c文件;最后修改cpu/arm920t/s3c24x0/Makefile文件,COBJS =i2c.0 interrrupts.o serial.o speed.o\usb_ohci.o修改为:COBJS =i2c.0 interrrupts.o serial.o speed.o\usb_ohci.o nand_flash.o;

7)修改cpu/speed.c文件。S3C2410和S3C2440的MPLL、UPLL计算公式不一样,所以get_PLLCLK函数需要修改,加入如下代码: If(gd->bd->bi_arch_number=MACH_TYPE_dongzi2440) return((CONFIG_SYS_CLK_FREQ*m*2)/(p

5 编译结果

执行“make dongzi2440_config”和“make all”命令,生成Sestem.map、u-boot.bin、u-boot和u-boot.srec 4个文件。将u-boot.bin文件通过并口-JTAG下载到开发板即可。实验证明,u-boot从Nand Flash 中启动可行,运行稳定。

6 结论

本文研究了u-boot在s3c2440的移植方法。深刻理解u-boot启动流程和硬件设备的配置,是顺利进行的前提。一个高效的bootloader会为后续的linux内核和文件系统的加载奠定基础。

参考文献

[1]孙天泽,袁文菊,等.嵌入式设计及Linux驱动开发指南一基于ARM9处理器[M].北京:电子工业出版社,2005.

[2]孙纪坤,张小全.嵌入式Linux系统开发技术详解―基于ARM[M].北京:人民邮电出版社,2006.

[3]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.

上一篇:一个Java Web项目的逆向工程应用案例 下一篇:POOL技术在移动通信网络话务潮汐问题上的应用...