亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? arm 嵌入式linux啟動過程(1).txt

?? arm 嵌入式LINUX啟動過程,詳細介紹了啟動過程
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
一位大師級的人物寫的,不看要后悔的喲!!
                             LINUX啟動過程



首先,porting linux的時候要規劃內存影像,如小弟的系統有64m SDRAM, 
地址從0x 0800 0000 -0x0bff ffff,32m flash,地址從0x0c00 0000-0x0dff ffff. 
規劃如下: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, 
再從0x 0800 0000 運行bootloader,我們叫這段小程序為flashloader, 
flashloader必須要首先初始化SDRAM,不然往那放那些東東: 





.equ SOURCE, 0x0C000100 bootloader的存放地址 
.equ TARGET, 0x0AFE0100 目標地址 
.equ SDCTL0, 0x221000 SDRAM控制器寄存器 
// size is stored in location 0x0C0000FC 


.global _start 
_start: //入口點 


//;*************************************** 
//;* Init SDRAM 
//;*************************************** 



// *************** 
// * SDRAM 
// *************** 


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] 


//  Set Normal Mode 
LDR r3, =0x82124200 
STR r3, [r1] 


//;*************************************** 
//;* End of SDRAM and SyncFlash Init * 
//;*************************************** 



// copy code from FLASH to SRAM 


_CopyCodes: 
ldr r0,=SOURCE 
ldr r1,=TARGET 
sub r3,r0,#4 
ldr r2,[r3] 


_CopyLoop: 
ldr r3,[r0] 
str r3,[r1] 
add r0,r0,#4 
add r1,r1,#4 
sub r2,r2,#4 
teq r2,#0 
beq _EndCopy 
b _CopyLoop 


_EndCopy: 
ldr r0,=TARGET 
mov pc,r0 



上回書說到flashloader把bootloader load到0x0AFE0100, 然回跳了過去, 
其實0x0AFE0100 就是燒在flash 0x0C000100中的真正的bootloader: 


bootloader 有幾個文件組成,先是START.s,也是唯一的一個匯編程序,其余的都是C寫成的,START.s主要初始化堆棧: 


_start: 
ldr r1,=StackInit 
ldr sp,[r1] 
b main 
//此處我們跳到了C代碼的main函數,當C代碼執行完后,還要調用 
//下面的JumpToKernel0x跳到LINXU kernel運行 



.equ StackInitvalue, __end_data+0x1000 // 4K __end_data在連結腳本中指定 


StackInit: 
.long StackInitvalue 


.global JumpToKernel 


JumpToKernel: 
// jump to the copy code (get the arguments right) 
mov pc, r0 


.global JumpToKernel0x 
// r0 = jump address 
// r1-r4 = arguments to use (these get shifted) 
JumpToKernel0x: 
// jump to the copy code (get the arguments right) 
mov r8, r0 
mov r0, r1 
mov r1, r2 
mov r2, r3 
mov r3, r4 
mov pc, r8 
.section ".data.boot" 
.section ".bss.boot" 


下面讓我們看看bootloader的c代碼干了些什么。main函數比較長,讓我們分段慢慢看。 


int main() 
{ 
U32 *pSource, *pDestin, count; 
U8 countDown, bootOption; 
U32 delayCount; 
U32 fileSize, i; 
char c; 
char *pCmdLine; 
char *pMem; 


init(); //初始化FLASH控制器和CPU時鐘 


EUARTinit(); //串口初始化 
EUARTputString("\n\nDBMX1 Linux Bootloader ver 0.2.0\n"); 
EUARTputString("Copyright (C) 2002 Motorola Ltd.\n\n"); 
EUARTputString((U8 *)cmdLine); 
EUARTputString("\n\n"); 


EUARTputString("Press any key for alternate boot-up options ... "); 





小弟的bootloader主要干這么幾件事:init(); 初始化硬件,打印一些信息和提供一些操作選項: 
0. Program bootloader image 
1. Program kernel image 
2. Program root-disk image 
3. Download kernel and boot from RAM 
4. Download kernel and boot with ver 0.1.x bootloader format 
5. Boot a ver0.1.x kernel 
6. Boot with a different command line 


也就是說,可以在bootloader里選擇重新下載kernel,rootdisk并寫入flash, 
下載的方法是用usb連接,10m的rootdisk也就刷的一下。關于usb下載的討論請參看先前的貼子“為arm開發平臺增加usb下載接口“。 
如果不選,直接回車,就開始把整個linux的內核拷貝到SDRAM中運行。 


列位看官,可能有人要問,在flashloader中不是已經初始化過sdram控制器了嗎?怎么init(); 中還要初始化呢,各位有所不知,小弟用的是syncflash, 
可以直接使用sdram控制器的接口,切記:在flash中運行的代碼是不能初始化連接flash的sdram控制器的,不然絕對死掉了。所以,當程序在flash中運行的時候,去初始化sdram,而現在在sdram中運行,可放心大膽地初始化flash了,主要是設定字寬,行列延時,因為缺省都是最大的。 


另外,如果列位看官的cpu有足夠的片內ram,完全可以先把bootloader放在片內ram,干完一切后再跳到LINUX,小弟著也是不得已而為之啊。 



如果直接輸入回車,進入kernel拷貝工作: 



EUARTputString("Copying kernel from Flash to RAM ...\n"); 
count = 0x200000; // 2 Mbytes 
pSource = (U32 *)0x0C100000; 
pDestin = (U32 *)0x08008000; 
do 
{ 
*(pDestin++) = *(pSource++); 
count -= 4; 
} while (count > 0); 
} 


