當前位置:編程學習大全網 - 源碼下載 - beaglebone black uboot怎麽燒到sd卡

beaglebone black uboot怎麽燒到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,。

相關參考資料

/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,將讀寫操作真正完成。

  • 上一篇:有哪些成功的小說改編影視作品的範例?
  • 下一篇:刀塔傳奇完整源代碼
  • copyright 2024編程學習大全網