學習底層的東西,首要的就是去了解他的架構,整體的思路知道了,就會在出現問題的時候有很清晰的思路,知道**出的問題,以及程式是如何執行的,相信做到上面的,所遇到的問題,大都會迎刃而解了吧,高手是有很多的,所謂的高手,不過也就那樣吧,努力努力也是可以趕超的。
之前,介紹了u-boot的第一階段的啟動流程,那麼接下來就來說說第二階段的具體執行流程:
(1)初始化gloabl data和board data,這裡所謂的初始化就是給他們分配一塊記憶體空間。
(2)初始化序列(init_sequence)
在初始化的序列當中包括有:
設定系統時鐘操作函式 arch_cpu_init
設定開發板的機器碼 board_init
初始化定時器 timer_init
初始化環境變數 env_init
初始化波特率 init_boudrate
初始化串列埠 serial_init
控制台裝置一級初始化 console_init
列印u-boot的版本編譯時間 disoplay_banner
列印cpu型別和當前的執行頻率 print_cpuinfo
列印開發板的名稱 checkboard
配置可用的記憶體 dream_init
顯示當前的記憶體大小 display_dram_config
(3)nand flash 初始化 nand_init
(4)讀取nand flash 的環境變數,然後做crc校驗,如果錯誤,則使用預設的環境變數,如果正確則使用從nand flash中讀取的環境變數
(5)從環境變數中獲得板子的ip位址
(6)初始化輸入輸出裝置stdio_init
(7)初始化控制台,預設用串列埠作為控制台裝置
(8)使能irq異常,enable——interrupts()
( 9) 初始化網絡卡裝置,eth_initialize(gd->bd)
(10)進入main_loop()中開始判斷是否設定了環境變數bootdelay和bootcmd兩個引數,如果已經設定過了的話,
再判斷在bootdelay的時間內串列埠是否有輸入,如果沒有的話則執行bootcmd所設定的接下來的命令,如果
兩個引數沒有設定過,則迴圈讀取串列埠中所輸入的命令,然後去執行。
以上就是整個第二階段的內容了,接下來的幾天裡我會陸續的總結一下關於u-boot移植的具體操作,以及nand flash 的相關介紹,學習的過程總是需要把心放下來,然後專注的去體會你所認知的一些事物,每件事情都是這樣,只有我們認真的去對待,才會得到應有的回報。
u boot啟動流程詳細分析(1)
那麼在載入我們的os之前程式究竟做了哪些事情呢?接下來,就詳細的敘述一下,u boot第一階段的啟動過程 1 設定異常向量表 表中存放的是一些跳轉指令,可以跳轉到相關的異常處理函式。2 設定arm的核位svc 管理模式 禁止irq,fiq異常的產生。3 關閉cache mmu。關閉cache是因為此...
const詳細分析
最近在分析 linux 驅動的過程過程中遇到一些關於 const 的使用,現在在這裡詳細剖析一下 一,const int p 首先分析一下幾個概念 1 p 是乙個指標變數,因而它也是乙個變數,所謂變數就有變數的位址和變數的值,而這裡 p變數的值就是乙個位址,該位址下存放的是乙個整數,p的值等於這個整...
約數詳細分析
約數詳細分析 我們先來認識一下約數 約數分正約數和負約數兩種,我們一般只討論正約數。也就是說,接下來所提的約數,只考慮正約數。如果有乙個數k,滿足k n,那麼k就是n 的約數 因數 n是k的倍數。求乙個數的約數是資訊學競賽裡乙個基礎的不能再基礎的問題。如果只求乙個數,最容易想到的就是列舉。當然列舉也...