嵌入式系統(tǒng) Boot Loader 技術(shù)內(nèi)幕(3)
在 boot loader 程序的設(shè)計(jì)與實(shí)現(xiàn)中,沒(méi)有什么能夠比從串口終端正確地收到打印信息能更令人激動(dòng)了。此外,向串口終端打印信息也是一個(gè)非常重要而又有效的調(diào)試手段。但是,我們經(jīng)常會(huì)碰到串口終端顯示亂碼或根本沒(méi)有顯示的問(wèn)題。造成這個(gè)問(wèn)題主要有兩種原因:(1) boot loader 對(duì)串口的初始化設(shè)置不正確。(2) 運(yùn)行在 host 端的終端仿真程序?qū)Υ诘脑O(shè)置不正確,這包括:波特率、奇偶校驗(yàn)、數(shù)據(jù)位和停止位等方面的設(shè)置。
本文引用地址:http://cafeforensic.com/article/257977.htm此外,有時(shí)也會(huì)碰到這樣的問(wèn)題,那就是:在 boot loader 的運(yùn)行過(guò)程中我們可以正確地向串口終端輸出信息,但當(dāng) boot loader 啟動(dòng)內(nèi)核后卻無(wú)法看到內(nèi)核的啟動(dòng)輸出信息。對(duì)這一問(wèn)題的原因可以從以下幾個(gè)方面來(lái)考慮:
(1) 首先請(qǐng)確認(rèn)你的內(nèi)核在編譯時(shí)配置了對(duì)串口終端的支持,并配置了正確的串口驅(qū)動(dòng)程序。
(2) 你的 boot loader 對(duì)串口的初始化設(shè)置可能會(huì)和內(nèi)核對(duì)串口的初始化設(shè)置不一致。此外,對(duì)于諸如 s3c44b0x 這樣的 CPU,CPU 時(shí)鐘頻率的設(shè)置也會(huì)影響串口,因此如果 boot loader 和內(nèi)核對(duì)其 CPU 時(shí)鐘頻率的設(shè)置不一致,也會(huì)使串口終端無(wú)法正確顯示信息。
(3) 最后,還要確認(rèn) boot loader 所用的內(nèi)核基地址必須和內(nèi)核映像在編譯時(shí)所用的運(yùn)行基地址一致,尤其是對(duì)于 uClinux 而言。假設(shè)你的內(nèi)核映像在編譯時(shí)用的基地址是 0xc0008000,但你的 boot loader 卻將它加載到 0xc0010000 處去執(zhí)行,那么內(nèi)核映像當(dāng)然不能正確地執(zhí)行了。
Boot Loader 的設(shè)計(jì)與實(shí)現(xiàn)是一個(gè)非常復(fù)雜的過(guò)程。如果不能從串口收到那激動(dòng)人心的uncompressing linux.................. done, booting the kernel……內(nèi)核啟動(dòng)信息,恐怕誰(shuí)也不能說(shuō):嗨,我的 boot loader 已經(jīng)成功地轉(zhuǎn)起來(lái)了!。
評(píng)論