一. ramdisk.gz.uboot自作过程:
1. 创建一个loop目录,作为挂载点:
mkdir loop
2. 获取一个10M的镜像,count会在kernel配置中使用:
dd if=/dev/zero of=ramdisk bs=1k count=10240
3. 格式化为ext2:
mke2fs -F -v -m 0 ramdisk
4. 切换root:
su root
5. 把ramdisk挂载到loop目录:
mount -o loop ramdisk ./loop/
6. 拷贝早已做好的rootfs下所有文件到loop目录下(cp命令一定要使用-a),如果这一步发现loop空间不够,则从第2步重新开始做,增大count:
cp -a rootfs/* ./loop/
7. 查看loop目录下空间使用情况:
ds ./
8. 卸载loop目录
umount loop
9. 退出root
exit
10. 压缩ramdisk镜像:
gzip -9 -c ramdisk > ramdisk.gz
11. 使用mkimage制作uboot启动的ramdisk:
mkimage -n 'uboot ext2 ramdisk rootfs' -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.gz.uboot
二. uImage支持ramdisk启动
1. 设置Default Ram disk size 为10240,和上面第一个dd命令的count一致:
2. uImage支持ext2文件系统:
三. 测试
1. 设置bootargs:
setenv bootargs 'console=ttymxc0,115200n8 root=/dev/ram rw'
2. 启动:
tftp 0x10800000 uImage && tftp 0x20000000 ramdisk.gz.uboot && bootm 0x10800000 0x20000000
3.启动Log:
U-Boot > run tftp_ramdisk
FEC: Link is Up 796d
Using FEC0 device
TFTP from server 192.168.1.107; our IP address is 192.168.1.235
Filename 'uImage'.
Load address: 0x10800000
Loading: #################################################################
#################################################################
#################################################
done
Bytes transferred = 2627012 (2815c4 hex)
FEC: Link is Up 796d
Using FEC0 device
TFTP from server 192.168.1.107; our IP address is 192.168.1.235
Filename 'ramdisk.gz.uboot'.
Load address: 0x20000000
Loading: #################################################################
#################################################################
########################################################
done
Bytes transferred = 2717546 (29776a hex)
## Booting kernel from Legacy Image at 10800000 ...
Image Name: Linux-3.0.35
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2626948 Bytes = 2.5 MB
Load Address: 10008000
Entry Point: 10008000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 20000000 ...
Image Name: uboot ext2 ramdisk rootfs
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 2717482 Bytes = 2.6 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
省略。。。。。。。
[ 2.675255] RAMDISK: gzip image found at block 0
[ 3.007175] VFS: Mounted root (ext2 filesystem) on device 1:0.
注:
如果Default Ram disk size和count不一致,可能会出现
RAMDISK: incomplete write (7883 != 19371) [ 2.782665] write error [ 2.837734]
解决方法有两个:
1.设置Default Ram disk size和count一致;
2.设置bootargs,设置ramdisk_size比ramdisk镜像文件一致或者大:
setenv bootargs 'console=ttymxc0,115200n8 root=/dev/ram rw ramdisk_size=10485760'
到此结束。