從開始下定決心從無到有的移植uboot後,最近這段時間進展很慢,從最開始的開始了解arm的體系架構(當初學單片機的時候看到arm驅動的書前面大篇幅的講arm感覺是沒必要的,現在看來是很有必要的,單片機才不用關心他的架構,如果僅用c開發),然後又需要了解arm匯編,因為不了解匯編想去一直uboot根本不可能。由於工作最近經常加班,有時看的時間也不多,不過最近工作上的感覺慢慢的熟練起來之後,對我學習一直uboot也是有很大幫助的。
今天開始用點燈的方式調試,發現在走到 bl lowlevel_init之後,在lowlevel_init函數裡的點燈沒有起作用。於是查看uboot.bin的反匯編代碼,發現跳轉之後的匯編代碼並不是我點燈的代碼,相差很遠。中間試了好幾遍還是不行,網上百度看到有一兩個人也有這種問題,但是沒有解答。到最後發現我實際改寫的這個 lowlevel_init.S文件時在cpu目錄下的,然後我記得在哪裡看到過時在board目錄下的吧~ 後來一看,發現board目錄下海真有一個,即:
我修改的是 arch\arm\cpu\arm1176\tnetv107x 目錄下的,而且這個目錄下的函數裡是空的。我就想為什麼和其他的網上說的裡面做的初始化怎麼不一樣呢~
實際用的應該是 board\samsung\smdk6400\lowlevel_init.S
真是太悲劇了,害的我弄到現在都凌晨3點了。寫出來給以後萬一也遇到這種低級問題的人,也算是對自己的一個提醒!雖然是個低級錯誤,不過通過這個問題還是學到不少定位問題的手段。最起碼對uboot編出來的反匯編熟悉了不少。