• 嵌入系统squashfs挂载常见问题总结


    由于squahsfs的一些优点,嵌入系统常常直接使用squashfs作为initrd挂载到/dev/ram,作为rootfs。这里对常见的一些问题进行一些分析。

    1. kernel启动出现错误

    RAMDISK: Couldn't find valid RAM disk image starting at 0.

    kernel没有找到文件系统,不能mount到/dev/ram。这不管是squanshfs,还是其他的文件系统作为rootfs,都可能出现。一般原因是bootloader指定载入rootfs的内存地址和kernel的命令行initrd参数指定的内存地址不符。这样kernel找不到superblock,报出这样的错误。

     

    2. kernel已经找到文件系统,但在挂载是出现错误

    squashfs: SQUASHFS error: unable to read xattr id index table

    一个squashfs文件系统最多由九个部分组成,按字节对齐方式组合。如下所示:

      ---------------
     |  superblock  |
     |---------------|
     |  compression  |
     |    options    |
     |---------------|
     |  datablocks   |
     |  & fragments  |
     |---------------|
     |  inode table |
     |---------------|
     |   directory |
     |     table     |
     |---------------|
     |   fragment |
     |    table      |
     |---------------|
     |    export     |
     |    table      |
     |---------------|
     |    uid/gid |
     |  lookup table |
     |---------------|
     |     xattr     |
     |     table |
      ---------------

    可以看到xattr(扩展属性)表处于整个文件系统的最末尾。出现错误无法读取扩展属性表一般是因为载入的initrd不完整。可能由于bootloader的load指令引起。比如load指令的-max参数不对,或者-max参数有缺省值,缺省值不够大。如果不显式指定的话,可能导致读入的文件不完整。所以最好指定,比如

    load -raw -nz -addr=0x00680000 -max=100000000 usbdisk0:rootfs.squashfs

    再一个也有可能是kernel的initrd的大小参数不正确。第一个参数指定initrd在内存中的起始地址,第二个参数指定initrd的大小,比如

    initrd=0x00680000,100000000

     

    3. 挂载时出现

    SQUASHFS error: zlib decompression failed, data probably corrupt
    SQUASHFS error: squashfs_read_data failed to read block 0x97eb83
    SQUASHFS error: Unable to read fragment cache entry [97eb83]

    根据squashfs使用的压缩方法不用,这里可能出现zlib,xz或者其他的压缩方式解压缩失败。出现这种错误一般是因为文件系统数据被破坏了。有可能是因为保存squashfs的介质,比如flash损坏了,自然载入的数据不正确。还有一种情况是,bootloader用load命令把squashfs载入内存时选择的地址不对。squashfs文件系统载入的内存不能和bootloader自身使用的内存地址范围有交叉。还有后面载入内核,以及其他一些操作,比如载入dtb,都有可覆盖squashfs载入的数据导致出现类似的错误。有时候这种错误很隐蔽,系统启动挂载时不出现任何错误,而在系统运行中某个时候才出现。因为你不知道squashfs哪一部分数据被破坏,很可能mount时用到的数据没有被破坏。而直到使用到被破坏数据时才出现这种错误。

  • 相关阅读:
    HFSS射频仿真设计实例大全
    微泡发生器流体动力学机理及其仿真与应用
    新版电工电子技能实训教程
    LED照明产品质量控制与国际认证
    3G核心网技术揭秘——CS,PS,IMS
    如何开家汽车配件店
    建筑钢结构焊接工程应用技术及案例
    复杂地质条件下深井超深井钻井技术
    Java基础10 接口的继承与抽象类
    eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能(同时解决自动补全变量名的问题)?
  • 原文地址:https://www.cnblogs.com/mightycode/p/7561623.html
Copyright © 2020-2023  润新知