zoukankan      html  css  js  c++  java
  • 嵌入系统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时用到的数据没有被破坏。而直到使用到被破坏数据时才出现这种错误。

  • 相关阅读:
    new JSONObject()报空指针异常
    转:修改Fckeditor 2.6 增加插入Mp3等多媒体文件功能
    执行更新操作时,timestamp类型的字段自动被更新为了系统当前日期
    读取某个文件的位置
    myeclipse配置注释
    为eclipse 的 hibernate 配置文件加提示
    hibernate3与hibernate4
    查看eclipse版本
    Eclipse编译没有class文件生成
    严重: Error loading WebappClassLoader context:
  • 原文地址:https://www.cnblogs.com/mightycode/p/7561623.html
Copyright © 2011-2022 走看看