前幾天買了個板子:長聚微嵌的DMA-210U。今天算是正式使用的第一天。
首先,看了看文檔,決定重新燒錄一遍Android。
1. 燒錄uboot:
板子從USB啓動(給的文檔有點差,跳線方式不是很清楚),這裏先要把uboot下載到內存中,這樣uboot跑起來後就可以進行燒寫了。然後用內存中運行的uboot再把uboot的程序下載到flash中。這樣uboot下次就可以從flash啓動了。
2. 燒錄kernel:
板子從nand flash啓動(經過第一步,uboot已經在nand flash裏了),開始燒寫Linux內核zImage。每次燒錄實際上包括兩步,erase和write。首先erase將要write的分區,然後通過write寫入數據。還要說明的一點事:光盤中提供的下載軟件dnw1.01,每次使用該軟件USB download的時候,通常只是把數據下載到內存(雖然下載地址可以指定)。綜上所述,每次燒錄的正確順序應該是:erase--> dnw download---->write。
3. 燒錄文件系統:
Android編譯後回生成ramdisk,img, systerm.img和userdata.img。這一步就是要把這三個文件分別燒錄到nand flash中。ramdish.img包含了初始化和配置信息,燒錄過程沒什麼特殊之處,還是三部曲erase--> dnw download---->write。
其實現在給板子上電,從dnw上的打印信息和屏幕的企鵝畫面,基本可以判斷Linux kernel已經跑起來了。貌似曙光就在眼前了,go ahead,繼續燒寫system.img和userdata.img。這兩個文件的燒寫要用 nand write.yaffs命令,並且注意起始地址和數據長度。起始地址要和
linux的區分一致,也就是說要和dnw上打印出來的分區地址一致。比如我這裏打印的信息是:
0x000c0000-0x00100000 : "misc"
0x00100000-0x00600000 : "recovery"
0x00600000-0x00b00000 : "kernel"
0x00b00000-0x00e00000 : "ramdisk"
0x00e00000-0x08600000 : "system"
0x08600000-0x0d600000 : "cache"
0x0d600000-0x20000000 : "userdata"
所以system.img和userdata.img也必須在相應的位置。
4 悲劇發生了
按照文檔的提示做到這裏,總算鬆了一口氣,燒錄系統的二萬五千里長徵總算走到了盡頭。板子重新上電,kernel開始啓動,linux的企鵝logo出現在屏幕上,屏幕顯示android2.2 runnning,。就在這時,悲劇發生了,dwn提示:
init: cannot find '/system/bin/sh', disabling 'console'
init: cannot find '/system/bin/pvrsrvinit', disabling 'pvrsrvinit'
init: cannot find '/system/bin/servicemanager', disabling 'servicemanager'
init: cannot find '/system/bin/vold', disabling 'vold'
init: cannot find '/system/bin/netd', disabling 'netd'
init: cannot find '/system/bin/debuggerd', disabling 'debuggerd'
init: cannot find '/system/bin/app_process', disabling 'zygote'
init: cannot find '/system/bin/mediaserver', disabling 'media'
init: cannot find '/system/bin/dbus-daemon', disabling 'dbus'
init: cannot find '/system/bin/installd', disabling 'installd'
init: cannot find '/system/bin/keystore', disabling 'keystore'
init: cannot find '/system/bin/rild', disabling 'ril-daemon'
enabling adb
adb_open
android_usb gadget: high speed config #1: UMS + ADB (Debugging mode)
然後,板子就進入了無盡的等待,一直是android2.2 runnning。
5. 下一步的打算
哎,學藝不精、能力有限,各種問題總是源源不斷。木有辦法,只能在重重困難中殺出一條血路。只要硬件不出問題,uboot可以正常工作,剩下的應該問題不大。
首先,基本可以肯定linux kernel應該是燒錄成功了,當然也就是說uboot肯定可以正常工作。現在感覺是文件系統出問題了。
A) 或許是光盤sample image裏的system.img 和 userdata.img有問題。可以試一下自己編譯出來的兩個文件。
B)燒寫system.img 和 userdata.img時,地址和長度出了問題。對這裏的Linux如何分區的不是很清楚,還有硬件上的地址空間的映射(哪塊分給ram, 哪塊分給flash)也不是很清楚
C)對Android的啓動過程不是很清楚,不確定打印出的信息到達說明了什麼。可以看一下相關Android移植的一些文檔
D)可以諮詢一下長聚微嵌的技術支持。還沒聯繫過,希望售後服務可以解決問題。