電子工程網(wǎng)

標題: 為啥剛剛enable MMU后系統立刻就掛了? [打印本頁(yè)]

作者: codee    時(shí)間: 2013-10-7 01:33
標題: 為啥剛剛enable MMU后系統立刻就掛了?
嵌入式門(mén)外漢,手頭有個(gè)2410的老開(kāi)發(fā)板,自帶bootloader沒(méi)動(dòng),可通過(guò)usb下載zImage并啟動(dòng)成功。
我有個(gè)想法是做雙bootloader,也就是除了本身的bootloader外,另外安裝一個(gè)uboot在以前屬于linux kernel的nand分區上。但是出現了問(wèn)題:
1、從bootloader啟動(dòng)寫(xiě)在nand分區上的uboot,再通過(guò)uboot下載linux內核zImage,顯示解壓完成后就掛住了。
2、從bootloader通過(guò)USB下載和上面相同的uboot.bin,并在下載完成后運行該uboot,再通過(guò)uboot下載和上面相同的linux內核,內核可以成功啟動(dòng)。
這兩個(gè)方法唯一的區別就是,第一次是加載nand分區上的uboot運行,而第二次是下載uboot直接運行。


我寫(xiě)了一段閃燈的匯編,插入到內核啟動(dòng)代碼,發(fā)現,在head.S的__turn_mmu_on中,執行完mcr p15, 0, r0, c1, c0, 0(也就是開(kāi)啟mmu),系統就掛住了。通過(guò)實(shí)驗,我觀(guān)察到的r0值是0xc0007177。對了,kernel版本是2.6.14。不知道有沒(méi)有大俠可以幫我看看這是咋回事?






作者: codee    時(shí)間: 2013-10-10 20:41
搞定了,媽的,基礎知識不牢。。。原來(lái)是bootloader設置的啟動(dòng)參數區(0x30000100)作祟。
zImage解壓程序貌似會(huì )讀取這個(gè)區域,其內容是頁(yè)的大小和數量,bootloader設置分別為0x1000和0x4000,我在uboot啟動(dòng)zImage前將0x30000100和0x30000104兩個(gè)32位清零,kernel就能正常啟動(dòng)了。

大概就是這個(gè)意思,我還沒(méi)時(shí)間深究zImage的解壓過(guò)程,希望有懂的大俠澄清一下。
作者: wy1082    時(shí)間: 2013-10-14 20:22
多謝分享,樓主辛苦




歡迎光臨 電子工程網(wǎng) (http://selenalain.com/) Powered by Discuz! X3.4
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页