ext4utils源码的简单介绍

hacker|
89

文章目录:

怎么移植rom

(1)下载自己设备的官方ROM(假设文件名是myrom.img)和想移植的第三方自定义ROM(假设文件名是newrom.img)

(2)解包。

在网上找到unimg工具。把unimg和ROM文件myrom.img和newrom.img都放在同一个目录下(假设是d:\rom目录)。把myrom.img和newrom.img文件分别拖到unimg上就可以开始解包。解包后,可以得到一个myrom.img.dump和newrom.img.dump的目录。

在d:\rom目录下新建两个目录,myrom和b。把myrom.img.dump目录中的RFSFAT16_BOOT_00000000000文件复制到myrom目录下。把newrom.img.dump目录中的RFSFAT16_BOOT_00000000000复制到newrom目录下。

(3)更新boot分区文件

在网上找bootimg工具。也放到d:\rom目录下。然后打开命令行窗口。依次输入如下命令

d:

cd \rom\myrom

..\bootimg.exe --unpack-bootimg RFSFAT16_BOOT_00000000000

(此命令会输出一些重要的信息,请一定要记下来,等一下打包boot文件时需要用到)

..\bootimg.exe --unpack-ramdisk

cd ..\newrom

..\bootimg.exe --unpack-bootimg RFSFAT16_BOOT_00000000000

..\bootimg.exe --unpack-ramdisk

这样就可以看到在myrom目录和newrom目录下分别解包出如下文件

kernel :Linux内核文件,这个文件不同设备有不同。所以为什么我们直接刷别人的ROM可能会出现白屏问题。

initrd目录 :这其实就是系统的根目录

cpiolist.txt :记录着initrd目录中每个文件的权限和用户信息,这文件是为了等一下打包用的。我们不用管它。

下面,把myrom目录和newrom目录中的initrd目录下的init.sun4i.rc目录分别打开(请不要用记事本或写字板打开这个文件,因为这文件是UNIX格式,如果你用记事本或写字板打开,保存后会自动变成DOS格式,会破坏文件格式)

找到加载驱动的地方,如下图。把myrom目录中init.sun4i.rc文件中对应的内容,替换掉newrom目录中init.sun4i.rc的对应内容。

并记下myrom文件中要使用的驱动的文件名(等一下要更新system分区时需要用到)。

################################

# insmod vibrator

insmod /system/vendor/modules/sun4i-vibrator.ko (这是振动器驱动,如果不想使用振动器,可禁用这行)

chmod 777 /sys/class/timed_output/sun4i-vibrator/enable (如果禁用了振动器驱动,也要同时禁用这行)

#insmod key tp driver

insmod /system/vendor/modules/goodix_touch.ko (这就是触控驱动,通常替换这个驱动已经足够)

insmod /system/vendor/modules/sun4i-keyboard.ko

# insmod mali driver

insmod /system/vendor/modules/ump.ko

insmod /system/vendor/modules/mali.ko

#csi module

insmod /system/vendor/modules/videobuf-core.ko

insmod /system/vendor/modules/videobuf-dma-contig.ko

insmod /system/vendor/modules/gt2005.ko

insmod /system/vendor/modules/sun4i_csi0.ko

################################

把更新后的newrom目录中的init.sun4i.rc文件保存到myrom目录中,替换myrom目录的对应的文件。

下面开始重新打包boot分区,请打开命令行窗口,依次输入如下内容:

d:

cd \rom\myrom

..\bootimg.exe --repack-ramdisk

..\bootimg.exe --repack-bootimg 0x40000000 "console=ttyS0,115200 rw init=/init loglevel=8" 2048 2048

(repack-bootimg后面的一大堆参数是根据之前unpack-bootimg时得到,请大家一定要改为自己设备对应的参数,否则无法启动)

打包成功后,得到boot.img文件。把boot.img文件改名为RFSFAT16_BOOT_00000000000,并复制到myrom.img.dump目录下,替换原来的文件。

(4) 更新system分区,如下操作需要在Ubuntu下完成。

把myrom.img.dump和newrom.img.dump中的RFSFAT16_SYSTEM_000000000文件复制到Ubuntu系统下的/root目录,分别改名为system-myrom和system-newrom,

上网下载ext4_utils工具,并编译出simg2img,mkuserimg.sh,make_ext4fs 三个程序。并复制到/root目录下。

然后依次输入如下命令:

cd /root

./simg2img system-myrom system-myrom.img

./simg2img system-newrom system-newrom.img

mkdir /mnt/img /mnt/img2

mount -o loop system-newrom.img /mnt/img

mount -o loop system-myrom.img /mnt/img2

这时候,你就可以看到两个ROM的/system分区的内容。下面我们可以把官方ROM中的驱动复制到新ROM中。

cd /mnt/img/vendor/modules

cp -p /mnt/img2/vendor/modules/需要的文件.ko ./

哪些文件要复制过来,就要看(3)中你的设备要用哪些驱动了。

#########################

下面的文件是否需要替换,就要看你的设备与新ROM的区别大不大了,我的领先版2就没有替换这些文件。

/mnt/img/lib/hw/*.*

/mnt/img/lib/libhardware*.*

#########################

把驱动替换完毕后,就开始打包。

cd /root/

./mkuserimg.sh -s /mnt/img RFSFAT16_SYSTEM_000000000 ext4 system 256M

最后一个参数是说把system打包成一个256MB的分区镜像,如果你的system大于256MB的话,程序执行会出错,试试改为512M。

把RFSFAT16_SYSTEM_000000000复制回到windows中,替换掉myrom.img.dump目录中对应的文件。

最后一步,打包。打开命令行

d:

cd \rom

verifycalc myrom.img.dump\RFSFAT16_SYSTEM_000000000 myrom.img.dump\RFSFAT16_VSYSTEMFS_000000

verifycalc myrom.img.dump\RFSFAT16_BOOT_00000000000 myrom.img.dump\RFSFAT16_VBOOT_0000000000

unimg -e myrom.img

打包后的myrom.img 就可以用livesuite 刷机了。

成功启动后,如果看到显示不正常的话,可能因为移植的ROM与我们设备的分辨率不一样。比如我把极光ROM移植到领先版2后就遇到这个问题。

我是通过添加如下设置到新ROM的/system/build.prop文件来解决的。

################

ro.sf.lcd_density=125

################

125这个值是我试出来,在领先版2下可以正常显示的。你可以自己改成喜欢的数值(在100-200期间改)。

如何制作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_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 的.

mkyaffs2image system/ system.img

在Ubuntu中第一次使用mkyaffs2image命令时,会提示

mkyaffs2image:找不到命令

还需要安装mkyaffs2image

;can=2q=

下载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' 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)

信息非常明确了。

如何获取ext4文件系统源码

关于获取有关文件系统类型(FAT32、EXT3、EXT4等)的问题,这个要求肯定是不会有人答应的。因为只要一涉及到获取文件系统的源代码的问题,必定会涉及到一些和保密(或者是知识产权等)相关的事宜。

1条大神的评论

  • avatar
    访客 2022-07-12 上午 08:09:10

    下载ext4_utils工具,并编译出simg2img,mkuserimg.sh,make_ext4fs 三个程序。并复制到/root目录下。 然后依次输入如下命令: cd /root ./simg2img system-myrom system-my

发表评论