製作一張SD啓動卡,可以有兩種選擇,第一,利用TI-SDK的腳本來製作,該腳本功能較多,可以製作2分區的也可以製作3分區的啓動卡,而且寫入的相關啓動文件比如MLO、u-boot.img、根文件系統(包括了內核)既可以是TI-SDK包裏面自帶的預編譯好的,也可以是自己做的放在其他地方的文件;第二,完全自己手動製作,定製一張自己想要的大小、分區數、寫入自己編譯的MLO、u-boot.img、根文件系統,這樣也算是DIY了。 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,。 相關參考資料 http://omappedia.org/wiki/SD_Configuration#Alternative_Script_to_format_SD_Cards_for_3_partitions http://bbs.mydigit.cn/read.php?tid=331754 http://bbs.mydigit.cn/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 對於硬盤、U盤這類塊設備,每次拷貝完文件其實文件只是寫入了緩衝區,所以copy完後都要執行sync,將讀寫操作真正完成。
AM335X SD卡分區製作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.