EUARTputString("Booting kernel ...\n\n"); 


這一段沒有什么可說的,運行完后kernel就在0x08008000了,至于為什么要 
空出0x8000的一段,主要是放kelnel的一些全局數據結構,如內核頁表,arm的頁目錄要有16k大。 


我們知道,linux內核啟動的時候可以傳入參數,如在PC上,如果使用LILO, 
當出現LILO:,我們可以輸入root=/dev/hda1.或mem=128M等指定文件系統的設備或內存大小,在嵌入式系統上,參數的傳入是要靠bootloader完成的, 


pMem = (char *)0x083FF000; //參數字符串的目標存放地址 
pCmdLine = (char *)&cmdLine; //定義的靜態字符串 
while ((*(pMem++)=*(pCmdLine++)) != 0);//拷貝 


JumpToKernel((void *)0x8008000, 0x083FF000) //跳轉到內核 


return (0); 
JumpToKernel在前文中的start.S定義過: 


JumpToKernel: 
// jump to the copy code (get the arguments right) 
mov pc, r0 


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久国产精品人| 亚洲成在人线在线播放| 久久精品综合网| 亚洲美女视频一区| 青青草原综合久久大伊人精品优势| 老司机免费视频一区二区三区| 成人免费视频免费观看| 69堂精品视频| 亚洲欧洲99久久| 久草在线在线精品观看| 在线免费精品视频| 91精品国产91综合久久蜜臀| 亚洲国产精品成人综合 | 精品99一区二区| 亚洲欧美视频在线观看视频| 欧美午夜电影网| 一区二区三区在线视频观看| 韩国视频一区二区| 7777精品久久久大香线蕉| 精品一区二区三区在线播放| 国产精品国模大尺度视频| 国产成人免费在线| 亚洲精品一区二区三区蜜桃下载| 国产91精品露脸国语对白| 久久久不卡网国产精品一区| k8久久久一区二区三区| 精品免费视频.| 日本在线不卡视频一二三区| 在线免费观看日韩欧美| 久久不见久久见中文字幕免费| 中文字幕一区二区三区不卡| 91麻豆精品国产自产在线| 国产91对白在线观看九色| 午夜一区二区三区在线观看| av一二三不卡影片| 日本一区中文字幕| 中文字幕在线不卡国产视频| 日韩欧美视频在线| 精品系列免费在线观看| 亚洲免费观看高清完整| wwwwxxxxx欧美| 亚洲精品午夜久久久| 日韩在线观看一区二区| 国产精品网曝门| 久久激五月天综合精品| 亚洲欧美激情视频在线观看一区二区三区 | 国产尤物一区二区| 欧美mv日韩mv亚洲| 在线亚洲免费视频| 福利一区福利二区| 麻豆国产欧美日韩综合精品二区 | 日韩欧美色综合| 欧美综合天天夜夜久久| 精品亚洲国产成人av制服丝袜| 怡红院av一区二区三区| 国产精品大尺度| 亚洲国产精品ⅴa在线观看| 日韩精品一区二区三区视频播放| 在线观看日韩一区| 99视频一区二区| 国产福利一区二区三区| 激情综合网激情| 欧美亚洲一区二区在线| 91免费版在线看| 日韩欧美高清dvd碟片| 91激情五月电影| 亚洲一区二区三区四区在线| 欧美日韩成人在线| 久久精品久久99精品久久| 亚洲成av人片一区二区| 亚洲精品高清在线| 亚洲视频一二区| 91精品国产免费久久综合| 色综合久久中文综合久久97| 亚洲不卡在线观看| 亚洲最色的网站| 性感美女久久精品| 午夜日韩在线观看| 日本aⅴ免费视频一区二区三区| 日韩av电影天堂| 蜜臀av性久久久久av蜜臀妖精| 石原莉奈在线亚洲二区| 麻豆精品视频在线| 国产精品影视天天线| 亚洲超碰精品一区二区| 日韩精品一级二级 | 成人欧美一区二区三区视频网页 | 欧美色视频在线观看| 蜜桃久久av一区| 麻豆91在线看| 国产99久久久精品| 色综合中文字幕国产| 日韩高清欧美激情| 久久精品国内一区二区三区| 国产福利一区二区三区视频在线| 成a人片国产精品| 激情综合色播五月| 国产91高潮流白浆在线麻豆| 91丨porny丨户外露出| 欧美在线综合视频| 日韩欧美国产系列| 日本一区二区视频在线观看| 欧美一区二区三区免费大片| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 麻豆一区二区在线| 不卡一区二区三区四区| 日韩av不卡一区二区| 激情丁香综合五月| 成人免费看视频| 欧美日韩亚洲综合| 久久久不卡网国产精品一区| 一区二区三区四区在线播放| 日韩高清在线不卡| 不卡的av网站| 欧美刺激午夜性久久久久久久| 日本一区二区免费在线| 亚洲国产sm捆绑调教视频 | 亚洲美女区一区| 青青草视频一区| av不卡在线播放| 日韩欧美中文字幕制服| 欧美日本一区二区三区四区| 精品88久久久久88久久久| 亚洲三级在线看| 老鸭窝一区二区久久精品| 色欧美88888久久久久久影院| 欧美成人精品福利| 亚洲精品免费在线| 国产在线播精品第三| 精品视频在线看| 中文字幕亚洲欧美在线不卡| 久久成人综合网| 在线不卡的av| 欧美成人三级电影在线| 一区二区三区四区不卡在线| 国产又粗又猛又爽又黄91精品| 欧美日韩欧美一区二区| 亚洲人成网站精品片在线观看 | 五月天视频一区| 91丨九色丨尤物| 久久精品一区二区三区av | 久久成人羞羞网站| 欧美日韩色一区| 亚洲欧美一区二区三区国产精品| 国内一区二区视频| 欧美一级免费大片| 一区二区三区中文在线| 99久久国产综合精品女不卡| 欧美日韩精品免费观看视频| 日韩一区在线看| www.欧美亚洲| 亚洲欧洲国产日韩| 成人一道本在线| 久久久亚洲精品石原莉奈| 久久电影网站中文字幕| 日韩一区二区电影在线| 日韩激情一二三区| 制服视频三区第一页精品| 亚洲高清不卡在线观看| 欧美在线色视频| 亚洲一二三四在线观看| 欧美在线不卡视频| 亚洲免费在线看| 在线观看精品一区| 亚洲一区二区av在线| 欧美日韩三级在线| 视频一区视频二区在线观看| 欧美久久久久久蜜桃| 日韩电影在线看| 精品国产伦一区二区三区免费| 人人爽香蕉精品| 精品国产乱码久久久久久老虎 | 欧美一个色资源| 麻豆精品视频在线观看视频| 欧美成人官网二区| 国产一区二区福利| 国产精品理论片在线观看| av福利精品导航| 亚洲一二三四区不卡| 91精品国产麻豆国产自产在线| 九色porny丨国产精品| 国产亚洲一区二区在线观看| 日本视频中文字幕一区二区三区| 午夜精品久久久久久久99水蜜桃| 亚洲一区在线免费观看| 国内精品久久久久影院薰衣草| 一本色道久久综合狠狠躁的推荐 | 在线不卡欧美精品一区二区三区| 日本最新不卡在线| 久久久青草青青国产亚洲免观| 国产91富婆露脸刺激对白| 亚洲色图另类专区| 555www色欧美视频| 国产成+人+日韩+欧美+亚洲| 综合网在线视频| 91精品福利在线一区二区三区| 韩国精品一区二区| 亚洲精品高清在线| 精品福利一区二区三区免费视频| 成人性生交大片免费看中文|