最近在优化项目的时候发现了两个文件系统的问题。
1 需要让驱动自动挂载节点,不要手动的去mknod,查了一些资料后得出可以使用udev工具,所幸ltib里面有这个工具包,安装上以后可以自动添加节点了,但是发现ftp连接不上了,每次都报错说ftp日志文件创建不了。
这时我发现,使用了udev后,不光有这个问题,整个ramdisk中不可以创建文件或文件夹了,例如使用mkdir 命令后会报错说磁盘空间满,于是我使用df命令查看:
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 24463 13284 9941 57% /
才使用57%。
在网上查了半天才逐渐的弄明白,由于使用了udev,使得在/dev文件夹下面产生了大量的以前不会生成的节点,使得ramdisk的nodes数用完了。这里mkdir报的磁盘空间不够,指的是nodes数。
于是查看ltib的制作ramdisk的脚本,发现定义nodes数的地方:/bin/ltibutils.pm中一句:
my $inodes = $fs_count + 400;
这里在计算了整个文件系统所需的nodes数的基础上还预留了400个节点,将此改成:
my $inodes = $fs_count + 1700;
预留1700个后,编译,使用没有出现上面的错误。
2 在将ramdisk做大,或者是添加了多个映射大块物理地址的驱动后会报错:attempt to access beyond end of device
还是在网上查了后,得知这是ramdisk_size的问题。
在使用ltib制作了ramdisk后,会有打印提示:
Your ramdisk exceeds the old default size of 4096k, you may need to
set the command line argument for ramdisk_size in your bootloader
allowing 10% free this gives 27236k . For instance, for u-boot:
setenv bootargs root=/dev/ram rw ramdisk_size=27236
怪我一直没有注意这里,randisk中文件大小是大约13M,预留空间是10M,在没有压缩之前总共是大约23M,这里ltib提示,超过了默认的ramdisk大小4M的时候就要修改ramdisk的上限值,并预留一定的空间,23M的大小,应该在uboot的环境变量中把表示ramdisk上限值的ramdisk_size值设成大约27M。
修改了此值后,启动系统,没有再报错。