定制android 使用initramfs文件系统吗

定制android 使用initramfs文件系统吗,第1张

在制作Initramfs文件系统之前,我先简单介绍下linux各文件系统。linux支持多种文件系统类型,包括ext2,ext3,vfat,jffs,

ramfs,nfs等,为了对各类文件系统进行统一管理,linux引入了虚拟文件系统vfs(virtual file system),为各类文件系统提供一个统一的应用编程接口。

文件系统类型主要有如下:

根据存储设备的硬件特性,系统需求,不同的文件系统类型有不同的应用场合。在嵌入式linux应用中,主要的存储设备为ram和flash,常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,ramdisk,ramfs等。

基于flash的文件系统

Flash(闪存)作为嵌入式系统的主要存储媒介,主要有nor和nand两种技术。flash存储器的擦写次数是有限的,nand闪存还有特殊的硬件接口和读写时序。因此,必须针对flash的硬件特性设计符合应用要求的文件系统。

jffs2:主要用于nor型flash,特点是可读写,支持数据压缩的日志型文件系统。

yaffs/yaffs2:主要用于nand型flash,支持跨平台。

cramfs:只读的压缩文件系统。可用于两种flash。

ramdisk:基于ram的文件系统。是将一部分固定大小的内存当做块设备来用。它并非是一个实际的文件系统,而是一种将实际的文件系统装入内存的机制。将一些经常访问而又无需更改的文件通过ramdisk放在内存中,可以明显的提高系统的性能。

initramfs:基于ram的文件系统。initramfs出现在2.6内核中,它类似于tmpfs,是一种基于内存的文件系统,它的使用不需要创建内存块设备。增加文件到ramfs会自动配置更多的内存,并删除或截去文件以释放内存。(若ramdisk没有满,已被占用的额外的内存也不能用来做其它事情,若ramdisk满了,但其它仍有闲置的内存,也必须重新格式化以后才能扩展使用)

nfs:是由sun开发的一种在不同机器之间通过网络共享文件的技术。在嵌入式linux系统的开发调试阶段,可以利用该技术在主机上建立基于nfs的根文件系统,挂载到嵌入式设备,可以很方便的修改根文件系统的内容。

Initramfs文件系统其实就是压缩的ramdisk文件系统,估计大家很少又听说过的,我也一样,但是我这次调试板子的时候用的NFS文件系统,发现固化文件系统时,没有什么好选择的,u-boot不能直接支持yaffs2,需添加补丁;ramdisk不能直接固化到flash上,jffs2和cramfs都需要其他工具制作,最后找到了Initramfs文件系统。Inittamfs是将ramdisk文件文件系统被编译到内核中,其实就是ramdisk文件系统(Inital ramdisk filesystem)。在制作initramfs文件系统时,我们首先需要制作ramdisk文件系统,这个挺简单的,资料也挺齐全的,我这里简单介绍下:

1、创建根文件系统的目录

mkdir rootfs

cd rootfs

mkdir bin dev etc lib proc sbin sys usr mnt tmp var

mkdir usr/bin usr/lib usr/sbin lib/modules

2、创建设备文件

cd /dev

mknod -m 666 console c 5 1

mknod -m 666 nullc 3 1

cd ..

3、安装/etc

tar etc.tar.gz -c /xxx/rootfs

这步我就不提供资源了,我也是在国嵌上找到找到的,感兴趣的自己可以找找看,里面东西堵都不是很难。

4、编译内核模块

进入Linux内核目录(linux-2.6.30.4)

make modules 注意:最好将内核根目录下的Makefile文件中的ARCH改成arm CROSS-COMPILE改成arm-linux-,因为很多地方会用到这些两个环境变量,同时在宿主机上编译驱动程序时,如果没有修改这两个变量,会报奇怪的错误:http://blog.csdn.net/pengrui18/article/details/12044369

5、安装内核模块

make modules_install INSTALL_MOD_PATH=/xxx/rootfs

6、配置busybox

进入busybox目录执行make menuconfig

a、进入Busybox Setting->

build options->

[]"Build busybox as a static binary"//动态链接

Cross Compile prefix(arm-linux-)

Installation Option->

[*]Don't usr/usr//避免busybox安装至宿主系统的usr,目录下

Busybox Installation Prefix(/xxx/rootfs)//安装位置

其他选项默认

7、编译、安装busybox

make

make install

基本上按照上面的步骤就可以完成文件系统的制作.

busybox pro是一个集成了一百多个最常用linux命令和工具的软件,集成了一个http服务器和一个telnet服务器,Android系 统中自带的toolbox工具(/system/bin)比较简单,对于一些命令如find等支持的不好,可以Android系统中加入busybox, 就可以使用常见的Linux命令,同时通过busybox可以定制Android的根文件系统。首先,先把手机root了。下载安装 root explorer下载 busybox 下载好之后,用数据线链接手机,把解压出来的busybox拷到sd卡的根目录(或者其它目录,你记得就行)。使用root explorer浏览到/sdcard,找到busybox,长按,在出来的菜单里选择Copy浏览到/system/bin/目录点击屏幕右上角的 remount r/w 按钮(新版本的root explorer 是mount R/W好像,反正按来按去,能贴上就行)然后点击屏幕下面的paste按钮。拷贝完成之后,长按/system/bin/下面的busybox,选择Permission,按如图所示设置权限(把上面一行全部打钩,其它有钩也没有关系):至此,你的busybox便设置好了

编译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_dump

/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 的.

mkyaffs2imagesystem/ 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]

dirthe directory tree to be converted

image_file the output file to hold the image

'convert' produce 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 copy

$ file system.img

system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)

信息非常明确了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12090266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存