待解决问题?
1,Linux內(nèi)核在啟動(dòng)過(guò)程中會(huì)尋找并加載根文件系統(tǒng),加載成功則進(jìn)入Linux Shell,運(yùn)行用戶程序。如果找不到合適的根文件系統(tǒng),則會(huì)出現(xiàn)Kernel Panic錯(cuò)誤并停止。
那么問(wèn)題來(lái)了,如何尋找和加載根文件系統(tǒng)?
2,嵌入式Linux Bootloader的基本功能是:根據(jù)設(shè)定的參數(shù)直接引導(dǎo)操作系統(tǒng)啟動(dòng)和下載程序。在程序下載模式下,Bootloader能夠完成內(nèi)核、根文件系統(tǒng)的固化和更新,甚至實(shí)現(xiàn)Bootloader的自我更新。
那么問(wèn)題來(lái)了?我們可以通過(guò)哪些方式來(lái)完成文件的下載和固化?串口?以太網(wǎng)?USB接口?SD接口?
3,在產(chǎn)品開(kāi)發(fā)過(guò)程中,Bootloader的擴(kuò)展功能,如硬件檢測(cè)、文件系統(tǒng)支持和文件瀏覽等,對(duì)于硬件的調(diào)試是非常便利的。
那么問(wèn)題來(lái)了,該怎么開(kāi)發(fā)一個(gè)完整易用的Bootloader?
4,Booloader的特性和功能有哪些?
(1)可靠性和穩(wěn)定性都較好
(2)支持命令行,都自己的Shell
(3)支持外設(shè)豐富,如:串口、以太網(wǎng)、SDRAM、FALSH、LCD、NVRAM、EEPROM、RTC、鍵盤等
(4)有自己的文檔
(5)網(wǎng)絡(luò)技術(shù)支持方便
(6)系統(tǒng)引導(dǎo)
(7)支持NFS掛載、RAMDISK(壓縮或非壓縮)形式的根文件系統(tǒng)
(8)支持NFS掛載、從FLASH中引導(dǎo)壓縮或非壓縮系統(tǒng)內(nèi)核
(9)CRC校驗(yàn),可校驗(yàn)FLASH中內(nèi)核、RAMDISK鏡像文件是否完好
(10)提供各種外設(shè)的驅(qū)動(dòng),如串口、FLASH、以太網(wǎng)、LCD、EEPROM、鍵盤、USB、PCMCIA、RTC等
(11)上電自檢能:可自動(dòng)檢測(cè)SDRAM、FLASH大小,也能檢測(cè)外設(shè)故障
(12)支持XIP內(nèi)核引導(dǎo)
(13)操作系統(tǒng)接口功能強(qiáng)大:可靈活誰(shuí)設(shè)置、傳遞多個(gè)關(guān)鍵參數(shù)給操作系統(tǒng),適合系統(tǒng)在不同開(kāi)發(fā)階段的調(diào)試要求與產(chǎn)品發(fā)布
5,Linux產(chǎn)品:
(1)參考評(píng)估板,需要考慮:功能軟件、引腳復(fù)用、完善評(píng)估板的驅(qū)動(dòng)和修復(fù)BUG。
(2)Bootloader、內(nèi)核、文件系統(tǒng)要貼合、匹配硬件。
(3)NAND直接啟動(dòng):有位反轉(zhuǎn)問(wèn)題。當(dāng)我們對(duì)NAND進(jìn)行分區(qū)域保護(hù)時(shí),會(huì)對(duì)Bootloader、內(nèi)核、文件系統(tǒng)等進(jìn)行分,并對(duì)各不同分區(qū)設(shè)置不同的mask_flag,從而實(shí)現(xiàn)對(duì)該MTD分區(qū)的屬性設(shè)置,如只讀等,防止誤操作破壞分區(qū)。采用雙備份方式。
6,操作系統(tǒng),一定要bootloader嗎?
不一定。如果系統(tǒng)支持內(nèi)核XIP,就可以不需要bootloader。
7,快速啟動(dòng)
(1)精簡(jiǎn)Bootloader。開(kāi)發(fā)時(shí)用一個(gè)完整的bootloader,發(fā)布產(chǎn)品時(shí)用一個(gè)精簡(jiǎn)bootloader。
開(kāi)發(fā)用bootloader:包含很多的功能和命令,例如以太網(wǎng)、USB、SD卡等自檢功能。設(shè)置uboot等待時(shí)間如3秒。
發(fā)布用bootloader:刪除自檢用功能和命令。關(guān)于等待時(shí)間,可將等待時(shí)間單位設(shè)置為“百毫秒”或“十毫米”。(<common/main.c>的abortboot(int bootdelay)函數(shù))。重新上電后,提前按著鍵盤按鍵不松開(kāi),直到進(jìn)入命令行。
(2)精簡(jiǎn)內(nèi)核:要注意Bootloader搬運(yùn)內(nèi)核的時(shí)間,內(nèi)核自解壓后以及運(yùn)行的時(shí)間。裁剪冗余的驅(qū)動(dòng)和協(xié)議功能模塊,去掉驅(qū)動(dòng)模塊的調(diào)試支持功能,在Kernel Hacking(Show timing information on prinkd)中關(guān)閉各種系統(tǒng)調(diào)試功能,將內(nèi)核必備功能,如串口、NAND驅(qū)動(dòng)、系統(tǒng)RTC等靜態(tài)編譯在內(nèi)核中,對(duì)其他模塊編譯為內(nèi)核模塊,在進(jìn)入系統(tǒng)后再加載。
(3)精簡(jiǎn)根文件系統(tǒng):要注意根文件系統(tǒng)鏡像的格式,根文件系統(tǒng)本身體積的大小,init程序以及根文件系統(tǒng)所啟動(dòng)的服務(wù)和程序的多少。
轉(zhuǎn)載于:https://www.cnblogs.com/stephen-mcu-tech/p/10205360.html
總結(jié)
- 上一篇: 标准差、方差、协方差的区别
- 下一篇: 池技术