LINUX启动过程 首先,porting linux的时候要规划内存影像,如小弟的系统有64m SDRAM, 地址从0x 0800 0000 -0x0bff ffff,32m flash,地址从0x0c00 0000-0x0dff ffff.提供各类ARM开发板/开发工具
http://edmarket.com.cn/plist-3-855.html 规划如下:bootloader, linux kernel, rootdisk放在flash里。 具体从 0x0c00 0000开始的第一个1M放bootloader, 0x0c10 0000开始的2m放linux kernel,从 0x0c30 0000开始都给rootdisk。 启动: 首先,启动后arm920T将地址0x0c00 0000映射到0(可通过跳线设置), 实际上从0x0c00 0000启动,进入我们的bootloader,但由于flash速度慢, 所以bootloader前面有一小段程序把bootloader拷贝到SDRAM 中的0x0AFE0100,提供各类ARM开发板/开发工具
http://edmarket.com.cn/plist-3-855.html 再从0x 0800 0000 运行bootloader,我们叫这段小程序为flashloader, flashloader必须要首先初始化SDRAM,不然往那放那些东东: .equ SOURCE, 0x0C000100 bootloader的存放地址 .equ TARGET, 0x0AFE0100 目标地址 .equ SDCTL0, 0x221000 SDRAM控制器寄存器 // size is stored in location 0x0C0000FC 提供各类ARM开发板/开发工具
http://edmarket.com.cn/plist-3-855.html .global _start _start: //入口点 //;*************************************** //;* Init SDRAM //;*************************************** // ;*************** // ;* SDRAM 提供各类ARM开发板/开发工具
http://edmarket.com.cn/plist-3-855.html // ;*************** LDR r1, =SDCTL0 // // ; Set Precharge Command LDR r3, =0x92120200 //ldr r3,=0x92120251 STR r3, [r1] // ; Issue Precharge All Commad LDR r3, =0x8200000 LDR r2, [r3] // ; Set AutoRefresh Command LDR r3, =0xA2120200 STR r3, [r1] // ; Issue AutoRefresh Command LDR r3, =0x8000000 LDR r2, [r3] LDR r2, [r3] LDR r2, [r3] LDR r2, [r3] LDR r2, [r3] LDR r2, [r3] LDR r2, [r3] LDR r2, [r3] // ; Set Mode Register LDR r3, =0xB2120200 STR r3, [r1] // ; Issue Mode Register Command LDR r3, =0x08111800 //; Mode Register value LDR r2, [r3] 提供各类ARM开发板/开发工具
http://edmarket.com.cn/plist-3-855.html // ; Set Normal Mode LDR r3, =0x82124200 STR r3, [r1] //;*************************************** //;* End of SDRAM and SyncFlash Init * //;***************************************