基于ARM9上linux系统的bootloader设计
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页.
bootloader 设计 系统 linux ARM9 基于 相关文章:
- WinCE系统下BootLoader的开发(04-10)
- 嵌入式linux启动信息完全注释(04-24)
- PIC18单片机的一种新颖的Bootloader设计(03-28)
- 基于WinCE的嵌入式图像采集系统设计(04-20)
- BLOB启动流程分析及引导程序可移植性研究(07-25)
- ARM处理器的位置无关程序设计(09-19)