UBoot讲解和实践-------------讲解(二)
UBoot ?ARM移植之階段二 ? 理論篇
?stage2:
? ? ? ? ? ?1.初始化本階段要使用的硬件設備:
? ? ? ? ? ? ?通常包括兩方面:
? ? ? ? ? ? ??1)初始化至少一個串口,以便和終端用戶進行I/O輸出信息。
? ? ? ? ? ? ? 2)初始化計時器等
? ? ? ? ??2.檢測系統的內存映射
? ? ? ? ? ? ?內存映射就是指在整個4GB物理地址空間中有哪些地址被分配用來尋址系統的RAM單元。必須知道CPU預留的全部RAM地址空間中的哪些被真正映射到RAM地址單元,哪些處于"unused狀態。
? ? ? ? ? ??使用數據結構體memory_area_struct來描述RAM地址空間中的一段連續的地址范圍
? ? ? ? ? ?處有一個可用來檢測整個RAM地址空間內存映射情況的簡單而有效的算法。(具體研究此算法需要另看別的書)
? ? ? ? ?3.加載內核映像和根文件系統映像
? ? ? ? ? ? ??有兩個工作要做:
? ? ? ? ? ? ? ?1)規劃內存占用的布局。包括兩個方面:內核映像所占用的內存范圍、根文件系統所占用的內存范圍。在規劃內存占用的布局時,主要考慮基地址和映像的大小兩個方面。
? ? ? ? ? ? ??2)從flash上復制。由于像ARM這樣的嵌入式CPU通常都在統一的內存空間地址中尋址flash等固態存儲設備的,因此從flash上讀取數據與從RAM單元中讀取數據并沒有什么不同。用一個簡單的循環就可以完成從flash設備上復制映像的工作
? ? ? ? ? ? ? ? ?while(count)
? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? *dest++=*src++;
? ? ? ? ? ? ? ? ? ? ? ? ?count -= 4;//arm 是4字節的,由總線決定的。
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ?4.設置內核的動參數
? ? ? ? ? ? ? ?即設置linux內核的啟動參數。
? ? ? ? ? ? ? ?數據結構tag和tag_header定義在linux內核源碼的include/asm/setup.h頭文件中。(這里面大有文章)
? ? ? ? ? ?5.調用內核
? ? ? ? ? ? ? ?Boot Loader調用Linux內核的方法是直接跳轉到內核的第一條指令處,跳轉需要滿足的條件:
? ? ? ? ? ? ???1)CPU寄存器的設置:R0=0;
? ? ? ? ? ? ? ?(具體參看內核代碼文件:linux/arch/arm/tools/mach --types)
? ? ? ? ? ? ? ?2)CPU模式:必須禁止中斷(IRQs和FIQs),同時必須應該是SVC模式(特權模式,可以訪問更多的硬件資源)。
? ? ? ? ? ? ? ?3)Cache和MMU的設置:MMU必須關閉;指令Cache可以打開也可以關閉;數據cache必須關閉。
? ? ? ? ? ? ? ??
? ? ? ? ? ? ?
The future's not set,there is no fate but what we make for ourselves.
總結
以上是生活随笔為你收集整理的UBoot讲解和实践-------------讲解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UBoot讲解和实践----------
- 下一篇: Uart接口的详细解释