第4章嵌入式Linux的构建2主要内容4.1嵌入式Bootloader技术4.2嵌入式根文件系统构建4.3Linux内核及启动流程4.4基于ARM目标板的Linux系统及应用程序烧定建立交叉编译环境启动代码Bootloader的实现/移植kernel的配置/移植/编译根文件系统Cramfs的实现嵌入式开发流程44.1嵌入式BootLoader技术Bootloader的概念Bootloader引导程序Vivi简介Vivi代码分析5Bootloader的概念BootLoader称为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。也就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。引导加载程序可以初始化硬件设备、建立内存空间的映射图6嵌入式系统离不开Bootloader每种CPU体系结构都有不同的BootLoader。有些BootLoader也支持多种体系结构的CPU,比如U-Boot就同时支持ARM体系结构和MIPS体系结构。除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,通常也都需要修改BootLoader的源程序。7BootLoader的安装媒介系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。比如,基于ARM7TDMIcore的CPU在复位时通常都从地址0x00000000取它的第一条指令。基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被映射到这个预先安排的地址上。因此在系统加电后,CPU将首先执行BootLoader程序。8典型存储空间分配结构bootloader启动参数内核根文件系统9Bootloader空间结构划分10控制BootLoader的设备或机制主机和目标机之间一般通过串口建立连接,BootLoader软件在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。11BootLoader的操作模式大多数BootLoader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。最终用户的...