1. s3c6410 SD啟動原理
s3c6410 支持Nand Flash本地啟動Linux,包括內核,根文件系統,bootloader均寫入在Nand Flash.這樣可以獨立運行.
很多情況下,Nand Flash的某種原因無法寫入內核和Rootfs.而使用tftp下載內核,用NFS啟動根文件系統比較慢.s3c6410 支持 SD卡啟動,經過改造u-boot可以從SD卡引導內核,這樣而Linux 又可以從SD卡的裝載ext3根文件系統.這樣可以制作一個完整的SD卡啟動卡.
這樣bootloader(u-boot)可以寫入SD卡,引導扇區.
bootloader的第一階段把自己裝入在內存高端地址看後,可以用兩種方法從SD卡裝入內核到內存.
一種是用fatload命令從fat分區裝入內核文件到內存。
fatload mmc 1 address filename
(上述命令表示從第一個mmc設備裝入文件filename到內存的address當中),這個需要完整的實現fat的驅動,因此很多u-boot沒有帶.
另外一種常見的做法是使用u-boot的movi 命令.
用movi 命令直接讀寫SD卡sector.但是這樣有可以與文件系統有沖突,因此要小心分區.
後面就是用這個方法來實現啟動的.可以把movi讀入命令寫入bootcmd 實現自動啟動
3.內核裝入後,可以支持用ext3的格式作根文件系統,這樣可以把SD卡一個分區格式化成ext3即
可以啟動 ,這樣要修改bootargs
這個可以參考<<ARM-Linux使用SD卡根文件系統>>
http://www.linuxidc.com/Linux/2011-11/47797.htm
2.Linux SD分區操作.
支持這種需要2G以下,非SDHC卡,假設是一個2G SD卡,分300M給FAT,剩下全部給 EXT3格式,作根文件系統。
bootloader寫在SD卡的引導區,不占用分區空間
Linux 對SD卡的的操作,如果第一個插入的SD卡是 /dev/sda,第二個SD卡是/dev/sdb ...依次類推.
如果第一個SD卡的第一個分區是 /dev/sda1 ,第二個分區 /dev/sda2 .如果上一個卡(sda)未安全撥下,而第二次插入也會變成sdb.
所以插入卡時要小心檢測SD卡對應的設備結點.
2.1 Linux 分區工具 fdisk.
fdisk 與dos下的工具同名,在操作SD分區,最好把分區文件目錄umount掉,否則會修改分區失敗,也注意要把SD卡的寫保護鎖打開. 命令格式
fdisk <設備結點>
這是指設備結點/dev/sda之類,不要對/dev/sda1 之類操作.
- # fdisk /dev/sda
-
- The number of cylinders for this disk is set to 35560.
- There is nothing wrong with that, but this is larger than 1024,
- and could in certain setups cause problems with:
- 1) software that runs at boot time (e.g., old versions of LILO)
- 2) booting and partitioning software from other OSs
- (e.g., DOS FDISK, OS/2 FDISK)
-
- Command (m for help): m #<------------顯示fdisk菜單
- Command action
- a toggle a bootable flag
- b edit bsd disklabel
- c toggle the dos compatibility flag
- d delete a partition
- l list known partition types
- m print this menu
- n add a new partition
- o create a new empty DOS partition table
- p print the partition table
- q quit without saving changes
- s create a new empty Sun disklabel
- t change a partition's system id
- u change display/entry units
- v verify the partition table
- w write table to disk and exit
- x extra functionality (experts only)
-
-
-
- Command (m for help): p #<--------------------打印分區表
-
- Disk /dev/sda: 2002 MB, 2002780160 bytes
- 11 heads, 10 sectors/track, 35560 cylinders
- Units = cylinders of 110 * 512 = 56320 bytes
-
- Device Boot Start End Blocks Id System
- /dev/sda1 2 35561 1955775+ b W95 FAT32 #原有的FAT32分區
接下操作,是刪除原有分區,並且新建兩個分區,一個用FAT,一個是EXT32根文件系統
- Command (m for help): d #<-------------刪除一個分區
- Selected partition 1
-
-
-
- Command (m for help): n #<-------------新建一個分區
-
- Command action
- e extended
- p primary partition (1-4)
- p #<--------------選擇創建 primary 首要分區
- Partition number (1-4): 1 #<---------第一個首要分區
- First cylinder (1-35560, default 1): #<---------起始位置,直接回車用缺省值
- Using default value 1
-
- Last cylinder or +size or +sizeM or +sizeK (1-35560, default 35560): 300M
-
- #<---- 第一個分區使用 300M空間
-
- Command (m for help): p
-
- Disk /dev/sda: 2002 MB, 2002780160 bytes
- 11 heads, 10 sectors/track, 35560 cylinders
- Units = cylinders of 110 * 512 = 56320 bytes
-
- Device Boot Start End Blocks Id System
- /dev/sda1 1 300 16495 83 Linux
-
-
- Command (m for help): n #<----建第二個分區
- Command action
- e extended
- p primary partition (1-4)
- p #<--------------選擇創建 primary 首要分區
- Partition number (1-4): 2 #<---------第二個首要分區
- First cylinder (301-35560, default 301):
- Using default value 301
- Last cylinder or +size or +sizeM or +sizeK (301-35560, default 35560):
- Using default value 35560 #直接回車表示缺省值,即把剩下所有空間都歸入這個分區
-
- Command (m for help): p
-
- Disk /dev/sda: 2002 MB, 2002780160 bytes
- 11 heads, 10 sectors/track, 35560 cylinders
- Units = cylinders of 110 * 512 = 56320 bytes
-
- Device Boot Start End Blocks Id System
- /dev/sda1 1 300 16495 83 Linux
- /dev/sda2 301 35560 1939300 83 Linux
-
-
- Command (m for help): w #<-------將分區表寫入SD卡,至此才真正生效
-
- The partition table has been altered!
-
- Calling ioctl() to re-read partition table.
- Syncing disks.
2.2 格式化兩個分區
第一個格式化成 FAT
mkfs.vfat /dev/sda1
第二個格式化 格式ext3 格式
mkfs.ext3 /dev/sda2
- # mkfs.vfat /dev/sda1 #<----------格式化命令
- mkfs.vfat 2.11 (12 Mar 2005)
- [root@tch u-boot-1.1.6_hxy6410]# mkfs.ext3 /dev/sda2 #<------格式化命令
- mke2fs 1.39 (29-May-2006)
- Filesystem label=
- OS type: Linux
- Block size=4096 (log=2)
- Fragment size=4096 (log=2)
- 242880 inodes, 484825 blocks
- 24241 blocks (5.00%) reserved for the super user
- First data block=0
- Maximum filesystem blocks=499122176
- 15 block groups
- 32768 blocks per group, 32768 fragments per group
- 16192 inodes per group
- Superblock backups stored on blocks:
- 32768, 98304, 163840, 229376, 294912
-
- Writing inode tables: done
- Creating journal (8192 blocks): done
- Writing superblocks and filesystem accounting information:
- done
-
- This filesystem will be automatically checked every 33 mounts or
- 180 days, whichever comes first. Use tune2fs -c or -i to override.
2.3 測試文件系統是否可以用
mount -t ext3 /dev/sda2 /mnt
2.4 把根文件系統拷入SD卡,r表示遞歸,a表示把權限,符號鏈接等信息也拷貝
cp -ra /home/hxy/rootfs/* /mnt