[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。

有谁知道的,告诉一下:green-waste@163.com。谢谢。

对于这样做出来的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镜像文件

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

  1. wordpress 背景_如何在WordPress中添加全屏背景图片

    wordpress 背景 Full screen background image seems to be a new design trend that is becoming fashionabl ...

  2. 如何在Lyx中添加参考文献,以及生成参考文献目录

    如何在Lyx中添加参考文献,以及生成参考文献目录 首先,创建一个记事本txt文件 在IEEE上或者百度学术上搜索你要添加的文献, 点击引用,下载BibTex,将你要引用的所有文献的BibTex复制到新 ...

  3. 如何在VSCode中添加Python解释器并安装Python库

    如何在VSCode中添加Python解释器并安装Python库 作者介绍 一. 安装VScode编辑器 二. 安装Python解释器 三. 在VScode中添加Python解释器 四. 创建项目并在V ...

  4. 如何在WordPress中添加抵押贷款计算器(逐步操作)

    Recently one of our readers asked about adding a mortgage calculator in WordPress. 最近,我们的一位读者问有关在Wor ...

  5. trello 删除看板_如何在WordPress中添加类似于Trello的看板

    trello 删除看板 Do you want to add a Trello-like Kanban board to your WordPress website? Keeping track o ...

  6. 如何在VB中添加SysInfo控件

    如何在VB中添加SysInfo控件## SysInfo 控件是用来响应操作系统发送给所有应用程序的系统消息.应用程序在必要时就可适应操作系统的变化.我主要用来识别有无读卡器插入. (1)在最左侧工具箱 ...

  7. 双系统如何在Centos7中添加GRUB2启动项

    GRUB2是Centos7的默认引导加载程序.它可以轻松地加载所有的Linux发行版和其他操作系统.它提供一个菜单显示所有的操作系统.GRUB2具有高级特性以及一些基本特性,使其在所有Linux上都有 ...

  8. PDF新建空白页,如何在PDF中添加页面

    使用文件的时候如果文件的内容不够完整我们就需要在文件中进行添加,不够PDF文件需要先新建空白页面之后才能在页面上输入内容,今天小编就为大家分享几个PDF新建页面的方法吧! 操作软件:PDF编辑器htt ...

  9. java adt怎么使用_如何在eclipse中添加android ADT ADT插件的安装图文教程

    对于程序开发的学者来说,eclipse并不陌生,它为我们提供了一个非常广阔的平台来开发程序.同样我们也可以用它来开发android程序.但是在eclipse中并不能直接开发android程序,需要我们 ...

  10. wordpress添加媒体_如何在WordPress中添加电子书下载

    wordpress添加媒体 Do you want to add ebook downloads to your WordPress site? WordPress makes it easy for ...

最新文章

  1. 3ds Max V-Ray5 完整指南大师班视频教程
  2. 投票 | RONG奖学金最佳人气奖评选活动开始啦!
  3. GitHub超4.4k星:程序员求职,一个算法模板就够了
  4. css3的3d起步——分享
  5. 算法----单链表反转
  6. 【OpenCV3】cv::Mat中的数据按行列写入txt文件中
  7. python asp.net requests_python3使用requests访问asp页面时出错,返回500
  8. 【vlfeat】O(n)排序算法——计数排序
  9. a20添加usb2net的驱动方法
  10. 4月第三周国内域名解析商Top10:万网升至20.32%
  11. Kickstarter 开源其 Android 和 iOS 应用
  12. 「Mac新手必备」解决 Mac 无法启动、开机的问题
  13. SecureCRT的安装、介绍、简单操作
  14. level2行情接口怎么用?
  15. 深入理解扩展运算符实现原理
  16. lms全称是什么意思_LMS是什么意思
  17. android7 显示到pc,安卓手机上的画面怎么投屏到Win7电脑上?超详细投屏方法看这里!...
  18. Python的第三次作业——陈灵院
  19. asp mysql 留言本_适用于ASP.NET的留言本(翻译)
  20. 移动硬盘拷贝linux文件,Linux(CentOS)挂载U盘、移动硬盘以及文件拷贝、备份

热门文章

  1. 分子动力学模拟软件_实惠的分子动力学模拟个人台式机装机和测试
  2. 钢铁雄心4mod星火 国策树代码-2
  3. 再谈“学微积,用手机”
  4. 超好用的Redis管理及监控工具,使用后可大大提高你的工作效率!
  5. Java光影教程_Minecraft SEUS PTGI 光影使用教程
  6. opera价格设置(一)
  7. c语言float类型小数部分占几个字节,c语言float类型小数点后位数
  8. Excel导入SQL(VB.NET版)
  9. Java 简单爬虫 代码
  10. 加速度传感器,磁场传感器和陀螺仪传感器案例