首页 理论教育 嵌入式Linux编程实例BootLoader分析移植

嵌入式Linux编程实例BootLoader分析移植

时间:2023-10-31 理论教育 版权反馈
【摘要】:嵌入式Linux系统同样离不开引导程序,这个引导程序称为BootLoader。BootLoader是在操作系统运行之前执行的一段小程序。BootLoader的实现依赖于具体的硬件。正因为如此,几乎不可能为所有的嵌入式系统建立一个通用的Boot Loader。在开发过程中,通常使用串口输入命令给BootLoader。BootLoader主要分为两种操作模式。这种模式是BootLoader的正常工作模式,因此在嵌入式产品发布时,BootLoader必须工作在这种模式下。此外,以后的系统更新也会使用Boot Loader的这种工作模式。

嵌入式Linux编程实例BootLoader分析移植

对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序,这个引导程序称为BootLoader。BootLoader是在操作系统运行之前执行的一段小程序。通过这段小程序可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做准备。BootLoader的实现依赖于具体的硬件。正因为如此,几乎不可能为所有的嵌入式系统建立一个通用的Boot Loader。

在开发过程中,通常使用串口输入命令给BootLoader。BootLoader主要分为两种操作模式。启动加载(BootLoading)模式:这种模式也称为自主模式,即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式,因此在嵌入式产品发布时,BootLoader必须工作在这种模式下。

下载(Downloading)模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的Flash存储设备中。BootLoader的这种模式通常在第一次安装内核与根文件系统时被使用。此外,以后的系统更新也会使用Boot Loader的这种工作模式。工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口

这里使用的是U-boot-1.1.6。首先查看一下U-boot的目录结构,主要分为4类。

●开发板或者平台相关:BOArd、CPU等。

●通用的函数:include、lib_generic、common。

●通用的设备驱动程序:disk、drivers、fs、net、rtc等。

●U-boot工具、示例程序、文档:doc、examples、tools。

本文主要参考了smdk2410的开发板进行修改。其主要工作就是添加和开发板硬件平台相关的文件以及配置选项,然后进行编译等。(www.xing528.com)

1)首先,在顶层Makefile中加入新的配置选项。

2)复制BOArd/smdk2410目录为QQ2440,修改BOArd/smdk2410/smdk2410.c为BOArd/QQ2440/QQ2440.c。

3)复制include/configs/smdk2410.h为include/configs/QQ2440.h。

4)修改BOArd/QQ2440/Makefile。

5)增加对S3C2440A的支持。其中主要是修改QQ2440.c的BOArd_init()函数,设置系统时钟和NANDFlash控制器等。

6)添加对CS8900网卡芯片的支持。U-boot中已经支持CS8900,只需要在控制界面中配置一下就可以使用了。主要是修改lowlevel_init.S设置时序参数以及在QQ2440.h中设定CS8900的基地址

7)最后修改对NANDFlash的支持,并且修改默认参数配置,添加启动参数。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