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时用到的数据没有被破坏。而直到使用到被破坏数据时才出现这种错误。

  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/mightycode/p/7561623.html
Copyright © 2011-2022 走看看