一、目的:嵌入式開發板,通過emmc上的內核文件加載啟動linux操作系統,以及存放其他程序文件。需要將所需文件先寫入emmc中。
二、總體步驟是:uboot啟動后,進入linux下,將emmc分區並格式化,uboot下支持fat和ext2的格式,這里用fat格式,並掛載,然后放入所需要的文件。這樣重啟后,進入uboot下,將emmc中的文件load到內存中運行。
三、uboot下emmc內容燒寫(拷貝)步驟:
1、uboot啟動后,輸入mmc info有mmc的相關信息
2、通過tftp或其他方式啟動linux
3、linux啟動后,輸入fdisk -l能看到/dev/mmcblk0的信息
4、linux下用fdisk命令對mmc分區,格式化
#fdisk /dev/mmcblk0
fdisk命令都是非常簡單的。
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): m
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)
先P,看看sd卡的分區現狀。
然后d,刪除原分區
n,創建分區
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-62528, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-62528, default 62528): +1500M
t,指定分區類型,
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx
5 Extended 42 SFS 86 NTFS volume set da Non-FS data
6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt
9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS access
a OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT
f W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT
1e Hidden W95 FAT1
Hex code (type L to list codes): 6
Changed system type of partition 1 to 6 (FAT16)
這樣就分好了第一個分區,並且指定了分區為fat16
好了,看看成果。
Command (m for help): p
Disk /dev/mmcblk0: 2048 MB, 2048917504 bytes
4 heads, 16 sectors/track, 62528 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6f20736b
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 1 48001 1536024 6 FAT16
/
好了,把分區信息寫入磁盤。
Command (m for help): 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.
下面開始格式化。
首先是fat16分區
#mkdosfs /dev/mmcblk0p1
看一下格式化后的
~ # fdisk -l
Disk /dev/mmcblk0: 1920 MB, 1920991232 bytes
4 heads, 16 sectors/track, 58624 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 1 58624 1875960 6 FAT16
把emmc掛載在一目錄下
~ # mount /dev/mmcblk0p1 /vm
1 58624 1875960 6 FAT16
這樣就可以將文件拷貝到/vm下,這里新建了一txt文件,並輸入內容,重啟后在uboot下查看emmc中是否有改文件。
~ # cd vm
/vm # ls
/vm # vi a.txt
11111111111111111111111111111111111111111111
0000000000000000000000000000000000000000000
11111111111111111111111111111111111111111111
00000000000000000000000000000000000000000000
#reboot
重啟后進入uboot下,查看mmc設備
Octeon# mmc list
Octeon MMC/SD0: 0
用fatls命令查看mmc下的文件信息,可以看到有linux下建的a.txt文件
Octeon #fatls mmc 0
181 a.txt
1 file(s), 0 dir(s)
將mmc中a.txt拷貝到內存中查看內容
先看一下原來內存的信息
Octeon# md 30000000
30000000: 00000000 00000000 00000000 5f800000 ............_...
30000010: 00000000 00000000 00000000 00000000 ................
30000020: 00000000 00000000 00000000 00000000 ................
30000030: 00000000 00000000 00000000 00000000 ................
30000040: 00000000 00000000 00000000 00000000 ................
30000050: 00000000 00000000 00000000 00000000 ................
30000060: 00000000 00000000 00000000 00000000 ................
30000070: 00000000 00000000 00000000 00000000 ................
30000080: 00000000 00000000 00000000 00000000 ................
30000090: 00000000 00000000 00000000 00000000 ................
300000a0: 00000000 00000000 00000000 00000000 ................
300000b0: 00000000 00000000 00000000 00000000 ................
300000c0: 00000000 00000000 00000000 00000000 ................
300000d0: 00000000 00000000 00000000 00000000 ................
300000e0: 00000000 00000000 00000000 00000000 ................
300000f0: 00000000 00000000 00000000 00000000 ................
將mmc中a.txt load到內存中
Octeon# fatload mmc 0 30000000 a.txt
reading a.txt
181 bytes read
查看內存信息,可以看到就是a.txt的內容,說明emmc內容寫入成功 。
Octeon# md 30000000
30000000: 31313131 31313131 31313131 31313131
1111111111111111
30000010: 31313131 31313131 31313131 31313131 1111111111111111
30000020: 31313131 31313131 31313131 0a303030 111111111111.000
30000030: 30303030 30303030 30303030 30303030 0000000000000000
30000040: 30303030 30303030 30303030 30303030 0000000000000000
30000050: 30303030 30303030 0a313131 31313131 00000000.1111111
30000060: 31313131 31313131 31313131 31313131 1111111111111111
30000070: 31313131 31313131 31313131 31313131 1111111111111111
30000080: 31313131 310a3030 30303030 30303030 11111.0000000000
30000090: 30303030 30303030 30303030 30303030 0000000000000000
300000a0: 30303030 30303030 30303030 30303030 0000000000000000
300000b0: 30300a0a 0a000000 00000000 00000000 00..............
300000c0: 00000000 00000000 00000000 00000000 ................
300000d0: 00000000 00000000 00000000 00000000 ................
300000e0: 00000000 00000000 00000000 00000000 ................
300000f0: 00000000 00000000 00000000 00000000 ................