微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM9上linux系统的bootloader设计

基于ARM9上linux系统的bootloader设计

时间:04-11 来源:互联网 点击:

U,从而使用内存空间的 Dcache,提高bootloader的运行速度。

如图1所示:


图1虚拟地址到物理地址映射

映射关系代码如下:
void mem_mapping_linear(void)
{ unsigned long descriptor_index, section_base, sdram_base, sdram_size;
sdram_base=0x30000000;
sdram_size=0x 4000000;
for(section_base=sdram_base,descriptor_index=section_base>>
20;Ssection_basesdram_base+sdram_size; rdescriptor_index+=1;section_base +=0x100000)
{*(mmu_tlb_base+(descriptor_index))=(section_base>>20)| MMU_OTHER_SECDESC;}
}

4.3.装载内核映像和根文件系统映像

像ARM这样的嵌入式CPU通常都是在统一的内存地址空间中寻址 Flash 等固态存储设备的,因此从Flash上读取数据与从 RAM单元中读取数据用一个简单的循环就可以完成从Flash 设备上拷贝映像的工作:

其中count为根文件系统映像的大小或内核映像的大小。
While(count){
*dest++=*src++;//src为fash中的地址,dest为RAM中的地址
count-=4;}

4.4.置内核的启动参数

内核启动可以从Nand Flash或Nor Flash中启动运行linux,需要修改启动命令如下:
#ifdef CONFIG_S3C2410_NAND_BOOT
Char Linux_cmd[]=“noinit root=/dev/bon/2 init =/Linuxrc console=tty0 console=ttys0”;
#else
CharLinux_cmd[]=“CharLinux_cmd[]=”noinit root=/dev/bon/3 init =/Linuxrc console=tty0 console=ttys0”;

其中noinitrd不使用ramdisk。
root根文件系统所在MTD分区。
Init内核运行入口命令文件。
console 内核信息控制台,ttyS0表示串行口0。
ttys0表示虚拟终端LCD启动参数一般都包括root、init和console。

5.结论

设计bootloader是一项很复杂的工作,需要对硬件资源和所用的操作系统有很深的理解,在实际开发中可以根据需要简化设计,去除不必要的系统功能,这样可以大大提高程序执行的效率和稳定性。

本文作者创新点:bootloader随硬件不同设计也尽相同,但本质的原理是一样的,本文给出了一种层次分明设计简练较之通用的设计方法,使嵌入式工作者可以快速的了解bootloader的实现从而写出符合需要的启动程序。

参考文献
[1] 万永波 张根宝 田泽 杨峰,基于ARM的嵌入式系统Bootloader启动流程分析, 微计算机信息, 2005年,第21卷11-2期,90页.
[2] 嵌入式linux设计与应用.邹思轶. 北京:清华大学出版社 2002.
[3] SUMSUANG ELECTRONICS. S3C2410X User’s Manual[Z].Republic of Korea: Sumsang,2003.
[4] 马学文, 朱明日, 程小辉.嵌入式系统中 Bootloader的设计与实现.计算机工程,2005年,第31卷7期,96页.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top