问题描述:zynq挂载ubi卷的时候,出现错误
zynq> ubimkvol /dev/ubi0 -n 0 -N uavde -s 35MiB
libubi: error!: cannot get information about "/dev/ubi0"
error 2 (No such file or directory)
ubimkvol: error!: error while probing "/dev/ubi0"
error 2 (No such file or directory)
解决方案:首先看字面意思,是没有找到/dev/ubi0的节点信息。
我们对ubi挂载的整个过程进行分析:
查看linux系统中有关mtd与ubi的接口:
Cat /proc/mtd :可以看到当前系统的各个mtd分区的情况
或者查看cat /proc/partitions,查看系统分区情况
Cat /sys/class/ubi/ubi0/* 当前系统的ubi情况
Ls /dev/* 查看设备节点
挂载ubi
Ubiformat /dev/mtduramdisk.image.gz1 格式化mtdblock1
Ubiattach /dev/ubi_ctrl -m 0 将mtdblock1与ubi建立链接,命令输出如下:
ubiattach /dev/ubi_ctrl -m 0 -d 0
系统自动将mtd0 关联到ubi0设备上,在/sys/class/ubi/目录下就可以找到ubi0这个虚拟设备的连接
zynq> ubiattach /dev/ubi_ctrl -m 0 -d 0
ubi0: default fastmap pool size: 20
ubi0: default fastmap WL pool size: 10
ubi0: attaching mtd0
ubi0: scanning is finished
ubi0: empty MTD device detected
ubi0: attached mtd0 (name "uavde", size 50 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 400, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 0, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 0/0, WL threshold: 4096, image sequence number: 1756202480
ubi0: available PEBs: 314, total reserved PEBs: 86, PEBs reserved for bad PEB handling: 80
ubi0: background thread "ubi_bgt0d" started, PID 833
UBI device number 0, total 400 LEBs (50790400 bytes, 48.4 MiB), available 314 LEBs (39870464 bytes, 38.0 MiB), LEB size 126976 bytes (124.0 KiB)
命令:ubimkvol /dev/ubi0 -n 0 -N uavde -s 35MiB 从ubi0设备上创建一个ubi卷,在/sys/class/ubi/下就会生成ubi0_0目录
整个挂载过程如下:
Ls /sys/class/ubi/ 可以看到该目录下增加了一个ubi0的子目录
Cat /sys/class/ubi/ubi0/dev 可以得到该ubi0设备的主次设备号, 如249:0
Cat /sys/class/ubi/ubi0/volumes_count 结果为0,表示该ubi上没有任何的volume
Ls /dev/ubi* 如果/dev中没有ubi0.那么可以手动创建 mknod /dev/ubi0 c 249 0
Ubimkvol /dev/ubi0 -s 100MiB -N uavde ,在ubi0上创建一个volume,
Ls /sys/class/ubi/ 可以看到该目录下增加一个ubi0_0的目录,代表ubi0上的第一个volume,
Cat /sys/class/ubi/ubi0_0/dev 可以得到该volume的主次设备号,249:1
Mount -t ubifs ubi0_0 /mnt 将ubi0_0挂载到本地目录/mnt上
Mdev的主要作用就是初始化对象和动态更新
Mdev会扫描/sys/class和/sys/block目录下的所有的类设备目录,如果在类设备目录中含有名为dev的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev目录下创建设备节点文件。
一般只在启动时才执行一次 mdev -s,就应该会自动创建设备节点,但是奇怪的是在建立ubi链接的时候,没有自动建立设备节点,只有重新执行一次mdev -s才可以正常建立设备节点。这个原因还有待查一查。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
长沙聚为科技有限公司
聚为电子,专注于ZYNQ领域,所有产品独立自主研发、自主创新,所有产品完全拥有自主知识产权,公司提供完整的嵌入式产品和整体解决方案,协助客户快速设计、开发并生产出高性能、高可靠性的嵌入式产品,能为客户提供从硬件到软件的整体解决方案,减少产品的开发风险和缩短产品的研发生产周期及进入市场周期。公司提供专业的ZYNQ技术服务,专注于嵌入式方案的定制开发。依托资深的ZYNQ技术及资源优势,为客户提供全方位的支持和服务。
网址:http://www.csjuwei.com/
电话:0731-82826518
电子邮件:[email protected]
手机号:18073164796 (微信同号)
QQ:1530182157
扫描聚为科技微信二维码详细咨询