yaffs2格式解压查看里面的文件_2K_4bit

                                                                                                                                                          ------2020-5-1

                                                                                                                                                          ------WaterDroplet
初始的想法是把Hi3536制作出来的《*2k_4bit.yaffs2》yaffs2格式的文件系统解压出来,
我的nandflash芯片型号是:KF2G08U0C 页大小:2K oob:64Bytes
然后搜资料,试了很多,比如在windows上使用的unyaffs工具,发现是不能用的,解压不出来,
开始以为使用的命令不正确,试了很久还是有问题。然后在ubuntu_1604_64bit上使用apt-get install unyaffs
因为只能安装这一个。安装很顺利。但使用的时候还是有问题。然后尝试各种命令参数:
wd:work$ unyaffs --help //这是它的帮助文档。
/@#######################################################################
unyaffs: invalid option -- '-'
unyaffs V0.9.6 - extract files from a YAFFS2 file system image.

Usage: unyaffs [options] []

Options:
    -d               detection of flash layout, no extraction
    -b               spare contains bad block information
    -c  set chunk size in KByte (default: autodetect, max: 16)
                                     只能猜测这个指的是每页的大小。我的是2K
    -s  set spare size in Byte  (default: autodetect, max: 512)
                                     猜测可能是OOB,我的是64.
    -t               list image contents
    -v               verbose output
    -V               print version
########################################################################@/
然后我不理解就是我用海思的mkyaffs2image610编译出来的yaffs2文件的4bit是什么意思?
只能猜测着用了。
wd:work$ unyaffs rootfs_hi3536_2k_4bit.yaffs2 ./rootfs //先使用的这个命令,后面是要解压的文件
                                                                                       //跟着要解压到的目录,打印结果如下:
/@#######################################################################
Can't determine flash layout, perhaps not a yaffs2 image 怎么可能不是,我都能使用的
########################################################################@/
wd:work$ unyaffs -c 2 -s 64 rootfs_hi3536_2k_4bit.yaffs2 ./rootfs //然后再尝试用这个,根据刚才参数的解释使用的
                                                                                                       //打印结果:
/@#######################################################################
Warning: Invalid header at chunk #1, skipping...
Broken image file  怎么可能是坏的
########################################################################@/
wd:work$ unyaffs -c 2 -s 4 rootfs_hi3536_2k_4bit.yaffs2 ./rootfs //然后又用了这个,4bit嘛,我看注释上有个4bytes,不知道试试
/@#######################################################################
Illegal type 1397966425 in object 0 () 非法?
########################################################################@/
wd:work$ unyaffs -c 2 -s 16 rootfs_hi3536_2k_4bit.yaffs2 ./rootfs //还是不行,又用了这个,为啥16,2^4次方嘛。纯属胡来了。
                                                                                                                                    //这叫不懂机器瞎gao油。结果是肯定的喽
/@#######################################################################
Warning: Invalid header at chunk #1, skipping...
Warning: Invalid header at chunk #13, skipping...
Warning: Invalid header at chunk #14, skipping...
Warning: Invalid header at chunk #15, skipping...
Warning: Invalid header at chunk #16, skipping...
Warning: Invalid header at chunk #17, skipping...
Warning: Invalid header at chunk #18, skipping...
Warning: Invalid header at chunk #19, skipping...
Warning: Invalid header at chunk #20, skipping...
Warning: Invalid header at chunk #23, skipping...
Warning: Invalid header at chunk #34, skipping...
Warning: Invalid header at chunk #36, skipping...
Warning: Invalid header at chunk #37, skipping...
Warning: Invalid header at chunk #38, skipping...
Warning: Invalid header at chunk #39, skipping...
Illegal type -1 in object 0 后面还一堆乱码。
########################################################################@/
接着又尝试了很多,查了很多,折腾了半宿,也没能解决这个问题。睡觉时手机搜索了下,大概是unyaffs版本不对,那个已经不适应这个大个nandflash的时代了。这个unyaffs工具对应的是mkyaffs2image做出来的文件系统的。这个工具做出来的文件系统已经不能用于我们的内核了。会启动不起来。然后有了什么mkyaffs2image-128M,适合大于128M的nand。然后github上有unyaffs2utils这个工具可以用。
第二天抱着试试看的态度,这就是小白的痛苦,永远不去想研究研究yaffs2的组成,事实上我也看了看,没看懂啦。比较深奥毕竟不是小白简单浏览就能看懂的。有兴趣的可以看看
https://blog.csdn.net/weixin_42523774/article/details/104024617 //这个就是分析源码的。有能力的自己看吧。我主要把精力放在解压我的yafss2上。
第二天一早起来我就赶紧到github中文网站上搜索unyaffs2utils,还真有很多。(目前还没有创建账户,小白了,还用不到那么强大的工具,而且我还不太会用),找了一个最新的版本下载下来。《yaffs2utils-master.zip》就是这个。放到我的ubuntu下。
wd:work$ unzip -d ./ yaffs2utils-master.zip //解压到当前目录,我常用的就是这个,那么多命令也懒得记。需要的就是-d选项
wd:work$ cd yaffs2utils-master/                 //然后进到这个目录
wd:yaffs2utils-master$ make && make install //编译 安装。其实编译出来就在当前目录了。也可以直接用。编译出好几个程序。                                                                           //我只用的就这个unyaffs2这个工具。
wd:work$ unyaffs2 --help                               //查看一下帮助
/@#######################################################################
unyaffs2 0.2.9_20120815 - A utility to extract the yaffs2 image

