AM335X SD卡分區製作

製作一張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,將讀寫操作真正完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章