ext4源码
A. 使用hane NFS和Ubuntu交叉编译,成功了,但是在编译安装源码时出现: 遗漏分隔符 。 停止等错误。
Windows下的日志文件格式是NTFS,而linux下日志文件格式大多是ext4,通过挂载NTFS格式在ext4下,然后在NTFS下编译文件,一般并不推荐这样做。
本来两者处理文件的方式方法就不尽相同,平时通过ntfs-3g 挂载下文件还可以,具体编译软件的话中间会涉及到比较多次的NTFS和ext4文件的转化问题。所以不建议挂载在NTFS格式下编译软件。
一般编译的话有个比较好的习惯是源码包到/tmp或者直接cd 到 /tmp下wget源码包编译。tmpfs(也就是/tmp)的一个主要的好处是它闪电般的速度。tmpfs 文件系统会完全驻留在内存中,读写几乎可以是瞬间的。(重启后文件消失,所以只能放临时文件)
B. Linux文件系统特点
Linux之所以能在嵌人式系统领域取得如此辉煌的成绩,与其自身的优良特性是分不开的。与其他操作系统相比,Linux具有以下一系列显着的特点。
1.模块化程度高
Linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分;其独特的模块机制可根据用户的需要,实时地将某些模块插入或从内核中移走,使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。
2.源码公开
由于Linux系统的开发从一开始就与GNU项目紧密地结合起来,所以它的大多数组成部分都直接来自GNU项目。任何人、任何组织只要遵守GPL条款,就可以自由使用Linux 源代码,为用户提供了最大限度的自由度。这一点也正投嵌入式系统所好,因为嵌入式系统应用千差万别,设计者往往需要针对具体的应用对源码进行修改和优化,所以是否能获得源代码 对于嵌入式系统的开发是至关重要的。加之Linux的软件资源十分丰富,每种通用程序在Linux上几乎都可以找到,并且数量还在不断增加。这一切就使设计者在其基础之上进行二次开发变得非常容易。另外,由于Linux源代码公开,也使用户不用担心有“后闸”等安全隐患。
同时,源码开放给各教育机构提供极大的方便,从而也促进了Linux的学习、推广和应用。
3.广泛的硬件支持
Linux能支持x86、ARM、MIPS、ALPHA和PowerPC等多种体系结构的微处理器。目前已成功地移植到数十种硬件平台,几乎能运行在所有流行的处理器上。
由于世界范围内有众多开发者在为Linux的扩充贡献力量,所以Linux有着异常丰富的驱动程序资源,支持各种主流硬件设各和最新的硬件技术,甚至可在没有存储管理单元MMU 的处理器上运行,这些都进一步促进了Linux在嵌入式系统中的应用。
4.安全性及可靠性好
内核高效稳定。Linux内核的高效和稳定已在各个领域内得到了大量事实的验证。
Linux中大量网络管理、网络服务等方面的功能,可使用户很方便地建立高效稳定的防火墙、路由器、工作站、服务器等。为提高安全性,它还提供了大量的网络管理软件、网络分析软件和网络安全软件等。
5.具有优秀的开发工具
开发嵌入式系统的关键是需要有一套完善的开发和调试工具。传统的嵌入式开发调试工具是在线仿真器(In Circuit Emulator,ICE),它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,从而使开发者能非常清楚地了解到程序在目标板上的工作状态,便于监视和调试程序。在线仿真器的价格非常高,而且只适合做非常底层的调试。如果使用的是嵌人式Linux,一旦软硬件能支持正常的串口功能,即使不用在线仿真器,也可以很好地进行开发和调试工作,从而节省了一笔不小的开发费用。嵌入式Linux为开发者提供了一套完整的工具链(Tool Chain),能够很方便地实现从操作系统到应用软件各个级别的调试。
6.有很好的网络支持利文件系统支持
Linux从诞生之日起就与Internet密不可分,支持各种标准的Internet网络协议,并且很容易移植到嵌入式系统当中。目前,Linux几乎支持所有主流的网络硬件、网络协议和文件系统,因此它是NFS的一个很好的平台。
另一方面,由于Linux有很好的文件系统支持(例如,它支持Ext2、FAT32、romfs等文件系统),是数据各份、同步和复制的良好平台,这些都为开发嵌入式系统应用打下了坚实的基础。
7.与UNIX完全兼容
目前,在Linux中所包含的工具和实用程序,可以完成UNIX的所有主要功能。
但由于Linux不是为实时而设计的,因而这就成了Linux在实时系统中应用的最大遗憾。不过,目前有众多的自由软件爱好者正在为此进行不懈的努力,也取得了诸多成果
C. 如何制作Ext4文件系统镜像
编译Android源码最后是使用make_ext4生成 Ext4镜像+签名(更新:合理使用make_ext4参数是不会导致添加签名的),如果需要纯Ext4镜像,那么需要再去掉签名,使用simg2img。这个两个工具都是在编译Android源码时编译出来的,如果没有Android源码编译环境,当然也可以使用Ubuntu社区已经整理好的工具集android-tools-fsutils,该工具集文件列表如下:(来自android-tools-fsutils/filelist)
/usr/bin/ext2simg
/usr/bin/ext4fixup
/usr/bin/img2simg
/usr/bin/make_ext4fs
/usr/bin/mkuserimg
/usr/bin/simg2img
/usr/bin/simg2simg
/usr/bin/simg_mp
/usr/bin/test_ext4fixup
工具集安装方法:
sudo apt-get install android-tools-fsutils
1
1
制作Ext4文件系统镜像:
# 创建测试目录
mkdir /tmp/ext4 && cd /tmp/ext4 &&
mkdir test test_mount &&
echo "Hello Ext4" > test/HelloExt4.txt &&
# 生成名为test.ext4的Ext4镜像
make_ext4fs -l 512M test.ext4 test &&
# 挂载test.ext4到test_mount测试
mount -t ext4 -o loop test.ext4 test_mount &&
ls test_mount || echo "Error!"
一、在(yourAndroid code path)/out/ 目录里查找这个工具
unyaffs: 用于解压system.img
mkyaffs2image: 用于打包system.img
呵呵,find 命令肯定会吧?find out/ -name mkyaffs2image
找到了后,记住这个目录. 我的是(codePATH)/out/host/linux-x86/bin/
1.在任意文件夹下面建立一个system文件夹,我的是在home/changjiang/下面建的,这个是用来存放你解压system.img出来的文件,然后将找到的两个工具 unyaffs、mkyaffs2image拷贝到/changjiang/home/system
2.将编译出来的system.img或者下载的system.img复制到system文件夹中。
3.在终端中输入如下命令操作(/home/changjiang/替换成自己电脑中的路径,你的不是我的)
cd /home/changjiang/system
./unyaffs /home/changjiang/system/system.img(用unyaffs命令解压system.img),解压出来的有各种应用,库等等,你可以修改或者替换
二、重新打包system.img,虽然我不知道为什么要这样做,但是我知道这样做是可以的.
呵呵,linux没有不可能的事情.朝鲜的 红星操作系统就是例子.
具体办法是
system/ 这个目录,这个目录就是用来生成system.img 的.
mkyaffs2image system/ system.img
在Ubuntu中第一次使用mkyaffs2image命令时,会提示
mkyaffs2image:找不到命令
还需要安装mkyaffs2image
http://code.google.com/p/fatplus/downloads/detail?name=yaffs2-source.tar&can=2&q=
下载yaffs2-source.tar
解压后,进入utils文件夹,然后make
将make之后生成的mkyaffs2image文件拷贝到/usr/bin目录下
$ su
# cp mkyaffs2image /usr/bin/
# chmod 777 /usr/bin/mkyaffs2image
之后
$ mkyaffs2image
mkyaffs2image: image building tool for YAFFS2 built Jan 6 2012
usage: mkyaffs2image dir image_file [convert]
dir the directory tree to be converted
image_file the output file to hold the image
'convert' proce a big-endian image from a little-endian machine
表明安装成功,同时也可以看到该命令的用法
mkyaffs2image dir image_file
例如:
mkyaffs2image am1808-fs am1808-fs.yaffs//创建jffs2文件
搞Android的同学经常会接触到system.img。但是该文件经常以两种格式出现:raw和sparse。
一种是raw ext4 image,即经常说的raw image,使用file观察它: 其特点是完整的ext4分区镜像(包含很多全零的无效填充区),可以直接使用mount进行挂载,因此比较大(一般1G左右)。
[java] view plain
$ file system.img
system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
信息非常明确了。
D. 如何把linux的文件系统从ext2无损升级到ext4
基本步骤:
1确认内核版本和系统环境支持ext4 (推荐升至2.6.28以上,lsmod |grep ext4)
2卸载要升级的分区(在线卸不掉则需要进单用户)
3 tune2fs -O has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize来给分区加入ext4的特性
4 e2fsck -fDC0 /dev/sdb1 –y修复分区错误
5修改fstab中分区格式为ext4,reboot
关键点:
1tune2fs版本要高于1.41 否则不支持ext4的特性
2官方推荐使用2.6.28以上内核才稳定支持ext4
3对在使用的分区如var,一定要先卸载再操作,并且重启之前一定要挨个执行完tune2fs,e2fsck,和vi /boot/fstab的修改,再重启,否则挂载就会出问题
网络资料:
一、测试场景
操作系统:CentOS 5.6 x86 64bit(内核2.6.18)
文件系统:ext3
硬盘:2块(sda1、sdb1),sdb1的挂载点为/Android,专门用来存储编译文件,在编译时报错。
二、升级前状态
查看系统内核版本:
# uname -r
2.6.18-238.el5
查看文件系统的情况:
# df -T
文件系统 类型 1K-块 已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
ext3 13077624 3342968 9059636 27% /
/dev/sda1 ext3 101086 15876 79991 17% /boot
tmpfs tmpfs 257452 0 257452 0% /dev/shm
/dev/sdb1 ext3 8254240 149624 7685324 2% /android
查看ext4特征是否激活:
# tune2fs -l /dev/sdb1 | grep extent
执行上述命令后无任何信息返回,说明/dev/sdb1的ext4特征没有激活,唯一的解决办法就是升级文件系统到ext4了。
三、软件下载及安装
e2fsprogs软件包下载页面:http://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/
接下来是源码编译安装过程:
# wget http://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/e2fsprogs-1.41.14.tar.gz
# tar -zxvf e2fsprogs-1.41.14.tar.gz
# cd e2fsprogs-1.41.14
# ./configure
# make && make install
安装完毕后暂时不需要重启系统。第一次安装完毕时我就重启系统了,结果系统竟然崩溃了,因此e2fsprogs软件包安装完毕后不要立即重启服务器。