最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

[ext3已成功,ext4不成功]如何在buildroot中添加支持去制作ext3和ext4类型的根文件系统rootfs镜像文件

Buildroot crifan 3972浏览 0评论

[ext3已验证]如何在buildroot中添加支持去制作ext3和ext4类型的根文件系统rootfs镜像文件

最近因需要,折腾了在buildroot下面,如何添加支持制作出ext2类型的rootfs,
其实就是在make menuconfig中,将ext2选上,然后make即可,就会去自动下载
genext2fs这个工具,通过这个工具,根据当前已经存在的rootfs对应的文件,
自动制作出ext2的rootfs的镜像文件arm.rootfs.ext2(我的是ARM的交叉编译环境)

然后,又想制作ext3的rootfs,
很自然地联想到,是否可以用这个genext2fs去生成ext3的rootfs,
找了下资料,好像没找到,以为不支持呢。

最后,终于大概搞清楚如何制作ext3的rootfs了,甚至应该ext4的rootfs,也可以的。
记录如下,以待验证:

【buildroot下制作ext3的rootfs镜像文件】
其实,也是很简单,关键是知道用什么工具。。。
就是在原先制作ext2的基础上,再用个工具转换一下即可:
1.默认的buildroot中,制作ext2的rootfs文件系统镜像,是类似于如下的命令:
IMAGE_CMD_ext2 = "genext2fs -b ${IMAGE_ROOTFS_SIZE}
-d ${IMAGE_ROOTFS}
${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext2
${EXTRA_IMAGECMD}"

2.而想要得到ext3的rootfs,只需要再多加一个tune2fs即可:
IMAGE_CMD_ext3 = "genext2fs -b ${IMAGE_ROOTFS_SIZE}
-d ${IMAGE_ROOTFS}
${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3
${EXTRA_IMAGECMD};
tune2fs -j ${DEPLOY_DIR_IMAGE}/tmp.gz/${IMAGE_NAME}.rootfs.ext3"

由于tune2fs,buildroot已经有了,即使没有,自己去下载个源码自己编译一个。
然后,自己再buildroot中加一下对应命令即可搞定。
另外,附录摘录里面,也有对应的,关于压缩版本的rootfs,比如用gzip压缩的,是如何制作的,
感兴趣自己去看吧。

已实现了的ext3:

1.在buildroot/target/ext2/ext2root.mk中添加如下代码:

……..

ifneq ($(EXT2_ROOTFS_COMPRESSOR),)
EXT2_TARGET := $(EXT2_BASE).$(EXT2_ROOTFS_COMPRESSOR_EXT)
else
EXT2_TARGET := $(EXT2_BASE)
endif

ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT3)),y)
EXT3_TARGET := $(subst ext2,ext3,$(EXT2_TARGET))
endif

……..

ext2root: $(EXT2_TARGET)
        @ls -l $(EXT2_TARGET)
ifneq ($(EXT2_COPYTO),)
        @cp -f $(EXT2_TARGET) $(EXT2_COPYTO)
endif

ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT3)),y)
        @cp -a $(EXT2_TARGET) $(EXT3_TARGET)
        @tune2fs -j $(EXT3_TARGET)
        @e2fsck -p $(EXT3_TARGET)
        @ls -l $(EXT3_TARGET)
endif

ext2root-source: $(DL_DIR)/$(GENEXT2_SOURCE)

……..

作用是在ext2同文件夹下,生成ext3的rootfs。

2.同时,更新config:

在buildroot/target/ext2/Config.in中添加如下代码:

config BR2_TARGET_ROOTFS_EXT3
        bool "generate ext3 root filesystem"
        depends on BR2_TARGET_ROOTFS_EXT2
        default y
        help
          generate the ext3 filesystem or not.

作用是可以配置是否生成ext3的rootfs。

最后make即可同时生成ext2和ext3的rootfs。

【buildroot下制作ext4的rootfs镜像文件】
总的说,就是在原先ext2/ext3的基础上,给上对应ext4支持的那些参数,调用tune2fs转换即可。
此处说一下大概步骤(待验证):
tune2fs -O extents,uninit_bg,dir_index 设备名或文件系统镜像名
关于参数具体含义,最好还是看英文的man:
很详细的TUNE2FS手册
http://bbs.qxntc.edu.cn/cgi-bin/cgiman?8+tune2fs
转完后,根据手册说明,如果-O参数后面包含sparse_super和filetype,
就还要用e2fsck再去检查一遍,以便保持文件系统完整性:
e2fsck 设备名或文件系统镜像名
其中,e2fsck这个工具,我在之前下载源码编译安装e2fsprogs后,就会有这个工具了。
e2fsprogs源码参见:
[源码下载]mkfs.ext2的源码==mk2efs的源码 == e2fsprogs的源码
http://hi.baidu.com/serial_story/blog/item/926aeb3fbfccbbc87c1e7120.html

更具体的方法解释,参考附录中那位:
使用tune2fs将ext3转换为ext4
http://www.linuxhobby.com/2009/06/tune2fs-ext3-convert-ext4/

【经如下检验,制作ext4不成功】

在Config.in中添加如下代码:

config BR2_TARGET_ROOTFS_EXT4
        bool "generate ext4 root filesystem"
        depends on BR2_TARGET_ROOTFS_EXT2 && BR2_TARGET_ROOTFS_EXT3
        default y
        help
          generate the ext4 filesystem or not. must generate ext3 before this if define this.

在ext2root.mk中,添加如下代码:

。。。

ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT4)),y)
EXT4_TARGET := $(subst ext3,ext4,$(EXT3_TARGET))
endif

