ramdisk制作过程记录

时间:2022-08-23 17:16:44

一. 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一致:

ramdisk制作过程记录ramdisk制作过程记录

2. uImage支持ext2文件系统:

ramdisk制作过程记录ramdisk制作过程记录


三. 测试

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'

到此结束。