boot loader
當cpu一上電,此時cpu必須從nor flash或者nand flash中取指令 , 直接從 nand flash取指令的ap為支援nand 啟動 。
nand boot ,其實原理就是ap 內部的rom裡有一小段**,包括nand flash驅動,它啟動從nand flash中讀取一段(比如4kb)到內部的sram中,
然後跳轉到sram起始位置,執行sram中的**。sram中的**中包括初始化sdram,nand flash driver等,它的第一件事情就是初始化sdram,
然後把nand flash中的更多的東西(整個boot loader)搬到sdram中,然後執行uboot
nor boot : **就在nor flash中,直接執行,初始化cpu ,sdram 等, 把整個uboot 搬到sdram中 ,然後執行uboot,在uboot中把kernel從
nand flash中讀出。
對於常用的cpu , u boot 都支援, 這塊不需要改什麼
對於u boot不支援的cpu , 需要寫彙編,初始化cpu ,sdram ,nand flash驅動,nor flash驅動 (setenv命令需要)等
在boot loader 中,還需要uart驅動,以支援列印資訊。
另外 要加上lcd 驅動 ,以支援splash ,否則在uboot階段,沒有任何顯示。
正常啟動 uboot,以引導linux 這些就夠了。
但是對於乙個產品:
它在研發階段,uboot 必須支援tftp , 需要網絡卡驅動 (在boot loader中)
同時對於生產ate,把它放在uboot階段對生產比較好,否則要等到整個系統起來,kernel+小測試檔案系統也要10多妙 。
這樣的話,在ate中需要加上 memory test ,lcd test, 音效卡測試,需要加上i2c驅動,key test,rtc test,。
kernel:
在kernel中 , 不需要對sdram初始化了。 但必須對記憶體進行分配,也就是物理起始位址是多少? 共有多少記憶體,
虛擬位址空間的分配, io 位址空間 ,平台初始化。。。。
linux 系統需要click , 需要用到ap的timer ,
對uart初始化,以列印資訊
對網絡卡初始化,以支援nfs除錯
必須要有nor ,nand驅動 ,以支援檔案系統
必須要有lcd 驅動 ,以支援顯示 , framebuffer
必須支援key ,以支援輸入
必須 支援 i2c ,spi 介面 ,以支援在上面的裝置 , i2c 時鐘, touchpad 這些裝置需要驅動 , mmc over spi
sd card
usb device , 需要裝置驅動 , 以支援u盤
usb host , 需要host 驅動
自帶wifi嗎? wifi驅動
alsa 驅動以支援 音效卡 (i2s)
gpio 本身的驅動
watchdog ?
有dsp嗎 ? dsp驅動
rtc 自帶的嗎? 不自帶的話,外接乙個rtc (是否加鈕扣電池還是用大電容來保持時間?)
power managerment
dma ? 這個主要在其他驅動中,啟動它來傳輸資料
移植檔案系統 yaffs ,以提高效能。
還有就是對核心配置,比如eabi ,效能方面,開機進度顯示psplash .
我們發現 對於成熟平台,很多驅動都有了,驅動人員只需要改改lcd,新增一些外設。
Linux 啟動過程分析
runlevel 命令 可以檢視當前的執行級別 linux 系統啟動過程如下 1 bios自檢 2 啟動grub lilo 3 執行linux 核心並檢測硬體 4 執行系統的第乙個程序init 5 init 讀取到系統引導配置檔案 etc inittab中的資訊進行初始化 6 etc rc.d rc...
Linux核心啟動過程分析
本文永久更新鏈結位址 日期 2014 10 14 字型 大中小 下面給出核心映像完整的啟動過程 注意kernel evecve呼叫的是與具體體系平台相關的實現,但它是乙個通用的系統呼叫,在linux syscalls.h中宣告,這個標頭檔案中宣告了與體系結構無關的所有系統呼叫介面。只不過kernel...
Linux啟動過程
1 開啟 pc電源 pc加電後,乙個特殊的硬體電路會觸發 cpu 的 reset 腳的邏輯值,然後一些 cpu 暫存器,如 cs eip 等被給定乙個值,接著 cpu 跳轉到乙個固定位址開始執行 bios 2 bios 自檢,按設定的裝置啟動 bios 對硬體進行一系列徹底的檢查,如 cpu 型別 ...