。。。。。

ifeq ($(strip $(BR2_TARGET_ROOTFS_EXT4)),y)
        @cp -a $(EXT3_TARGET) $(EXT4_TARGET)
        @tune2fs -O extents,uninit_bg,dir_index $(EXT4_TARGET)
        @ls -l $(EXT4_TARGET)
        @e2fsck -fpDC0 $(EXT4_TARGET)
        @ls -l $(EXT4_TARGET)
endif

。。。

但是,最后对于ext4,make出错:

tune2fs 1.41.1 (01-Sep-2008)

Please run e2fsck on the filesystem.

-rwxrwxrwx 1 buildroot users 57217024 2009-10-16 12:44 /root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4
/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4: Group descriptor 0 checksum is invalid. FIXED.
/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4: Group descriptor 1 checksum is invalid. FIXED.
/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4: Group descriptor 2 checksum is invalid. FIXED.
/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4: Group descriptor 3 checksum is invalid. FIXED.
/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4: Group descriptor 4 checksum is invalid. FIXED.
/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4: Group descriptor 5 checksum is invalid. FIXED.
/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4: Group descriptor 6 checksum is invalid. FIXED.
/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4: Adding dirhash hint to filesystem.

/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4:                                                                          /lost+found not found. CREATED.
/root/buildroot/buildroot/binaries/uclibc/rootfs.arm-.ext4: 1926/2352 files (0.5% non-contiguous), 41430/55876 blocks
make: *** [ext4root] Error 1

由于make出错,所以自己另外单独尝试了去通过ext3制作ext4,结果和上面输入一样,根据输入看起来好像没什么问题:

[root@linux-41lh buildroot]$>cp binaries/uclibc/rootfs.arm-.ext3 binaries/uclibc/rootfs.arm-.ext4
[root@linux-41lh buildroot]$>tune2fs -O extents,uninit_bg,dir_index binaries/uclibc/rootfs.arm-.ext4
tune2fs 1.41.1 (01-Sep-2008)

Please run e2fsck on the filesystem.

[root@linux-41lh buildroot]$>e2fsck -fpDC0 binaries/uclibc/rootfs.arm-.ext4
binaries/uclibc/rootfs.arm-.ext4: Group descriptor 0 checksum is invalid. FIXED.
binaries/uclibc/rootfs.arm-.ext4: Group descriptor 1 checksum is invalid. FIXED.
binaries/uclibc/rootfs.arm-.ext4: Group descriptor 2 checksum is invalid. FIXED.
binaries/uclibc/rootfs.arm-.ext4: Group descriptor 3 checksum is invalid. FIXED.
binaries/uclibc/rootfs.arm-.ext4: Group descriptor 4 checksum is invalid. FIXED.
binaries/uclibc/rootfs.arm-.ext4: Group descriptor 5 checksum is invalid. FIXED.
binaries/uclibc/rootfs.arm-.ext4: Group descriptor 6 checksum is invalid. FIXED.
binaries/uclibc/rootfs.arm-.ext4: Adding dirhash hint to filesystem.

/lost+found not found. CREATED.:                                                                                
binaries/uclibc/rootfs.arm-.ext4: 1926/2352 files (0.5% non-contiguous), 41430/55876 blocks

但是,不知道为何,这些命令放到make里面,却返回错误,使得无法继续make。

有谁知道的,告诉一下:[email protected]。谢谢。

对于这样做出来的ext4,查看了一下,和ext3/ext2,都一样大小,觉得很奇怪:

[root@linux-41lh buildroot]$>ls binaries/uclibc/rootfs.arm-.* -l
-rwxrwxrwx 1 buildroot users 57217024 2009-10-16 12:59 binaries/uclibc/rootfs.arm-.ext2
-rwxrwxrwx 1 buildroot users 57217024 2009-10-16 12:59 binaries/uclibc/rootfs.arm-.ext3
-rwxrwxrwx 1 buildroot users 57217024 2009-10-16 13:06 binaries/uclibc/rootfs.arm-.ext4

最后,通过烧写到板子上,验证结果是,kernel无法mount识别这样做出来的ext4.而对于原来的ext2和后来制作出来的ext3,是可以的。

也就是,这样做出来的ext4,好像还是有问题的,记录于此,以待后解。。。

【参考资料】
1.Image types
http://docs.openembedded.org/usermanual/html/image_types.html

2.[oe] [PATCH] Auto resizing ext2/ext3 images (from Poky)
http://projects.linuxtogo.org/pipermail/openembedded-devel/2008-December/007202.html

3.tune2fs的几个选项
http://linux.bloghome.cn/posts/45002.html

4.genext2fs
http://www.linuxcertif.com/man/8/genext2fs/

5.使用tune2fs将ext3转换为ext4
http://www.linuxhobby.com/2009/06/tune2fs-ext3-convert-ext4/

6.【推荐】man TUNE2FS
http://bbs.qxntc.edu.cn/cgi-bin/cgiman?8+tune2fs

7.Ext3详解
http://wiki.donews.com/index.php/Ext3

8.【推荐】Ext4 Howto
http://ext4.wiki.kernel.org/index.php/Ext4_Howto

9.[转]Ext4,Ext3的特点和区别
http://hi.baidu.com/serial_story/blog/item/f8d36360ff4006d58cb10db1.html

转载请注明:在路上 » [ext3已成功,ext4不成功]如何在buildroot中添加支持去制作ext3和ext4类型的根文件系统rootfs镜像文件

与本文相关的文章

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.174 seconds, using 22.98MB memory