Usage: unyaffs2 [-h|--help] [-e|--endian] [-v|--verbose]
                [-p|--pagesize pagesize] [-s|--sparesize sparesize]
                [-o|--oobimg oobimage] [-f|--fileset file] [--yaffs-ecclayout]
                imgfile dirname

Options :
  -h                 display this help message and exit.
  -e                 convert endian differed from local machine.
  -v                 verbose details instead of progress bar.
  -p pagesize        page size of target device.  默认是2048页。应该和我的一样
                     (512|2048(default)|4096|(8192|16384) bytes)
  -s sparesize       spare size of target device. 默认每页32字节?spare就是那个oob吧?但我用默认的也能用啊?
                     (default: pagesize/32 bytes; max: pagesize)
  -o oobimage        load external oob image file.
  -f file            extract the specified file selection.
  --yaffs-ecclayout  use yaffs oob scheme instead of the Linux MTD default.
########################################################################@/
wd:work$ unyaffs2 rootfs_hi3536_2k_4bit.yaffs2 ./rootfs //直接用一下,没想到成功了
/@#######################################################################这一晚上的折腾啊。没睡好觉。
unyaffs2 0.2.9_20120815: image extracting tool for YAFFS2.
warning: non-root users.

scanning image 'rootfs_hi3536_2k_4bit.yaffs2'... [done]
scanning complete, total objects: 552

building fs tree ... [done]
building complete, total objects: 552

extracting image into './rootfs'
[================================================================] 552/552 100%

modify files attributes... [done]

operation complete,
files were extracted into './rootfs'.
########################################################################@/
wd:work$ cd rootfs && ls //看一下,全有,成功了。
/@#######################################################################
bin   etc    init     lost+found     mnt      proc  share  usr
boot  hitoe  lib      mkimg.rootfs   nfsroot  root  sys    var
dev   home   linuxrc  mknod_console  opt      sbin  tmp
########################################################################@/
wd:work$ unyaffs2 -p 2048 -s 64 rootfs_hi3536_2k_4bit.yaffs2 ./rootfs //然后又试了下这个命令
        //可以用,但有错误。不知道原因。不管了。后来找到原因了,因为我没把这个.svn删除干净。命令没错啦。
/@#######################################################################
unyaffs2 0.2.9_20120815: image extracting tool for YAFFS2.
warning: non-root users.

scanning image 'rootfs_hi3536_2k_4bit.yaffs2'... [done]
scanning complete, total objects: 552

building fs tree ... [done]
building complete, total objects: 552

extracting image into './rootfs'
[================================================                ] 414/552  75%
object 670: [????] '.svn/dir-prop-base' (FAILED).
[================================================                ] 419/552  75%
object 676: [????] '.svn/entries' (FAILED).
object 677: [????] '.svn/all-wcprops' (FAILED).
[=============================================================== ] 549/552  99%

modify files attributes... [*]

operation incomplete,
files contents may be broken!!!
########################################################################@/
然后学了一下zip的命令。不能直接压缩,不然会把符号链接全变成实体文件。压缩出来好几百兆,比我的源文件还大。
wd:work$ zip -ry ./rootfs.zip rootfs //用这个压缩目录。-r应该是递归,y是保持连接属性吧。和cp似的,要加-d。保持链接属性。有机会就学习命令行喽。然后...等待打印完信息。
wd:work$ du -h rootfs  //看看压缩前的大小。-h以人类好理解的方式。
/@#######################################################################
8.0K    rootfs/root
.....省略一堆文件
24M    rootfs
########################################################################@/
wd:work$ du -h rootfs.zip     //再看一看压缩好的有多大。压缩比例还可以咯,可以拷贝到win7下解压看了。
/@#######################################################################
8.4M    rootfs.zip
########################################################################@/
看了github真是强大啊。记得当初360的wifi3代的驱动就是在那找到的。可以成功编译使用。之前试了很多别的网站的都不行。
包括这个CSDN。
难怪有人说,遇到项目不要急,github找一找。。。
我把工具传到我的CSDN里了。有需要的下载一下吧。https://download.csdn.net/download/shamo88/12378734

                                                                                    写作不易,如有帮助欢迎打赏。

你可能感兴趣的:(Hi3536,Linux,系统,ARM嵌入式)