2012年7月5日 星期四

fatload bug of U-boot Command

最近發現我的 Demo Board 非常不穩定 , Kernel 增加一行 printk 就會導致 U-boot load kernel當掉 !! 這樣沒有辦法 debug kernel , 所以花時間尋找一下 bug !!
 
最後發現只要 kernel 不是 512 的倍數就會導致u-boot 在 fatload 時候卡住 ,如果是 512倍數就沒有問題 , 真是奇怪的問題 , 不過猜想應該是 eMMC reading Function 有問題 , 因為 512 剛好是 sector 的大小 .

找最後 , 發現 get_cluster() 中會呼叫 disk_read() , 並且傳所需要的 block size 數量給 disk_read() , size/FS_BLOCK_SIZE , 如果 size 小於 FS_BLOCK_SIZE 就會傳 "0" 給 disk_read() , 是這邊導致整個 u-boot 當掉 , 所以 , 多加一行 判別 , 如果是 "0" 就傳 "1 " ,這樣就解決了 !!
這樣會有一個小問題 , 就是會多讀取幾個 byte 到 DRAM 中 . 不過在我們的應用上沒有大問題 , 主要是 loading kernel 罷了 , 多出來的也不會有問題.

目前先這樣解決 !!

沒有留言:

張貼留言