zynq 7000系列三个命令的简单介绍

描述

前言

由于zynq 7000系列 自带的文件系统(ramdisk)大小为16M的,而我现在使用的开发板中,除去嵌入式linux系统所需要的存储空间后,剩余的空间只有4M多了。当在开发过程中移植一些库或者程序到文件系统,16M的文件系统容量更显的相形见绌了。所以给文件系统扩容是给zynq 7000 系列开发新功能的重要环节。

目前我在我的zynq 开发版上测试,成功将根文件系统扩容到336M,至于为什么只能扩容到336M,暂时还没找到相关的资料(我的zynq 开发版硬件ddr3是4G,内存是512M),如果有知道原因的,恳请留言评论,在此感激不尽。

根文件系统ramdisk扩容分为三个步骤(以扩容24M为例):

制作存储空间为24M的根文件系统(ramdisk.image.gz)

拷贝原有的linux文件系统中的所有文件

制作支持24M以上的linux内核文件(uImage)

制作存储空间为24M的根文件系统

制作存储空间为24M的根文件系统,使用到三个命令:

 

dd命令: 作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换
mke2fs命令:作用是将镜像文件制作成ext2格式的文件系统
tune2fs命令:作用是调整和查看ext2/ext3文件系统的文件系统参数
123

 

三个命令的简单介绍:

dd命令

 

 主要选项:
 
 if=file 输入文件名,默认为标准输入
 of=file 输出文件名,默认为标准输出
 ibs=bytes 一次读入bytes个字节(即一个块大小为bytes个字节)
 obs=bytes 一次写入bytes个字节
 bs=bytes 同时设置读和写的块大小为bytes
 cbs=bytes 一次转换bytes个字节
 skip=blocks 从输入文件开头跳过blocks个块后再开始复制
 seek=blocks 从输出文件开头跳过blocks个块后再开始复制
 count=blocks 仅仅拷贝blocks个块,块大小等于ibs指定的字节数
1234567891011

 

mke2fs命令:

 

 一般用法:
 
 mke2fs -F 设备 -L 标签名称 -m xx% -b 区块大小
 -b<区块大小> 指定区块大小,单位为字节。
 -c 检查是否有损坏的区块。
 -f<不连续区段大小> 指定不连续区段的大小,单位为字节。
 -F 不管指定的设备为何,强制执行mke2fs。
 -i<字节> 指定"字节/inode"的比例。
 -N 指定要建立的inode数目。
 -l<文件> 从指定的文件中,读取文件西中损坏区块的信息。
 -L<标签> 设置文件系统的标签名称。
 -m<百分比值> 指定给管理员保留区块的比例,预设为5%。
 -M 记录最后一次挂入的目录。
 -q 执行时不显示任何信息。
 -r 指定要建立的ext2文件系统版本。
 -R=<区块数> 设置磁盘阵列参数。
 -S 仅写入superblock与group descriptors,而不更改inode able inode
 bitmap以及block bitmap。
 -v 执行时显示详细信息。
 -V 显示版本信息。
1234567891011121314151617181920

 

tune2fs命令:

 

 常用选项说明:
  
 -l 查看文件系统信息
 -c max-mount-counts 设置强制自检的挂载次数,如果开启,每挂载一次mount conut就会加1,超过次数就会强制自检
 -i interval-between-checks[d|m|w] 设置强制自检的时间间隔[d天m月w周]
 -m reserved-blocks-percentage 保留块的百分比
 -j 将ext2文件系统转换为ext3类型的文件系统
 -L volume-label 类似e2label的功能,可以修改文件系统的标签
 -r reserved-blocks-count 调整系统保留空间
 -o [^]mount-option[,...] Set or clear the indicated default mount options in the filesystem. 设置或清除默认挂载的文件系统选项
12345678910

 

好了,啰嗦了那么多,现在来看制作存储空间为24M的根文件系统的详细步骤。

1. 制作 ramdisk 文件系统

1)建立文件系统映象,设置文件系统大小为24576/1024 = 24M :

 

Host# dd if=/dev/zero of=ramdisk.image bs=1k count=24576
1

 

2)格式化为 ext2 文件系统:

 

Host# mke2fs -F ramdisk.image -L“24M volume” -b 1024 -m 0
1

 

3)调整和查看 ext2/ext3 文件系统的文件系统参数:

 

Host# tune2fs ramdisk.image -i 0
1

 

4)修改权限:

 

Host# chmod a+rwx ramdisk.image
1

 

5)压缩镜像文件,生成 ramdisk.image.gz :

 

Host# gzip -v9 ramdisk.image
1

 

拷贝原有的linux文件系统中的所有文件

扩容的根文件系统(ramdisk.image.gz)已经生成,但刚才生成的跟文件系统里什么东西都没有,而能运行linux系统的根文件系统,需要很多系统文件,直接拷贝原有的linux文件系统中的所有文件,到这个新生成的根文件系统中,就能像以前运行linux系统。

1)提取 initrd 镜像文件:

 

Host# gunzip ramdisk.image.gz
1

 

2)挂载 initrd 镜像文件:

 

Host# chmod u+rwx ramdisk.image 
Host# mkdir tmp_mnt/ 
Host# mount -o loop ramdisk.image tmp_mnt/ 
123

 

3)提取 原有的initrd 镜像文件:

 

Host# gunzip ramdisk.image.gz
1

 

4)挂载 原有的initrd 镜像文件:新建一个目录src_ramdisk,将原有的根文件系统放如这个目录下。

 

Host# cd src_ramdisk
Host# chmod u+rwx ramdisk.image 
Host# mkdir tmp_mnt/ 
Host# mount -o loop ramdisk.image tmp_mnt/ 
Host# cd tmp_mnt/ 
12345

 

5)将原来的文件系统中的所有文件复制到tmp_mnt中:

 

Host# cp  -ri  *  ../tmp_mnt
1

 

6)压缩ramdisk.image,并生成 uramdisk.image

 

Host# cd ..
Host# gzip ramdisk.image.gz 
Host# mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz
123

 

制作支持24M以上的linux内核文件

我们将文件系统扩容后,在启动过程中可能会报错,报错的原因是在内核配置里预留的启动内存空间不够引起的,所以需要改内核的配置,从新编译,内核配置要改的地方如下:

 

# make ARCH=arm menuconfig
1

 

嵌入式嵌入式嵌入式

保存设置后,编译生成uImage:

 

Host# make -j 4 ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0X8000 uImage
1

 

验证

将修改好的uImage 和ramdisk 复制到sd卡中,并加载进入系统。

使用 df -h 命令查看空间使用情况。

 

Host# df -h
1
嵌入式
  
      审核编辑:彭静
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分