前言
由于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=245761
2)格式化为 ext2 文件系统:
host# mke2fs -f ramdisk.image -l“24m volume” -b 1024 -m 01
3)调整和查看 ext2/ext3 文件系统的文件系统参数:
host# tune2fs ramdisk.image -i 01
4)修改权限:
host# chmod a+rwx ramdisk.image1
5)压缩镜像文件,生成 ramdisk.image.gz :
host# gzip -v9 ramdisk.image1
拷贝原有的linux文件系统中的所有文件
扩容的根文件系统(ramdisk.image.gz)已经生成,但刚才生成的跟文件系统里什么东西都没有,而能运行linux系统的根文件系统,需要很多系统文件,直接拷贝原有的linux文件系统中的所有文件,到这个新生成的根文件系统中,就能像以前运行linux系统。
1)提取 initrd 镜像文件:
host# gunzip ramdisk.image.gz1
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.gz1
4)挂载 原有的initrd 镜像文件:新建一个目录src_ramdisk,将原有的根文件系统放如这个目录下。
host# cd src_ramdiskhost# 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_mnt1
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.gz123
制作支持24m以上的linux内核文件
我们将文件系统扩容后,在启动过程中可能会报错,报错的原因是在内核配置里预留的启动内存空间不够引起的,所以需要改内核的配置,从新编译,内核配置要改的地方如下:
# make arch=arm menuconfig1
保存设置后,编译生成uimage:
host# make -j 4 arch=arm cross_compile=arm-xilinx-linux-gnueabi- uimage_loadaddr=0x8000 uimage1
验证
将修改好的uimage 和ramdisk 复制到sd卡中,并加载进入系统。
使用 df -h 命令查看空间使用情况。
host# df -h1
CPU用硅不用锗 原因有哪些?
比特币所采用的最长链规则的优势与劣势分析
土壤水分测定仪在农业领域的应用
使用可计算SSD加速云原生数据库
Firefly(流萤): 中文对话式大语言模型
zynq 7000系列三个命令的简单介绍
热敏电阻的原理及和阻值的关系_如何利用线性 ADC 以数字形式捕获热敏电阻的非线性行为
如何有效管理高频变压器的散热和温度呢?
ABB工业机器人DSQC1030新I/O配置介绍
零跑汽车、耀宁新能源、科达利等角逐高工金球奖
关于Maxim MAX15090B/MAX15090C热插拔IC性能分析介绍
谈谈PCB设计与加工误差的那些事
2018年中国IC业“野蛮生长”下的思考
FPGA技术在微型投影仪中设计中的应用分析介绍
一个创业者看到的人工智能(AI)创业真正机会
红外线开关原理图(六款红外线开关原理图介绍)
骁龙665处理器跑分抢先看_性能强悍
介绍一个基于CLIP的zero-shot实例分割方法
基于OpenVINO在英特尔开发套件上实现眼部追踪
贸泽电子推出全新LoRaWAN技术资源网站