分类: LINUX
2012-05-05 14:54:20
很多嵌入式系统开发的初学者都有过这样的经历,买了ARM开发板,了解了基础的Bootloader相关知识,也知道U-Boot在这方面的应用相当广泛,希望自己也能移植成功。接下来就是下载源码,照着网上教程做,结果大部分都失败了,但又不甘心,于是再找教程,东拼西凑还是不行,试了几次就失去信心,做不下去了;即使做成功了,但也不知道别人怎么知道要改哪个文件、哪个数据,这么多文件人家是怎么找出来的,下次自己遇到款新的芯片能不能也移植成功。
根据教程移植失败,原因是多方面的:教程里的开发板、U-Boot版本与自身的不一致,细微的差别(比如LED、串口的引脚分配等)都有可能导致失败,即使全都一样的情况下,大家的知识水平也不一样,有些Makefile的更改等,作者未加以说明导致编译出错。还有U-Boot还和编译环境和交叉编译工具也有一定的关系,就算别人的板子和你的一模一样,你按照别人的教程一步不漏的照做,编译出来照样也运行不了,更有就是你拿他已经移植好了的,而且在他那里可以正常运行,你拿来重新编译,再下到你板子,就是运行不了,这时你情绪肯定会很低落……所以自己能够做相关移植和分析问题也是很有必要的。下面根据我的经历写一下移植过程,根据 本文不能保证你一定能移植成功,本文重点讲解的是移植过程中的思路、方法。
下面简单的说一下,在U-BOOT移植之前需要掌握哪些基本的知识:
1、掌握开发板各个模块的基本工作原理。
2、能够自己编写对应的裸机驱动程序,其中包括以下模块:
A、GPIO
B、CLOCK
C、SDRAM
D、串口
E、中断
F、RTC
G、I2C
H、NAND FLASH
I、NOR FLASH
下面简单的介绍一下U-BOOT:
(1)引导加载程序:其中包括内部ROM 中的固化启动代码和Boot Loader 两部分。
而这个内部固化ROM 是厂家在芯片生产时候固化的,作用基本上是引导Boot Loader。有的芯片比较复
杂,比如Omap3,他在flash 中没有代码的时候有许多启动方式:USB、UART 或以太网等等。而S3C24x0 则很
简单,只有Norboot 和Nandboot。
(2)Linux kernel 和drivers。
(3)文件系统。包括根文件系统和建立于Flash 内存设备之上的文件系统(EXT4、UBI、CRAMFS 等等)。
它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境的载体。
此次的u-boot-2009.11_xiaomin所实现的功,特性归纳如下:
1、同时支持S3C2410和S3C2440 (2410没板测试) 2、自动识别S3C2440的启动方式,并能够将环境变量的保存到对应的位置 3、支持网卡芯片DM9000 4、支持不同NAND Flash的读写,并自动识别所使用的nand flash是512B/page还是2KB/page,实现在64MB\128MB\256MB\1GB NAND flash的启动。 5、支持IIC接口EEPROM的操作,并可保存ENV(参考hiboy的) 6、自动识别S3C2440的启动方式是Nor boot还是Nand boot,调用不同的自拷贝程序,实现不论是Nor boot还是Nand boot,都可以烧写同一个bin文件。(nor flash为SST39VF1601) 7、支持烧写yaffs文件系统映象 8、添加支持读取SD卡中的FAT32文件系统,现在U-boot已经支持从U盘或SD卡上启动Linux 内核。 9、添加支持OpenOCD导入内存启动,其实就是在一切flash识别之前,检测自己是否在内存,如果已在内存就跳过自拷贝程序。 10、支持USB命令和USB下载功能 |
对MINI2440编译好的bin文件,可在MINI2440上直接使用:
u-boot-2009.11_xiaomin.bin.zip
已经移植好的U-BOOT源代码补丁: