基于S3C2410嵌入式设备的U-Boo移植及自启动的实现
扫描二维码
随时随地手机看文章
S3C2410是三星公司针对嵌入式系统推出的高性价比微处理器,它是基于ARM9TDMI内核的16/32位RISC处理器,工作主频为200MHz。由于现有的Linux系统引入了设备文件的概念,读写串口可以像读写普通文件一样进行操作,非常方便。
一、Linux系统的安装
安装过程首先出现欢迎对话框,如上图所示。Red Hat先后会询问用户使用何种语言、用户使用的键盘类型(默认选项为美式键盘)以及安装软件的位置(选择本地CD -ROM)等许多需用户选择的问题。
使用Disk Druid建立Linux文件系统然后通过PC机对开发板进行设置,并执行以下命令,从而对开发板进行内核及文件系统的烧写工作:
此时,关闭开发板电源,接上LCD。重新启动开发板,LCD上将出现QT的定标程序,定标后就进入QT的接口。
二、U-Boot启动程序及流程
U-Boot是在PC- Boot的基础上进化而来的一个开源的嵌i入式Boot Loader。它主要完成了系统环境的初始化,将后期执行j代码复制到SDRAM空间,为Linux内核的运行提供条件。根据{其功能实现方式的不同可以分为两个阶段。可以通过修改配置应用到其他的开发板上。所以,选择U-Boot不仅能应用于S3C2410,而且能为以后在其他开发板上的研究提供基础。
本文选择最常见的版本U-Boot -1.1.6为例介绍U- Boot的启动和相关移植程序。
1.U-Boot运行前期阶段 ARM系列处理器在上电或复位时从物理地址Ox00000000处开始执行,此处也是第一片Flash所使用的存储空间的起始位置,而U-Boot就存放在Flash的最前端。U - Boot第一阶段由汇编语言实现,以达到短小精悍的目的,主要完成系统硬件环境的初始化,其工作流程如下图所示。
U - Boot在这一步的启动过程中,需要初始化启动环境,然后完成对后续工作的准备,诸如串口、网口、Flash等硬件设备的初始化工作,将kernel映像和根文件系统映像从Flash上读到RAM空间中,同时调用已经下载好的内核。
2.U-Boot运行后期阶段在完成了启动环境初始化时,进入到后期启动阶段。此部分的代码用C语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。函数_start_armboot0是执行映像的入口点。
(1 )U-Boot必要的初始化工作:系统初始化至少一个串口,以便和终端用户进行I/O输出信息,包括系统信息和操作菜单等;初始化计时器,方便读秒计时;初始化Flash,注册Flash操作函数,为实现Flash读写做准备。在加载程序U- Boot中可以通过kermit协议从宿主机接收可烧写的二进制文件,将该文件先放置于SDRAM中,然后通过NORFlash操作程序来完成对NORFlash AM29LV160DB的擦除,并将文件烧写到NORFlash中。后期的工作流程如图所示。
(2)使用TFTP网络协议下载Linux操作系统:在加载程序U-Boot中包含TFTP网络下载文件方式,其下载速度比Kermit协议方式速度快几十倍,可大大节省文件下载时间,极大的简便了嵌入式程序的调试方法。
因为TFTP使用UDP,而UDP使用lP,lP还可以使用其它本地通信方法。因此一个TFTP包中会有以下几段:本地媒介头,lP头,数据报头,TFTP头,剩下的就是TFTP数据了。TFTP在lP头中不指定任何数据,但是它使用UDP中的源和目标端口以及包长度域。由TFTP使用的包标记(TID)在这里被用做端口,因此TID必须介于0—65,535之间。TFTP头中包括两上字节的操作码,这个码指出了包的类型,可以根据TFTP包格式进行必要的移植工作。
三、U-Boot的移植流程
不同的板极硬件配置要求进行U-Boot的移植工作,移植U-Boot的工作包括添加开发板硬件相关的文件、配置U- Boot,然后编译。U-Boot -1.1.4版本支持SMDK2410开发板,并且SMDK2410同样采用S3C2410芯片,因此选取SMDK2410作为移植参考,定义目标板需要添加的U-Boot:
1.在boarcl/目录下建立目标板目录 由于U- Boot中本身支持很多开发板和处理器,所以可以找到和处理器型号相同或相近的开发板,在此基础之上再进行相应的修改。此处选择smdk2410作为模板。
2.创建S3C2410目录及文件,要对Makefile进行修改Mkdir board/S3C2410
3.通过修改文件smdk2410.h来修改U-Boot软硬件配置增加PING命令功能
4.修改2M的Flash通过查询相关数据手册中有关Flash的地址,并在对应的S3C2410.h文件中找到有关信息。在此要用到一些硬件的知识,最关键的是扇区的计算,由于在ARM中Flash是按扇区划分的,每个扇区的大小是64K,所以2M就需要32个扇区,但是由数据手册可知S0,S1,S2,S3扇区的大小分别为:16K,8K,8K,32K,所以要加上3个扇区才能得到正确的结果。
四、结论
通过对U-Boot的启动流程的详细分析和制作,不仅对其有一个整体的了解,而且也可以依据本文进行制作。通过对U-Boot的重要参数的设置也使得其功能进一步增强。读者也可以仿效文中的步骤对其他型号的开发板进行制作,为以后的开发带来了方便。在制作过程中要注意的是接口参数的设置问题和越界问题。