1. 程式人生 > >SD卡分割槽及rootfs燒錄的一些理解和筆記

SD卡分割槽及rootfs燒錄的一些理解和筆記

一、前言

最近在omapl138平臺移植完uboot和linux核心後,對核心掛載根檔案系統的這個過程一直是雲裡霧裡,再加上對檔案系統沒有深入的理解,就更雲裡霧裡了,因為omapl138支援MMC啟動,所以先通過使用linux下fdisk工具對SD卡進行分割槽,然後分配uboot、kernel和根檔案系統的位置,加深理解。

二、準備工作

想想Windows下的的C、D..盤,其物理磁碟實為一張物理磁碟,只不過我們使用分割槽工具把一張物理磁碟在作業系統之上分出了CDE盤,其目的也是為了方便管理,如C盤放作業系統,D盤存放遊戲,E盤..。

在嵌入式系統中也是一樣,一張SD卡也需要存放不同的資料,bootloader、kernel、環境變數、rootfs等。

我是這樣規劃SD卡資源分配的:

0~2047扇區:             uboot_spluboot

2048~10240扇區:      kernel

10241~7995391扇區   rootfsext3

首先將SD卡插入SD卡槽(筆記本自帶),linux下執行

cat /proc/partitions

檢視mtd分割槽,可知mmcblk0即為SD卡,接下來將使用fdisk對SD卡進行分割槽

三、fdisk對SD卡分割槽

執行 fdisk /dev/mmcblk0

M回車檢視command

輸入 n

P

1

咦,為何2048扇區以前的扇區號不能被fdisk分割槽呢?這是個歷史原因:bios中啟動方式  legacy被efi啟動代替而褪去,(沒有完全死掉),EFI引導模式需要特殊的引導系統,它使用efi系統去引導,最早要為efi引導程式碼留出1Mb的空間,現代的分割槽工具 fdisk 隨著也這樣做了  

輸入起始扇區和結束扇區,完成了新增第一個分割槽,該分割槽佔用的空間為SD卡第2048~10240扇區共4M,用來存放kernel image。繼續按照上述步驟新增第二個分割槽,新增完成後執行w儲存退出fdisk

再次檢視dev下的裝置節點,猶記的在使用fdisk分割槽前,dev目錄下是沒有mmcblkp1mmcblkp2的,這就說明我們剛才的分割槽成功了,不信再執行一次

cat /proc/partitions

可以看出mmcblk、mmcblkp1、mmcblkp2的主裝置號均為179,次裝置號分別為1、2、3。

四、燒錄uboot、kernel 、rootfs

  1. 燒錄spl uboot

dd if=u-boot-spl.ais of=/dev/mmcblk0 seek=10

dd if=u-boot.img of=/dev/mmcblk0 seek=181

將u-boot-spl.ais燒錄到SD卡第10扇區,u-boot.img燒錄至第181扇區

  1. 製作ext3檔案系統

Linux核心支援多種檔案系統,想象一下我們的U盤格式化時是否有選擇檔案系統這一項,是的,windows系統之所以識別出U盤中儲存的檔案,是因為windows支援U盤上的檔案系統,加入你把U盤格式化成一塊磚頭,windows就識別不出來了,只能先將其格式化成windows可識別的檔案系統後,再重新將檔案拷入U盤,繼續使用。

同理,沒有格式化的SD卡就是一塊磚,沒有檔案系統,核心是無法掛載進行檔案操作的,故我們需要先將mmcblkp2格式化為ext3檔案系統,然後將根目錄下需要的一切檔案拷貝進去,即完成了根檔案系統的製作。

mount -t ext3 /dev/mmcblk0p2 /opt/

cp /study/QemuLearn/rootfs/* /opt/ -rf

umount /opt/

至此,一張可以啟動的SD卡製作完畢