TI-SDK包的使用不做說明,非常簡單好用,運行腳本creat-sdcard.sh即可。下面介紹手動制作啟動卡的步驟。
1、關於SD卡啟動模式
當按住BBB板子上的boot按鍵,板子便從SD卡(也就是mmc0)啟動,此時ROM-Code從SD卡的壹個活動主分區(boot分區)尋找SPL文件,將其加載到片內SRAM,控制權移交SRAM,之後SPL運行後又以和尋找SPL相同的方式開始尋找u-boot.img文件,於是從boot分區找到u-boot.img文件,並將其加載到片外SDRAM,之後u-boot加載內核,掛載根分區的根文件系統(rootfs分區)。系統啟動!
由此得出結論,壹張SD必須具備壹個活動主分區,而且分區格式為FAT32(LBA),暫時把這個分區的名字叫做boot,boot分區中必須要有MLO、u-boot.img,以及壹個根分區,分區格式為ext3/4,叫做rootfs,rootfs分區中必須有根文件系統,其他的就無所謂了。也就是說其他的文件可以和這些文件***存,只要保證這些文件以及目錄完好即可。
既然現在大小、分區數都有自己來定了,那麽我手上壹張8GB的內存卡microSD,我希望除了這兩個用於啟動系統的分區外還有第三個分區用於存放自己的文件,這樣以後操作另外兩個分區不會影響第三個分區,也不用像以前老是要把U盤的東西復制出來騰出空間做啟動盤。在linux可系統中對於壹個移動設備它可以識別上面所有的分區,包括ext2/3/4以及FAT32(LBA),而windows系統對於壹個移動設備,他僅僅識別上面第壹個主分區,如果沒有主分區就識別第壹個邏輯分區,僅僅支持FAT32(LBA)格式。另外,對於BBB開發板,活動主分區壹定要在第壹個,否則啟動系統時找不到文件。
那麽,有兩種選擇,
1)分區為boot分區,活動主分區,格式FAT32(LBA),大小50M即可
2)分區為rootfs分區,主分區,格式ext3/4,大小2GB
3)分區為store分區,主分區,格式ext3/4,剩余全部空間
或者
1)分區為boot分區,活動主分區,格式FAT32(LBA),大小5GB
2)分區為rootfs分區,主分區,格式ext3/4,剩余全部
兩種分區方法各有好處缺點。也可以有其他選擇。Note:壹個硬盤或者移動存儲設備,上面最多可以有四個分區,其中包括主分區和擴展分區,並且擴展分區最多壹個,當然也可以沒有擴展分區。擴展分區之下可以有若幹個邏輯分區。所以總容量=主分區+擴展分區,而擴展分區=邏輯分區之和。
2、制作SD卡
選擇第二種方案進行分區。操作環境,虛擬機ubuntu12.04,microSD卡8GB,BBB開發板。
step1:設置SD卡的磁頭數、扇區數、柱面數,即H、S、C,這樣設置是為了向SD卡讀寫數據是達到較高性能,其中C=SD卡bytes/H*S*512,我的SD卡的C=966,。
相關參考資料
/read.php?tid=331754
/read.php?tid=152497
zhouyu@zhouyu-virtual-machine:~$ ls /dev | grep sd
sda
sda1
sda2
sda5
sda6
sdb
sdb1
sdc
sdc1
sdd
sdd1
sdd2
sdd3
sdd5
zhouyu@zhouyu-virtual-machine:~$ sudo umount /dev/sdd5
zhouyu@zhouyu-virtual-machine:~$ sudo umount /dev/sdd2
zhouyu@zhouyu-virtual-machine:~$ sudo umount /dev/sdd3
zhouyu@zhouyu-virtual-machine:~$ sudo fdisk /dev/sdd
命令(輸入 m 獲取幫助): p
Disk /dev/sdd: 7948 MB, 7948206080 bytes
245 heads, 62 sectors/track, 1021 cylinders, total 15523840 sectors
Units = 扇區 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
設備 啟動 起點 終點 塊數 Id 系統
/dev/sdd1 2048 10487807 5242880 5 擴展
/dev/sdd2 * 10487808 10569727 40960 c W95 FAT32 (LBA)
/dev/sdd3 10569728 15523839 2477056 83 Linux
/dev/sdd5 4096 10487806 5241855+ c W95 FAT32 (LBA)
命令(輸入 m 獲取幫助):
插入SD卡後用命令查看壹下,當前SD卡的標號是sdd,而且裏面已經有分區sdd1(擴展分區),sdd2(活動主分區),sdd3(主分區),sdd5(邏輯分區),現將其全部卸載,再用fdisk程序開始進行分區工作。
命令(輸入 m 獲取幫助): d
分區號 (1-5): 1
命令(輸入 m 獲取幫助): d
分區號 (1-4): 2
命令(輸入 m 獲取幫助): d
Selected partition 3
命令(輸入 m 獲取幫助): x
專家命令(輸入 m 顯示幫助): h
磁頭數 (1-256,默認為 245): 255
專家命令(輸入 m 顯示幫助): s
扇區數 (1-63,默認為 62): 63
專家命令(輸入 m 顯示幫助): c
柱面數 (1-1048576,默認為 1021): 966
專家命令(輸入 m 顯示幫助): r
命令(輸入 m 獲取幫助):
先刪除原先的分區,在輸入指令X進入專家模式,分別設置H、S、C。C=SD卡bytes/H*S*512,取整數。設置完後輸入R返回,繼續。
step2:分區設置
命令(輸入 m 獲取幫助): p
Disk /dev/sdd: 7948 MB, 7948206080 bytes
255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
Units = 扇區 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
設備 啟動 起點 終點 塊數 Id 系統
命令(輸入 m 獲取幫助): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分區號 (1-4,默認為 1): 1
起始 sector (2048-15523839,默認為 2048): 2048
Last sector, +扇區 or +size{K,M,G} (2048-15523839,默認為 15523839): +6G
命令(輸入 m 獲取幫助): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分區號 (1-4,默認為 2): 2
起始 sector (12584960-15523839,默認為 12584960):
將使用默認值 12584960
Last sector, +扇區 or +size{K,M,G} (12584960-15523839,默認為 15523839):
將使用默認值 15523839
命令(輸入 m 獲取幫助): p
Disk /dev/sdd: 7948 MB, 7948206080 bytes
255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
Units = 扇區 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
設備 啟動 起點 終點 塊數 Id 系統
/dev/sdd1 2048 12584959 6291456 83 Linux
/dev/sdd2 12584960 15523839 1469440 83 Linux
命令(輸入 m 獲取幫助):
可以看到新建分區前指令p的輸出顯示沒有任何分區,再按照前面說的方案進行分區後在輸入指令p查看新建的分區。
step3:改變boot分區的系統id和設置boot分區為活動主分區
命令(輸入 m 獲取幫助): t
分區號 (1-4): 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))
命令(輸入 m 獲取幫助): a
分區號 (1-4): 1
命令(輸入 m 獲取幫助): p
Disk /dev/sdd: 7948 MB, 7948206080 bytes
255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
Units = 扇區 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
設備 啟動 起點 終點 塊數 Id 系統
/dev/sdd1 * 2048 12584959 6291456 c W95 FAT32 (LBA)
/dev/sdd2 12584960 15523839 1469440 83 Linux
命令(輸入 m 獲取幫助): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.
通過指令x,將分區表寫入SD卡,分區完成!
step4:分區格式化
zhouyu@zhouyu-virtual-machine:~$ sudo mkfs.vfat -F 32 -n boot /dev/sdd1
[sudo] password for zhouyu:
mkfs.vfat 3.0.12 (29 Oct 2011)
zhouyu@zhouyu-virtual-machine:~$ sudo mkfs.ext3 -L rootfs /dev/sdd2
mke2fs 1.42 (29-Nov-2011)
文件系統標簽=rootfs
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
91968 inodes, 367360 blocks
18368 blocks (5.00%) reserved for the super user
第壹個數據塊=0
Maximum filesystem blocks=377487360
12 block groups
32768 blocks per group, 32768 fragments per group
7664 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: 完成
正在寫入inode表: 完成
Creating journal (8192 blocks): 完成
第壹個分區被格式化成FAT32(LBA),分區名稱boot。
第二個分區被格式化成ext3,分區名稱rootfs。
step5:拷貝MLO、u-boot.img、rootfilesystem
<pre class="plain" name="code">zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/board-support/prebuilt-images$ sudo cp MLO-am335x-evm /media/boot/MLO
zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/board-support/prebuilt-images$ sudo cp u-boot-am335x-evm.img /media/boot/u-boot.img
zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/board-support/prebuilt-images$ sync
zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/filesystem$ sudo tar -zxvf tisdk-rootfs-image-am335x-evm.tar.gz -C /media/rootfs/
zhouyu@zhouyu-virtual-machine:/opt/ti-sdk-am335x-evm-07.00.00.00/filesystem$ sync
對於硬盤、優盤這類塊設備,每次拷貝完文件其實文件只是寫入了緩沖區,所以CP完後都要執行sync,將讀寫操作真正完成。