最近不順心的事還不少,一玩 beagleboard,不小心在開機時把 microSD 卡退出,導致 microSD 內建的資料爛掉,除了整個板子重開機沒反應外,把 microSD 卡插到其他 OS 讀不到。當時一度讓我有點小緊張,總不會剛拿到板子就給玩壞了 XD 所幸遲疑一下,用 Windows 7 小筆電(周邊唯一有讀卡機的設備)讀 microSD 讀不到,開始猜測問題所在處。隨後又碰到 Windows 格式化的問題,最後的解法就是跟別人借 SDCard Reader 在 Ubuntu 10.04 操作囉。
解法:找一台 Unix 機器將 microSD 重新格式化 + 安裝開機所需的檔案。除此之外,記得說明書上也以提過 beagleboard 很多接頭其實沒做太多防護,像是插錯電壓會壞的,也有人提到不太適合熱插拔,容易傷到晶片等等,需要特別留意一下。回歸正題,以下次這次解決流程:
1.確認 microSD 位置
如果 df -h 和 dmesg | tail 無法判斷的話,可以透過 Ubuntu Desktop -> [設定] -> [管理] -> [磁碟公用程式] -> [USB 週邊裝置]: 由於原先 BeagleBoard-xM 內建一張 4GB mircoSD 卡,所以查看一下就會找到,此例為 /dev/sdc
另外提一下,之後的動作若要把 microSD 卡安全移除的話,先分別點下方儲存區(此例已點選boot區,還有另一個是Angstrom),再點選 "卸載儲存區",最後在點選右上方的 "安全移除"。
2.執行格式化
在 elinux.org wiki 有提到透過 mkcard.txt 來執行,作法則是 sudo sh mkcard.txt /dev/sdc,過程需要 kpartx 指令,請先用 sudo apt-get install kpartx 安裝一下。另一個步驟比較多,就是傳統使用 fdisk 的過程,請參考 elinux.org wiki,在此以 mkcard.txt script 為例:
$ wget http://www.angstrom-distribution.org/demo/beagleboard/mkcard.txt
$ sudo sh mkcard.txt /dev/sdc
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.221714 s, 4.7 MB/s
Disk /dev/sdc doesn't contain a valid partition table
DISK SIZE - 3951034368 bytes
CYLINDERS - 480
Checking that no-one is using this disk right now ...
BLKRRPART: Device or resource busy
This disk is currently in use - repartitioning is probably a bad idea.
Umount all file systems, and swapoff all swap partitions on this disk.
Use the --no-reread flag to suppress this check.
Use the --force flag to overrule all checks.
mkfs.vfat 3.0.7 (24 Dec 2009)
umount: /dev/sdc2: not mounted
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=Angstrom
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
215568 inodes, 861485 blocks
43074 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=884998144
27 block groups
32768 blocks per group, 32768 fragments per group
7984 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
如此一來會切割出 boot 跟 Angstrom 兩個 partition 囉,只是很奇妙的重新把 microSD 插入主機,還是會找不到,所以,上面做完後,我馬上接著在做下面的:
$ sudo mkfs.msdos -F 32 /dev/sdc1 -n boot
$ sync
重新把 microSD 插入後,對 Ubuntu 10.04 來說,可在 /media/boot 和 /media/Angstrom 存取。
3.安裝所需檔案
在官網 wiki 上有提到,在 http://www.angstrom-distribution.org/demo/beagleboard/ 下載 4 個檔案,必須依序把 MLO、u-boot.bin 和 uImage 擺在 /media/boot 區,把 Angstrom-Beagleboard-demo-image-#######.tar.bz2 和 modules-#####-beagleboard.tgz 解壓縮在 /media/Angstrom 區。此以 wget 為例,建議可以先下載後,透過 cp 指令搬到 /media/boot 和 /media/Angstrom,其中要用 sudo 對 /media/Angstrom 動作。
$ mdkir ~/beagleboard
$ cd ~/beagleboard
$ wget http://www.angstrom-distribution.org/demo/beagleboard/MLO (13-Jan-2012 21:19, 42K)
$ wget http://www.angstrom-distribution.org/demo/beagleboard/uImage (13-Jan-2012 15:14, 3.2M)
$ wget http://www.angstrom-distribution.org/demo/beagleboard/u-boot.img (13-Jan-2012 21:19, 321K)
$ wget http://www.angstrom-distribution.org/demo/beagleboard/Angstrom-Beagleboard-demo-image-glibc-ipk-2011.1-beagleboard.rootfs.tar.bz2 (11-Jan-2011 11:18, 169M)
$ wget http://www.angstrom-distribution.org/demo/beagleboard/modules-3.0.17+-r115a-beagleboard.tgz (13-Jan-2012 15:14 8.9M)
$ sudo cp MLO /media/boot
$ sudo cp uImage /media/boot
$ sudo cp u-boot.img /media/boot
$ sudo tar -xv -C /media/Angstrom -f Angstrom-Beagleboard-demo-image-glibc-ipk-2011.1-beagleboard.rootfs.tar.bz2
$ sudo tar -xv -C /media/Angstrom -f modules-3.0.17+-r115a-beagleboard.tgz
其他系統微調:
為了解決系統開機時 can't create /tmp/uname: Read-only file system 等類似訊息,要更新 etc/default/udev 資料,將 DEVCACHE="/etc/dev.tar" 註解起來。
$ sudo vim /media/Angstrom/etc/default/udev
# Default for /etc/init.d/udev
# Comment this out to disable device cache
#DEVCACHE="/etc/dev.tar"
安全移除 microSD 卡
$ sync
$ sudo umount /media/boot
$ sudo umount /media/Angstrom
資料複製到 SDCard 完後,記得要卸載以及安全地移除 SDCard,因為使用 Ubuntu 10.04 的經驗告訴我,它都是卸載裝置時,才開始把資料寫進去,因此貿然抽出,就等於沒寫資料或資料不完整。
4.啟動 beagleboard-xM
先把 microSD 卡插好,再把接線接一下,準備好後,就可以開機,正常的情況時,過一會螢幕也會顯示 beagleboard logo 以及相關開機流程,最後就可以進入 OS 囉!至於要關機的話,目前若有 console 的話,我會連進去用 poweroff 關,沒 console 的部分,就得看滑鼠能不能動了 XD 此例我開機完滑鼠還未能正常工作,所以我只好直接拔電源了 XDD
正常啟動後,上方紅色框框處大概會不定期閃爍,類似 PC 那紅紅的讀硬碟的燈,而那兩盞燈大概是讀寫 microSD 卡,通常我用那兩個燈來判斷系統是否正常,例如有一開始沒閃燈,或是一直亮燈不動。
最後,如果需要更新板子跑其他的話,流程如下:
- 格式化記憶卡 ( sudo sh mkcard.txt /dev/sdX && sudo mkfs.msdos -F 32 /dev/sdX1 -n boot && sudo mkfs.ext3 /dev/sdX2 -L Angstrom )
- 卸除記憶卡 ( sync && unmount )
- 重新插入記憶卡
- 依序複製重要檔案到 /media/boot 和 /media/Angstrom 區
- 卸除記憶卡
- 將記憶卡插回板子,準備妥後開機即可
其他資訊:
- 假設安裝的 OS 是 console 模式或有支援的,預設是走 RS232 115200 的,當接好線後,可以用 screen 指令開啟 terminal 來觀看
- $ screen -U /dev/ttyUSB0 115200
- 如果安裝 Angstrom Demo 並不順利的話,可以試試 http://narcissus.angstrom-distribution.org/ 邊,他可以依照你的設定建立好所需檔案喔
- 純 Console 方式 (初始化要等一會,應該不用10分鐘吧)
- machine: beagleboard
- complexity: simple
- environment: console
- Additional packages:
- Platform specific packages
- 勾選 Bootloader Files (x-load/u-boot/scripts)
- 走 X11 方式(視窗介面,測試結果初始化約 2.5 小時,往後開機約 2 分半鐘,關機一分鐘左右)
- machine: beagleboard
- complexity: simple
- environment: X11
- X11 Desktop: GNOME
- Additional packages:
- Platform specific packages
- 勾選 Bootloader Files (x-load/u-boot/scripts)
- 之後按 build me! 後,大概等一會兒就會看到下載連結,在把檔案下載回來處理一下即可 (此以 beagleboard-changyy.tar.gz 為例,別忘了先格式化 microSD 卡)
- $ mkdir ~/test
- $ cd ~/test
- $ tar --wildcards beagleboard-changyy.tar.gz ./boot/*
- $ cp boot/MLO-* /media/boot/MLO
- $ cp boot/uImage-* /media/boot/uImage
- $ cp boot/u-boot-*.bin /media/boot/u-boot.bin
- $ sync
- $ tar --wildcards -xvz -C /media/Angstrom -f beagleboard-changyy.tar.gz
- $ sync
參考資料: