dd命令打包多个文件_文件系统加工

当得到了根文件系统后就要进行文件系统的烧写工作了。目前的想法暂时有两个,放到内存上或者放到硬盘上。

Ramdisk:

首先需要内核选中相应的选项进行支持,否则是无法使用ramdisk的。内核主要配两个地方,支持ramdisk并且需要根据文件系统设置内存的空间大小,大小以K为单位(需要是1024的整数倍)。

dcea6d1c557768d9fa7ed2f1b7321367.png

38424c34ba59a2a67672bb62bf476fb1.png

内核支持后就是制作文件系统了,需要执行以下几个步骤,获得文件、调整文件格式、挂载文件、填充数据、打包系统。

dd if=/dev/zero of=ramdisk bs=1M count=4096

mke2fs –F –v –m 0 ramdisk

mount -o loop ramdisk /mnt/

cp -arf * /mnt

umount/mnt

gzip –v9 ramdisk

最终得到ramdisk.gz文件这个就是我们需要的文件。

在使用的过程中会出现这种问题:

RAMDISK: Compressed image found at block 0

RAMDISK: incomplete write (2270 != 32768)

这说明设置的ram块不够大,修改内核配置即可。

如果对现有的ramdisk进行修改,比如找不到ttyAMA0这个设备总是无法进入shell,那可以解压ramdisk.gz并在dev目录下mknod ttyAMA0 c 204 64。

Ramdisk的解压方式为:

gunzip ramdisk.gz

完成修改后重新打包即可。目前这种方式只在虚拟机中使用,qemu-system-arm -M virt -m 256 -kernel ./zImage -initrd ./new.gz -nographic -append "root=/dev/ram0"。

如果要在实际得arm板卡上使用还需要针对ARM再次加工,使用如下命令:

mkimage -A arm -O linux -T ramdisk -C none -a 0x88080000 -n "ramdisk" -d ramdisk.gz ramdisk.img

最终将会有ramdisk.gz文件得到ramdisk.img文件,img文件就是可以用得文件系统了。

兴高采烈得拷贝到uboot内存里面,出现了如下问题

cfa8eb282630953ca06572ae28cddf55.png

百度也没有找到准确的答案,又仔细看了下错误信息,发现ramdisk加载得位置出现了问题,所以我调整了一下命令引导得位置,改为bootz 0x82000000 0x88080000 0x88000000发现顺利得引导起来了,以前得路子并没有错误!

5281905fdcb30bda9d23649db721d9a8.png

其中bootargs=console=ttyS0,115200n8 init=/linuxrc root=/dev/ram0 rw rootfstype=ext2

Ext4:

Ext文件系统是相对简单的操作方法,直接解压复制即可完成。

dd if=/dev/zero of=fs.ext4 bs=1M count=4096

mkfs.ext4 fs.ext4

mount -o loop ramdisk /mnt/

cp -arf * /mnt

umount/mnt

其实在实际使用中,直接分区后把文件复制或解压到相应的分区即可。

bootargs=console=ttyS0,115200n8 init=/linuxrc root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4

bootz 0x82000000 - 0x88000000

另外可通过dd的方式烧写文件系统,在使用的时候必须确定分区的大小,因为dd烧写的文件就是系统的大小,比如32G的硬盘,如果dd的文件系统大小定位100M那么最后烧写进去的空间就是100M。因此在使用的时候要分两个区,一个用来dd文件系统另一个用来存数据。如果只留一个分区,dd一个32G的文件系统,时间应该比较长。。。。。相比于直接复制进去,这样感觉不是很灵活,但也能固定文件在硬盘中的位置,不像cp那样没有规律的写,也算学习了新的方法吧。

bcda62cf7d27cb78167c1fdecfc5c980.png

Ubifs:

在uboot和kernel都要进行相应的支持配置:

fd97f5814d12e336b1e9d19722e05127.png

对于MT29F2G08 pagesize为2048B,block size为64*2048B=131072B,block count为2048

使用如下命令:

$ mkfs.ubifs -F -q -r /home/fs -m 2048 -e 126976 -c 2047 -o ubifs.img

参数简介:

-r 后面的目录表示要制作的问价系统的路径,里面包含了文件系统的内容

-m NAND最小的读写单元,一般为page size

-e 对于am335x的nand driver,为block size-2 x(page size)

-c 最大block数,为block count -1

对于ubifs.img进一步加工:

$ ubinize  -o ubi.img  -m 2048 -p 128KiB ubinize.cfg

参数简介:

-p block size

其中ubinize.cfg内容如下

[ubifs]

mode=ubi

image=ubifs.img

vol_id=0

vol_size=249MiB

vol_type=dynamic

vol_name=rootfs

vol_flags=autoresize

对于得到的ubi.img通过uboot命令nand write烧写到nand里面去。对启动参数进行如下设置:

setenv bootargs ‘console=ttyO0,115200n8 rootwait rw ubi.mtd=7,2048 rootfstype=ubifs root=ubi0:rootfs init=/linuxrc’

bootz 0x82000000 - 0x88000000

另外bootargs的参数也可以在设备树里面增加节点并添加内容,省去每次uboot手工设置,uboot的参数在设置的时候可以多看看uboot本身的默认设置,可以找到一些正确的设置方法。

参考文档:

https://www.cnblogs.com/lidabo/p/5304357.html

https://blog.csdn.net/sssddd12345_/article/details/106336978

Ubifs制作和启动.pdf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值