最近负责将A公司一个比较稳定的代码分支移植到新平台上,新平台中包含了M公司和B公司的代码,这样的一个代码架构方便以后不同公司芯片方案的添加和开发。

在移植的过程中,编译成功后DUT上电,但是出现解压文件系统失败,串口信息:

0.760000] unlzma 632
[    0.760000] unlzma 634
[    0.764000] unlzma 632
[    0.768000] CPU 0 Unable to handle kernel paging request at virtual address c0101f38, epc == 800f02c8, ra == 800f0264
[    0.776000] Oops[#1]:
[    0.776000] Cpu 0
[    0.776000] $ 0   : 00000000 00000000 ffffff38 01000000
[    0.776000] $ 4   : ff0000e0 000000e0 ff000000 000019e3
[    0.776000] $ 8   : 802c0000 00000001 00000001 0000000a

跟进到出错的地方,是kernel中的lib\decompress_unlzma.c中函数unlzma出错,这个函数应该是解压squashfs中的文件。进一步分析原因,发现是制作文件系统使用的压缩方式不一样,在制作文件系统的命令中:

Creating 4.0 filesystem on ../board/model_qca_qca95xx/images/wpa8730v1/ap143-squashfs, block size 1048576.
[===========================================================================================================================================================================================================\] 581/581 100%
Exportable Squashfs 4.0 filesystem, data block size 1048576
        compressed data, compressed metadata, compressed fragments
        duplicates are removed
Filesystem size 3374.85 Kbytes (3.30 Mbytes)
        26.07% of uncompressed filesystem size (12947.50 Kbytes)
Inode table size 5519 bytes (5.39 Kbytes)
        20.41% of uncompressed inode table size (27037 bytes)
Directory table size 8304 bytes (8.11 Kbytes)
        46.53% of uncompressed directory table size (17845 bytes)
Number of duplicate files found 84
Number of inodes 823
Number of files 649
Number of fragments 12
Number of symbolic links  99
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 75
Number of ids (unique uids + gids) 1
Number of uids 1
        root (0)
Number of gids 1
        root (0)

从日志中看到,这里使用了squashfs默认的压缩方式gzib,而squashfs使用lzma压缩的话,信息:

/home/project/plc_platform/board/model_qca_qca95xx/build/../../../util/fakeroot /home/project/plc_platform/board/model_qca_qca95xx/build/../../../util/buildFS_LZ
Parallel mksquashfs: Using 2 processors
Creating 4.0 filesystem on /home/project/plc_platform/board/model_qca_qca95xx/build/../images/wpa8730v1/ap135-squashfs, block size 1048576.
[===========================================================================================================================================================================================================-] 581/581 100%
Exportable Squashfs 4.0 filesystem, lzma compressed, data block size 1048576
        compressed data, compressed metadata, compressed fragments
        duplicates are removed
Filesystem size 3374.96 Kbytes (3.30 Mbytes)
        26.07% of uncompressed filesystem size (12946.99 Kbytes)
Inode table size 5633 bytes (5.50 Kbytes)
        21.26% of uncompressed inode table size (26493 bytes)
Directory table size 8344 bytes (8.15 Kbytes)
        46.70% of uncompressed directory table size (17869 bytes)
Number of duplicate files found 16
Number of inodes 823
Number of files 581
Number of fragments 12
Number of symbolic links  99
Number of device nodes 68
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 75
Number of ids (unique uids + gids) 1

有明显的 lzma compressed标识。

而在kernel的配置中,指定了rootfs的文件系统类型:

CONFIG_CMDLINE="console=ttyS0,115200 root=01:00 rd_start=0x802d0000 rd_size=0x800000 init=/sbin/init mem=64m mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),6336k(rootfs),1408k(uImage),64k(config),64k(radiodata)"

所以导致kernel在解压文件系时使用了lzma的解压方式去解压一个gzib压缩的文件系统,出错。

另外一个挂载失败的现象:

[    0.704000] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[    0.712000] List of all partitions:
[    0.716000] 1f00             128 mtdblock0 (driver?)
[    0.720000] 1f01            1024 mtdblock1 (driver?)
[    0.724000] 1f02            6976 mtdblock2 (driver?)
[    0.728000] 1f03              64 mtdblock3 (driver?)
[    0.736000] No filesystem could mount root, tried:  squashfs
[    0.740000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,3)

原因是mtd分区参数中,文件系统是第2个分区(分区从0开始计算),如下:

brw-r--r--    1   31,   0 Mar 28  2016 mtdblock0
brw-r--r--    1   31,   1 Mar 28  2016 mtdblock1
brw-r--r--    1   31,   2 Mar 28  2016 mtdblock2

但是挂载的设备名号 是31:3,错误,应该是31:2.

解决方法:使用squashfs.lzma工具制作文件系统就可以了。

调试过程还有很多值得记录的地方,比如kernel的makefile文件,mtd驱动,升级文件的制作流程等,后续补充。

【Linux】【文件系统】squashfs文件系统挂载失败问题相关推荐

  1. linux开机磁盘检查挂载失败 ,导致无法进入系统

    1,输入root密码 2,df -h 检查是哪个文件没有挂载上. 3,fdisk -l 确认未挂载成功分区 4,umount /dev/sdb5(此处是未挂载成功的文件名称) 5, fsck -y / ...

  2. 31. Linux内核 - Squashfs文件系统的制作与使用

  3. 解压ubi文件_请问为什么AM3352 NAND FLASH UBI文件系统挂载失败?

    本帖最后由 一只耳朵怪 于 2018-6-21 11:08 编辑 各位好: 在NAND FLASH中写入ubi文件系统,内核启动时出现挂载失败. SDK:ti-processor-sdk-linux- ...

  4. imx6ull文件系统挂载失败

    imx6ull文件系统挂载失败(已解决) 系统启动后信息: devtmpfs: error mounting -2 Starting kernel ...Booting Linux on physic ...

  5. linux中怎么看挂载文件系统,Linux中如何查看已挂载的文件系统类型详解

    前言 如你所知,Linux 支持非常多的文件系统,例如 ext4.ext3.ext2.sysfs.securityfs.FAT16.FAT32.NTFS 等等,当前被使用最多的文件系统是 ext4.你 ...

  6. Linux - SquashFS文件系统

    在构建Linux系统时,有时会有一个文件rootfs.squashfs,这个是linux的文件系统文件.另外还可能会有一个xImage的kernel文件和u-boot.bin的uboot文件. === ...

  7. linux下squashfs使用方法,squashfs 文件系统简介

    squashfs 是一个高度压缩的只读文件系统,它可以将高达 2-3GB 的数据压缩到一个只有 700M 的文件中.如果你有使用到 Linux 的 Live CD ,那么你会看到 squashfs 的 ...

  8. linux中创建压缩文件系统----squashfs

    简介 squashfs程序能够创建出一种具有超高压缩率的只读型文件系统.它能够将2GB~3GB的数据压缩成一个700MB的文件.Linux LiveCD(或是LiveUSB)就是使用squashfs创 ...

  9. linux 挂载32T文件系统,linux Centos下磁盘分区及文件系统创建与挂载(示例代码)

    linux Centos下磁盘分区及文件系统创建与挂载 MBR(Master Boot Record)是传统的分区机制,应用于绝大多数使用BIOS的PC设备. 1.MBR支持32bit和64bit系统 ...

最新文章

  1. python处理多个excel文件-python多个excel文件合并成一个sheet
  2. ASP.NET WEBAPI设计(文摘)
  3. pptv手机端html,影视资源持续更新,PPTV手机化身看片神器
  4. Blackboard Fibonacci(CF-217B)
  5. LeetCode5. 最长回文子串
  6. 12. 星际争霸之php设计模式--模板模式
  7. MoFi 路由器10个后门还剩4个未修复
  8. 那些Python意想不到的对象
  9. C#中的Boolean类型
  10. matlab程序中中零内插在qdpsk调制中的作用,桂林电子科技大学通信原理思考题
  11. 李沐动手学深度学习V2-语义分割和Pascal VOC2012数据集加载代码实现
  12. MSP430的JTAG接口和BSW接口
  13. vue路由跳转总是跳转到首页,路由匹配不上
  14. [云原生]~云原生简介
  15. sci论文配色-生信论文可视化绘图配色[个人收集]
  16. 哪些蓝牙耳机适合打游戏?适合打游戏的低延迟蓝牙耳机排行
  17. 【最全】ISTQB- FL模拟题(含答案)
  18. ultraiso制作u盘启动盘教程图文详解纯净-U盘启动教程
  19. Forecasting (一):introduction
  20. eNSP配置防火墙进入Web界面

热门文章

  1. 计算机的配置的作用,电脑的配置
  2. 十进制转二进制定点小数MATLAB代码
  3. 嚇人的五篇鬼故事‥真的頗恐怖
  4. 如何做一名优秀的电教委员?
  5. 怎么将透明png图导入max后自动沿着轮廓给个厚度
  6. 服务器智能阵列,月亮雨小组的天地-HPE ProLiant Gen10 服务器智能阵列卡S100i SR Gen10 BIOS下开启阵列功能配置阵列并安装win2016系统...
  7. 脑成像坐标系: MNI + Talairach
  8. 汉语言文学自考本科难不难呀?
  9. [C++]输入三个整数x,y,z,请把这三个数由小到大输出
  10. 最近很烦很烦很烦。。。。。