如何解包/编辑/打包boot.img文件
转载ramdisk.imgsystem.imguserdata.img介绍与解包、打包方法
ramdisk.img system.img userdata.img介绍及解包、打包方法2011-11-25 11:37:24分类:ramdisk.img system.img userdata.img介绍及解包、打包方法Android 源码编译后,在out/target/product/generic下生成的三个镜像文件:ramdisk.img,system.img,userdata.img以及它们对应的目录树root,system,data。
ramdisk.img是根文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,android加载这3个映像文件后,会把system和userdata分别加载到ramdisk文件系统中的system和data目录下。
三个镜像文件及其三个目录树之间的生成关系是我们进行ROM制作的基础,下面将做详细介绍。
Ramdisk镜像是采用cpio打包,gzip压缩的。
用file验证:# file ramdisk.img输出: # ramdisk.img: gzip compressed data, from Unix为了便于说明问题,我们将ramdisk.img拷贝到其它一个目录,然后按以下步骤将ramdisk.img还原为目录树:# mv ramdisk.img ramdisk.img.gz# gunzip ramdisk.img.gz# mkdir ramdisk#cd ramdisk#mkdir temp#cd temp# cpio –i –F ../ramdisk.img这样,就得到一个完整的ramdisk目录,与out/target/product/generic/root对比后,我们发现它们是一样的内容。
通过执行以下的操作,我们可由目录树再生成ramdisk镜像# cd temp# find . | cpio -o -H newc | gzip > ../ramdisk-new.img 这两个镜像都属于yaffs2文件格式,生成方式是一样的。
bootimg的详细介绍&使用实例
文件系 /挂载点/
统
大小
描述
BOOT: /dev/mtdblock[?]
/
(RAM)
Raw
内核、内存盘和引导配置。
DATA:
/dev/mtdblock5
/data/ yaffs2
91904kb
用户、系统配置,软件配 置以及软件(没有 a2sd 的
话)
CACHE:
/dev/mtdblock4
/cache/ yaffs2
*/
boot 的 ramdisk 映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文
件,例如:初始化 init 进程以及 init.rc(可以用于设置很多系统的参数)等文件。
以下是一个典型的 ramdisk 中包含的文件目录列表:
│ default.prop
│ init
│ init.goldfish.rc
** appended to the kernel commandline in the tags.
** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr
** 6. if second_size != 0: jump to second_addr
** else: jump to kernel_addr
│ default.prop
│ init
│ init.rc
│ initlogo.rle
//开机第二屏图片
│ ueventd.goldfish.rc
│ ueventd.rc
│ ueventd.swift.rc
│
├─data
├─dev
├─etc
│ recovery.fstab
提取boot.img的几种方法
提取boot.img的几种方法引言b o ot.i mg是A nd roi d系统中的一个关键文件,它包含了启动A n dr oi d设备时所需的一些信息和设置。
在一些情况下,我们可能需要提取bo ot.i mg文件来进行分析、修改或者备份。
本文将介绍几种常用的方法来提取b oo t.im g文件。
方法一:使用AD B命令A D B(An dr oi dD eb ugB ri dg e)是A nd roi d开发过程中常用的工具,通过AD B命令我们可以与A nd ro id设备进行通信和控制。
下面介绍使用A D B命令来提取bo ot.im g文件的步骤:1.确保电脑已经安装了AD B,并且手机已经开启了U SB调试模式。
2.连接手机到电脑,并打开命令行终端(W in do ws为C MD,M a c为终端)。
3.执行以下命令来获取bo ot.i mg文件:```m ar kd ow na d bp ul l/de v/bl ock/bo ot de vi ce/b y-n a me/b oo tb oo t.img```4.执行完命令后,会在当前终端所在的目录下生成一个b oot.im g文件,即为提取成功。
方法二:使用第三方工具除了使用AD B命令,还可以借助一些第三方工具来提取b oot.im g文件。
这些工具通常提供了更多的功能和选项,方便用户进行操作。
下面介绍一款常用的第三方工具——"A nd ro id Im a ge Ki tc he n"。
1.首先,从官方网站下载并安装"A nd ro i dI ma ge Ki tc he n"工具。
2.将b oo t.im g文件复制到"An dr oi dI ma g eK it ch en"所在目录。
3.打开命令行终端,并切换到"An dr oid I ma ge Ki tc he n"目录。
华为手机内核代码的编译及刷入教程【通过魔改华为P9AndroidKernel对抗反调试机制】
华为⼿机内核代码的编译及刷⼊教程【通过魔改华为P9AndroidKernel对抗反调试机制】0x00 写在前⾯攻防对⽴。
程序调试与反调试之间的对抗是⼀个永恒的主题。
在安卓逆向⼯程实践中,通过修改和编译安卓内核源码来对抗反调试是⼀种常见的⽅法。
但⽹上关于此类的资料⽐较少,且都是基于AOSP(即"Android 开放源代码项⽬",可以理解为原⽣安卓源码)进⾏修改,然后编译成⼆进制镜像再刷⼊Nexus 或者Pixel 等⾕歌亲⼉⼦⼿机。
但因为⾕歌的亲⼉⼦在国内没有⾏货销售渠道,市场占有率更多的是国产⼿机,⽽修改国产⼿机系统内核的教程却很少,加之部分国产⼿机的安卓内核和主线 AOSP 存在些许差异,照搬原⽣安卓代码的修改⽅法⽆法在国产⼿机上实现某些功能,甚⾄⽆法编译成功。
所以本⽂以某国产⼿机为例,通过研究其内核源码,对关键代码进⾏分析、修改,编译内核、打包成刷机镜像,对全过程予以展⽰。
0x01 常见反调试⼿段及对抗策略简介在安卓程序的开发过程中,反调试的⼿段有很多种,简单列举若⼲:(1) 检测特定进程或端⼝号。
如 IDA Pro 在对安卓应⽤进⾏调试时,需要在⼿机端启动调试程序 android_server ,该调试程序默认开启端⼝23946。
⽬标程序若发现⼿机⾥有 android_server 进程或开启了端⼝23946,⽬标程序就⾃动退出,以达到反调试的⽬的。
(2)检测某些关键⽂件的状态。
如⽬标程序在调试状态时,Linux内核会向部分系统⽂件内写⼊⼀些进程状态信息,包括但不限于向 “ /proc/⽬标程序pid/status ” 这⼀⽂件的 TracerPid 字段写⼊调试进程的 pid 。
有部分程序会检查这些字段,⽐如⽬标程序发现对应的 TracerPid 不等于 0 ,则说明⾃⼰本⾝正在被别的程序调试,⽐如:(Pid为19707的进程正在被Pid为24741的进程调试)(3)检测软件断点。
关于REC的基本移植教程
过程为分解→替换→打包。
1.分解篇:开始解包前,先将文件重命名为boot.img。
依次双击解压boot.bat 解压ramdisk.bat2.替换篇:主要替换文件有kernel,key,recovery.fstab,init.rc。
替换文件可以从旧的recovery.img 取得。
kernel 文件就是机子的内核了。
key 文件是机子的按钮的配置文件。
文件在initrd/res 文件夹里。
recovery.fstab 就是记载系统各个分区挂载的地方的文件。
在initrd/etcinit.rc 文件是开机初始化文件。
在initrd如果你要添加或着减少文件,记得修改cpiolist.txt文件。
3.打包篇:替换好后,依次双击打包ramdisk.bat 打包boot.img,新生成的boot.img会覆盖就的boot.img,然后在重命名为recovery.img。
其中运行打包ramdisk.bat 会产生ramdisk.cpio.gz。
说明一下,打包boot.img命令要稍微的改一下,因为每个机型的基址等不同,所以做一下更改,在解包的时候弹出CMD命令框记下如下图几个东西:解包几下这几个东西,然后打开“打包boot.bat”然后点击右键进行编辑把里面的bootimg --repack-bootimg 0x200000 console="ttyMSM1 androidboot.hardware=qcom" 4096 4096改成你机型的基址参数,里面的0x200000 console="ttyMSM1 androidboot.hardware=qcom" 4096 4096改成你对应的,后面的4096,有点是2048哈,看看上面截图中也是有两个4096了。
固件包img文件解压和打包教程——让自己也能做个简单的ROM!
废话不多说直接上教程:VirtualBox下载地址:/html_2/1/59/id=46462&pn=0.html YLMS OS下载地址:/1、在VirtualBox虚拟YLMS OS下安装增强功能及共享WINDOWS文件夹的方法linlong@linlong-laptop:~$ sudo passwd root输入新的UNIX 密码:重新输入新的UNIX 密码:passwd:已成功更新密码linlong@linlong-laptop:~$ su密码:root@linlong-laptop:/home/linlong# mkdir /mnt/cdromroot@linlong-laptop:/home/linlong# sudo mount /dev/cdrom /mnt/cdrommount: 块设备/dev/sr0 写保护,已只读方式挂载root@linlong-laptop:/home/linlong# cd /mnt/cdromroot@linlong-laptop:/mnt/cdrom# ls32Bit VBoxLinuxAdditions-amd64.run VBoxWindowsAdditions.exe64Bit VBoxLinuxAdditions-x86.run VBoxWindowsAdditions-x86.exeAUTORUN.INF VBoxSolarisAdditions.pkgautorun.sh VBoxWindowsAdditions-amd64.exeroot@linlong-laptop:/mnt/cdrom# sudo sh ./VBoxLinuxAdditions-x86.run Verifying archive integrity... All good.Uncompressing VirtualBox 3.2.4 Guest Additions for Linux.........VirtualBox Guest Additions installertar: 记录大小= 8 块Building the VirtualBox Guest Additions kernel modulesBuilding the main Guest Additions module ...done.Building the shared folder support module ...done.Building the OpenGL support module ...doneDoing non-kernel setup of the Guest Additions ...done.Starting the VirtualBox Guest Additions ...done.Installing the Window System driversInstalling Server 1.7 modules ...done.Setting up the Window System to use the Guest Additions ...done.You may need to restart the hal service and the Window System (or just restartthe guest system) to enable the Guest Additions.Installing graphics libraries and desktop services components ...done.root@linlong-laptop:/mnt/cdrom#2、实现共享菜单栏上点击设备然后再弹出的列表中点击分配数据空间出现如下图(不知道的自己百度下)sudo mkdir /home/share (share是要共享的文件夹名字)sudo mount -t vboxsf share /home/(注意空格)3、解包(需要用到的包要放到共享文件目录下)(一)在开始解包之前要做这么几件事:①下载unyaffs包下载地址:/p/unyaffs/downloads/list②执行先执行gcc –o unyaffs unyaffs.c 再执行cp unyaffs /bin(具体看你bin目录在哪个路径下)(二)接下来就开始解压img文件:请不要直接用命令unyaffs system.img,这样的话解开的文件都在当前目录下。
如何解包/编辑/打包boot.img文件
目录1、背景知识2、boot和recovery映像的文件结构3、对映像文件进行解包、编辑、打包的常规方法3.1、另一种解包、编辑、打包的方法4、将新的映像刷回到手机5、解包、编辑、打包为我们带来了什么6、本文讲的内容与使用update.zip刷机包不是一码事正文1、背景知识Android手机的文件系统有许多存储器组成,以下是在adb shell下面的输出:#cat /proc/mtddev: size erasesize namemtd0: 00040000 00020000 "misc"mtd1: 00500000 00020000 "recovery"mtd2: 00280000 00020000 "boot"mtd3: 04380000 00020000 "system"mtd4: 04380000 00020000 "cache"mtd5: 04ac0000 00020000 "userdata"注意,不同的手机在上述存储设备的顺序可能会各不相同!一定要检查您的手机,确定在以下的操作中选择正确的设备号(mtdX,这个X的序号一定要检查清楚)。
在本向导中,我们主要描述对"recovery"和"boot"的存储设备进行操作;"system"存储设备保存了android系统目录的所有数据(在系统启动后会挂载到“system/”目录);“userdata”存储设备将保存了android数据目录中的所有数据(在系统启动后会挂载到“data/”目录,里面是会有很多应用数据以及用户的preference之类的配置数据)。
从上面的输出可以看出来,recovery和boot分区对应着/dev/mtd/mtd1和/dev/mtd/mtd2,在你您开始做任何修改之前一定要做两件事情,第一件事情,一定要先对这两个分区进行备份。
固件包img文件解压和打包教程——让自己也能做个简单的ROM!
废话不多说直接上教程:VirtualBox下载地址:/html_2/1/59/id=46462&pn=0.html YLMS OS下载地址:/1、在VirtualBox虚拟YLMS OS下安装增强功能及共享WINDOWS文件夹的方法linlong@linlong-laptop:~$ sudo passwd root输入新的UNIX 密码:重新输入新的UNIX 密码:passwd:已成功更新密码linlong@linlong-laptop:~$ su密码:root@linlong-laptop:/home/linlong# mkdir /mnt/cdromroot@linlong-laptop:/home/linlong# sudo mount /dev/cdrom /mnt/cdrommount: 块设备/dev/sr0 写保护,已只读方式挂载root@linlong-laptop:/home/linlong# cd /mnt/cdromroot@linlong-laptop:/mnt/cdrom# ls32Bit VBoxLinuxAdditions-amd64.run VBoxWindowsAdditions.exe64Bit VBoxLinuxAdditions-x86.run VBoxWindowsAdditions-x86.exeAUTORUN.INF VBoxSolarisAdditions.pkgautorun.sh VBoxWindowsAdditions-amd64.exeroot@linlong-laptop:/mnt/cdrom# sudo sh ./VBoxLinuxAdditions-x86.run Verifying archive integrity... All good.Uncompressing VirtualBox 3.2.4 Guest Additions for Linux.........VirtualBox Guest Additions installertar: 记录大小= 8 块Building the VirtualBox Guest Additions kernel modulesBuilding the main Guest Additions module ...done.Building the shared folder support module ...done.Building the OpenGL support module ...doneDoing non-kernel setup of the Guest Additions ...done.Starting the VirtualBox Guest Additions ...done.Installing the Window System driversInstalling Server 1.7 modules ...done.Setting up the Window System to use the Guest Additions ...done.You may need to restart the hal service and the Window System (or just restartthe guest system) to enable the Guest Additions.Installing graphics libraries and desktop services components ...done.root@linlong-laptop:/mnt/cdrom#2、实现共享菜单栏上点击设备然后再弹出的列表中点击分配数据空间出现如下图(不知道的自己百度下)sudo mkdir /home/share (share是要共享的文件夹名字)sudo mount -t vboxsf share /home/(注意空格)3、解包(需要用到的包要放到共享文件目录下)(一)在开始解包之前要做这么几件事:①下载unyaffs包下载地址:/p/unyaffs/downloads/list②执行先执行gcc –o unyaffs unyaffs.c 再执行cp unyaffs /bin(具体看你bin目录在哪个路径下)(二)接下来就开始解压img文件:请不要直接用命令unyaffs system.img,这样的话解开的文件都在当前目录下。
【ROM制作工具】小白如何进行ROM解包,精简,修改,授权,打包详细图文教程
【ROM制作⼯具】⼩⽩如何进⾏ROM解包,精简,修改,授权,打包详细图⽂教程⼩⽩党,⼩⽩⽤户,如何制作⼀款⼿机刷机包?如何在即使零基础的操作下进⾏ROM解包,精简,修改,授权,打包,等⼀系列的制作ROM操作?⼿机刷机包制作其实并没有想象的那么困难,按照相应的教程步骤制作属于⾃⼰的刷机包。
接下来将和⼤家分享⼀篇制作ROM的详细教程,具体操作如下:准备⼯作:1)【ROM解包】点击ROM制作⼯具中间的“选择线上ROM...或选择本地ROM...”,选择ROM后⼯具开始⾃动解包。
⼯具会⾃动进⾏解包,此过程会耗时⼏分钟,具体速度根据电脑性能⽽定。
2)【ROM精简】⼯具会对ROM⾃动进⾏解包和精简,选择“删除预装推⼴应⽤”进⾏选择性删除,也可以对其他系统应⽤进⾏精简。
【操作菜单】右键单击应⽤,会弹出打开所在⽬录、复制包名、复制应⽤名和删除菜单,可对你单击的应⽤进⾏查看复制和修改。
【深度精简】右键选择-打开所在⽬录,你会看到system分区的所有内容,你可以选择性进⾏删除其他⽂件和内容,建议不要改动不清楚的⽂件。
3)【推⼴应⽤】,选择推⼴应⽤可以看到推⼴套餐。
此功能需要登录【⾃定义套餐】点击“添加⾃定义套餐”选择你想内置的软件,也可以对套餐名进⾏⾃定义,设置完套餐后保存即可,选择 “添加本地应⽤”可以将本地的软件集成在ROM⾥。
4)【信息修改】,进⼊信息修改界⾯,点击修改品牌机型信息只进⾏品牌和机型名称的修改。
点击属性名称,在“修改属性”栏⾥填⼊要修改的值后,点击修改按钮;在“新增属性”栏,输⼊要修改的属性名称和属性值后,点击保存按钮5)【ROOT授权】,默认是不会对ROM进⾏添加ROOT,选择“装⼊ROOT授权”⾃动为rom包添加root,此功能可以ROOT市⾯上绝⼤多数的ROM。
6)【打包】完成上述步骤后,点击“开始打包”,ROM完成后会⾃动命名并弹出所在⽂件夹。
当打包完成后整个制作ROM的所有操作就进⾏完成了。
MIUI移植基本教程
首先介绍制作rom的环境使用的工具:1.制作环境必须要有一个Linux操作系统,我用的是ubuntu 10.4,JDK6,当然如果你能建立一个完整的编译Android系统的环境更好,如何建立这样的系统,网上有很多文章,这里就不多讲了。
可以在物理硬盘分区上安装Linux,也可以向我一样在VirualBox虚拟机上安装。
2.厨房虽然它只是个在终端下由脚本驱动的程序集,但对我们提高制作rom的效率作用是巨大的完全掌握这个厨房的使用方法,需要写一篇单独的教程,本贴只针对移植所需的相关方法作出说明。
1)解包和打包解包:把要打磨的rom包放到original_update目录中,rom包的类型一般是zip压缩包,也可以是img镜像文件;运行厨房(menu脚本),输入1(Set up working folder from ROM),根据提示选择你要解包的那个文件号,厨房解包并创建工作目录(WORKING_xxx),如果已存在一个WORKING_xxx的工作目录,厨房会自动把它移到到OLD_WORKING目录中。
打包:输入99(Build ROM from working folder),厨房自动打包工作目录然后签名并把rom 文件放到OUTPUT_ZIP目录中。
2)deodex官方发布的rom一般都会把apk中的dex文件抽出并优化修改为同名的odex文件,为了修改它们,需要将这些odex文件打回到各自的apk文件中,在厨房中输入0(ADV ANCED OPTIONS)->11(Deodex files in your ROM),厨房自动搜索工作目录下所有odex文件,根据提示输入即可。
3)文件签名在(ADV ANCED OPTIONS)屏输入21(Sign APK file(s)),厨房搜索工作目录下所有apk 文件,根据提示输入,这里要注意,无论你选择哪一项,厨房都不会自动签名framework目录下的apk文件,需要你输入s(自定义签名文件)。
magiskboot用法
magiskboot用法
Magiskboot是Magisk工具箱的一部分,用于处理Android设备的引导镜像文件。
它提供了一些功能,例如解包引导镜像、重新打包引导镜像、签名引导镜像等。
下面我会从多个角度介绍Magiskboot的用法。
1. 解包引导镜像:
要解包引导镜像,你可以使用以下命令:
magiskboot unpack boot.img.
这将解包boot.img文件,生成一个名为ramdisk的文件夹,里面包含了引导镜像的内容。
2. 修改引导镜像:
在解包后,你可以对ramdisk文件夹中的内容进行修改,例如添加或删除文件、修改属性等。
3. 重新打包引导镜像:
修改完成后,你可以使用以下命令重新打包引导镜像:
magiskboot repack.
这将生成一个新的boot.img文件,其中包含了你所做的修改。
4. 签名引导镜像:
在重新打包后,你可以使用以下命令对引导镜像进行签名:
magiskboot sign boot.img.
这将在boot.img文件中添加Magisk的签名,以确保在设备启动时能够正确加载修改后的引导镜像。
总的来说,Magiskboot提供了一种便捷的方式来处理Android 设备的引导镜像文件,使得用户可以进行各种定制化的修改,而不需要深入了解底层的技术细节。
当然,在使用Magiskboot时,务必谨慎操作,以免对设备造成不可逆的损坏。
路由器固件的解包与打包2024
引言概述:路由器固件解包与打包是指将嵌入式设备(如路由器)上的固件进行解开和重新打包的过程。
这个过程对于嵌入式设备的软件开发和定制化非常重要。
本文将详细介绍用于解包和打包固件的工具和步骤。
正文内容:一、解包固件1.1提取固件文件:从路由器设备中提取固件文件,可以使用DD命令或者串口控制台提取。
1.2解压固件文件:使用解压工具,如binwalk,将固件文件进行解压,得到固件的各个组成部分。
1.3分析固件:通过分析解压后的固件文件,了解各个组成部分的结构和功能。
二、打包固件2.1修改固件:根据需求,对固件文件进行修改,如添加新的软件包、修改配置文件等。
2.2重新打包固件:将修改后的文件重新打包成固件格式,可以使用mkimage等工具进行打包。
三、固件的烧录与更新3.1硬件烧录:将打包好的固件通过串口或者JTAG接口烧录到设备的闪存中。
3.2固件更新:将新的固件通过WEB界面或者命令行进行更新,确保设备上的固件是最新版本。
四、错误处理与调试4.1解包错误处理:解包固件时可能会遇到一些错误,如文件损坏或者解压失败,需要进行错误处理。
4.2打包错误处理:打包固件时可能会遇到一些错误,如文件格式不兼容或者依赖关系错误,需要进行错误处理。
4.3调试固件:使用调试工具,如GDB,对固件进行调试,查找和修复潜在问题。
五、固件安全性5.1固件签名:为了确保固件的可靠性和完整性,可以对固件进行签名,防止被篡改或者恶意替换。
5.2固件加密:对固件进行加密,防止固件被逆向工程或者泄露敏感信息。
5.3固件验证:通过验证机制,如校验和或者哈希值等,确保固件在传输和存储过程中的完整性。
总结:路由器固件的解包与打包对于定制化和软件开发非常重要。
通过解包固件,可以深入了解嵌入式设备的软件和硬件组成部分。
通过打包固件,可以将所需的修改和定制化应用到设备上。
固件的烧录与更新、错误处理与调试以及固件的安全性也是不可忽视的。
通过掌握解包与打包固件的技术,可以更好地定制和管理嵌入式设备的固件。
发烧友教你如何获取adbroot权限
发烧友教你如何获取adbroot权限对安卓系统还不是很了解的亲们,这里卤煮给大家科普下Android 系统。
Android 系统rom里面最主要的就3个文件:boot.img、system.img、userdata.img。
其中用来获取adb root权限的文件就是boot.img。
所以如果你要修改adb的root权限,修改boot.img对应的地方就行了。
今天卤煮这里主要是给大家讲解下如何解开boot.img文件,修改对应的文件,使adb 登录后为root用户,也就是获取adb root权限。
看教程之前,提示下大家:root是有风险的,需要谨慎。
本帖隐藏的内容使用工具:bootimg.exe 常用于解包boot.img 、recovery.img等等。
简要流程:1.解包 boot.img命令: bootimg --unpack-bootimg注:boot.img应和bootimg.exe在同一目录下。
2.解包 ramdisk.gz (从boot.img 解包获得)命令: bootimg --unpack-ramdisk注:会产生目录initrd,此目录下包含各种可执行程序和驱动程序。
在此目录下修改文件default.prop。
将ro.secure=0,意为关闭保护。
3.打包 ramdisk.gz命令: bootimg --repack-ramdisk注:当前目录必须存在cpiolist.txt 和initrd目录 , 4.打包boot.img命令: bootimg --repack-bootimg5.将boot.img刷入,在PC机上测试。
Rom定制教程之Windows下解包编辑打包img使用教程
Rom定制教程之Windows下解包编辑打包img使用教程自从得知rom助手可以解包IMG的文件后,再也不用安装LINUX系统来解包和打包system.img文件,这对于新手机友朋友无疑是一个劲爆的消息,很多朋友都对安装和操作LINUX系统的繁琐望而却步,不会安装LIXUX系统也就无法对system.img进行解包,进而就无法修改System.img里面的内容,制作属于自己的刷机包了也就无法谈起。
那么今天咱们就分享下如何在windows系统下对system.img进行解包修改和打包的。
后再解压缩,PS:解压缩都会的吧。
解压出来之后里面有很多img文件,其中就包括system.img。
这就是今天的猪脚,搞的就是他。
三星刷机包作为案例。
2、下载安装ROM助手打开ROM助手,选择“SYSTEM .IMG 编辑”功能。
使用之前要注意,最好把一些杀毒软件暂时的关闭,3、加载system.img把第一步提取的system.img加载进去。
稍等片刻,等待加载完成。
4、精简和添加这时ROM助手把整个system.img的APK都显示出来了,在保证刷机包的完整性的同时,你想怎么玩就怎么玩,如果不尽兴的话ROM助手还有一层功效哦!!!继续往下看。
5、选择“BOOT.IMG解包与打包”功能,选择boot.img,文件,您就可以根据自己的需求来编辑内核了,如下图:(另外:ROM助手的美化功能在抓紧的开发测试中,敬请期待哦~~~)6、封装IMG一切完成后点击右下角的“开始封装” 等待封包完成,这样system.img的解包修改打包就结束了,是不是很简单的呀!!!在人家还在安装LINUX的时候你都完成了SYSTEM的封包,很有成就感的哈,7、刷机三星刷机包由于他的特殊性,是Tar格式最后还需要一个TAR打包工具,兄弟们在网上下载即可搞定后就刷机哦~。
boot.img的修改
boot.img的修改Android 系统的rom最主要的就是3个⽂件:boot.img、system.img、userdata.img。
其中boot.img 存放着内核以及Android系统的配置信息,⽐如android系统各⽂件夹的读写权限,adb 的权限。
所以如果你要修改⽂件夹的写权限,adb的root权限,修改boot.img对应的地⽅就ok了。
system.img中存放的是系统的各种库,系统预装的app等,userdata.img是⼀下⽤户的配置信息。
今天这⾥介绍怎么解开boot.img⽂件,修改对应的⽂件,使system⽂件夹有写权限,adb 登录后为root⽤户。
下⾯所使⽤的⽅法需要⼀定的linux系统基础,如果你对linux系统⼀点都不了解,请慎重进⾏下⾯的操作。
需要的⼯具:,,1.拆包boot.img,需要⽤到⼀个perl脚本split_bootimg.pl。
在linux终端⾥输⼊以下命令:./split_bootimg.pl boot.img执⾏上述操作后, boot.img分成了两部分:boot.img-kernel和boot.img-ramdisk.gz,boot.img-kernel 是内核部分,这部分我们不能修改。
boot.img-ramdisk.gz解压后得到的boot.img-ramdisk⽂件才是我们要修改的部分。
2.⽤file boot.img-ramdisk 命令查看该⽂件格式,发现它是ASCII cpio archive格式,要⽤特殊的命令打开。
解压及打开该⽂件的命令如下:gzip -dc ../boot.img-ramdisk.gz | cpio -i这样boot.img-ramdisk中的内容全部解压到了ramdisk⽬录下。
3.adb root,找到ramdisk⽬录下的 default.prop ⽂件,将其中的 ro.secure=1,修改为ro.secure=0;ro.debuggable=0修改为ro.debuggable=1。
修改修改boot.img文件的工...
修改修改boot.img文件的工...修改修改boot.img文件的工具,mkbootfs,mkbootimg,unpackbootimg#编译mkbootfs,mkbootimg,unpackbootimg#首先要得到android_system_core的源代码,从上面下载得到#其中要编译的三个文件分别位于CyanogenMod-android_system_core-***的目录里面的不同文件夹中。
下面的代码是经过我修改的:/share/link?shareid=104897&uk=2265 432600CyanogenMod-...m-core-sn.zip其中mkbootfs的源代码位于cpio文件夹中mkbootimg和unpackbootimg位置mkbootimg文件夹中#使用的工具是linux系统的gccPS:如果需要交叉编译,就需要下载我制作的交叉编译器下面讲解一下编译的过程:一讲解编译mkbootfs文件1.分析Android.mk(此文件位于cpio目录里面)目录路径如下:/home/username/CyangenMod-android_system_core-***(其中的*代表的是标识码)/cpio/Android.mk使用gedit打开此文件,得到的内容如下:----------cut here-----------------------# Copyright 2005 The Android Open Source ProjectLOCAL_PATH:= $(call my-dir) #得到本目录的位置include $(CLEAR_VARS) #其中这句表示声明编译的开始。
LOCAL_SRC_FILES := \ #源代码文件mkbootfs.cLOCAL_MODULE := mkbootfs #生成的文件名include $(BUILD_HOST_EXECUTABLE) #生成在本机使用的可执行文件$(call dist-for-goals,droid,$(LOCAL_BUILT_MODULE)) #这句就不知道是什么意思了--------------------------------------------------2.制作自己使用的makefile从上面的Android.mk文件中得到如下的信息:编译用到的源代码文件是mkbootfs.c,生成的文件是一个可执行的文件,没有加入编译参数,生成的文件在本机运行。
android主要镜像(image)解析
android主要镜像(image)解析img解析:ramdisk.img:android根文件系统,在android编译系统生成的out/target/product/root目录中结构:./init.trout.rc./default.prop 保存一些调试参数,对于开发者相当重要./proc./dev./init.rc 一些启动参数./init./sys./init.goldfish.rc./sbin./sbin/adbd./system system.img挂载点./data userdata.img挂载点userdata.img 保存用户、应用信息。
结构:/data/app 所有安装后的app会移至此处,apk被拆成dex和apk,dex为目标文件,apk为资源包/data/data 应用程序内部存储信息,sharepreference、database,etcsystem.img 包含整个android系统结构:system/app android出厂内置应用在此,同时,在这里的app可以获得一些特别的权限。
system/framework android框架在此,不宜乱动,开发者可以使用adb push + 拔电池开关机可以快速验证问题。
(前提是eng 版本)Special App:SystemUI.apk 状态栏藏在里面。
framework-res.apk包含整个系统res文件夹 including 系统UI、一些配置参数、theme、style、animationrecovery.img 按power键+音量上键(android默认)可以进去,可以执行T卡升级,format,backup userdata,restore userdata 结构:不知道boot.img 包含一个linux kernel (maybe named as zImage)和一个ramdisk。
img文件结构在源码system/core/mkbootimg/bootimg.h中声明uboot.img android启动时第一个加载的镜像,初始化硬件和基本输入出系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1、背景知识2、boot和recovery映像的文件结构3、对映像文件进行解包、编辑、打包的常规方法3.1、另一种解包、编辑、打包的方法4、将新的映像刷回到手机5、解包、编辑、打包为我们带来了什么6、本文讲的内容与使用update.zip刷机包不是一码事正文1、背景知识Android手机的文件系统有许多存储器组成,以下是在adb shell下面的输出:#cat /proc/mtddev: size erasesize namemtd0: 00040000 00020000 "misc"mtd1: 00500000 00020000 "recovery"mtd2: 00280000 00020000 "boot"mtd3: 04380000 00020000 "system"mtd4: 04380000 00020000 "cache"mtd5: 04ac0000 00020000 "userdata"注意,不同的手机在上述存储设备的顺序可能会各不相同!一定要检查您的手机,确定在以下的操作中选择正确的设备号(mtdX,这个X的序号一定要检查清楚)。
在本向导中,我们主要描述对"recovery"和"boot"的存储设备进行操作;"system"存储设备保存了android系统目录的所有数据(在系统启动后会挂载到“system/”目录);“userdata”存储设备将保存了android数据目录中的所有数据(在系统启动后会挂载到“data/”目录,里面是会有很多应用数据以及用户的preference之类的配置数据)。
从上面的输出可以看出来,recovery和boot分区对应着/dev/mtd/mtd1和/dev/mtd/mtd2,在你您开始做任何修改之前一定要做两件事情,第一件事情,一定要先对这两个分区进行备份。
可以使用如下命令进行备份:# cat /dev/mtd/mtd1 > /sdcard/recovery.img# cat /dev/mtd/mtd2 > /sdcard/boot.img(注意added by lxros,只有手机获取了ROOT权限以后才能够执行上述的备份命令)第二件事情,你您应该把你您最喜欢的update.zip刷机包放置到你您的sd卡的根目录上面。
如此一来,即使你您在后续的操作中出了问题,也可以启动到recovery模式进行恢复。
另外一个你您需要知道的重要文件是在android系统目录下的/system/recovery.img,此文件是mtd1存储设备的完全拷贝。
这个文件在每次关机的时候,会自动地被写回到mtd1存储设备里面。
这会意味着两个事情:(1)任何对/dev/mtd/mtd1中数据的直接修改都会在下一次重启手机以后消失。
(2)如果希望对/dev/mtd/mtd1进行修改,最简单的做法是用你您自己的recovery.img替换掉/system/recovery.img。
当你您创建自己的update.zip刷机包的时候(特别是在做刷机包的适配的时候),如果你您忘记替换这个/system/recovery.img,这个recovery.img就会在关机的时候被烧写到mtd1里面去或许会变砖。
一定要注意这一点!2、boot和recovery映像的文件结构boot和recovery映像并不是一个完整的文件系统,它们是一种android自定义的文件格式,该格式包括了2K的文件头,后面紧跟着是用gzip压缩过的内核,再后面是一个ramdisk 内存盘,然后紧跟着第二阶段的载入器程序(这个载入器程序是可选的,在某些映像中或许没有这部分)。
此类文件的定义可以从源代码android-src/system/core/mkbootimg找到一个叫做bootimg.h的文件。
(译者的话,原文是一个叫做mkbootimg.h的文件,但从Android 2.1的代码来看,该文件名应该是改为bootimg.h了)。
/*** +-----------------+** | boot header | 1 page** +-----------------+** | kernel | n pages** +-----------------+** | ramdisk | m pages** +-----------------+** | second stage | o pages** +-----------------+**** n = (kernel_size + page_size - 1) / page_size** m = (ramdisk_size + page_size - 1) / page_size** o = (second_size + page_size - 1) / page_size**** 0. all entities are page_size aligned in flash** 1. kernel and ramdisk are required (size != 0)** 2. second is optional (second_size == 0 -> no second)** 3. load each element (kernel, ramdisk, second) at** the specified physical address (kernel_addr, etc)** 4. prepare tags at tag_addr. kernel_args[] is** appended to the kernel commandline in the tags.** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr** 6. if second_size != 0: jump to second_addr** else: jump to kernel_addr*/ramdisk映像是一个最基础的小型文件系统,它包括了初始化系统所需要的全部核心文件,例如:初始化init进程以及init.rc(可以用于设置很多系统的参数)等文件。
如果你您希望了解更多关于此文件的信息可以参考以下网址:/?p=kernel/common.git;a=blob;f=Documentation/filesystems/ramfs-rootfs-initramfs.txt以下是一个典型的ramdisk中包含的文件列表:./init.trout.rc./default.prop./proc./dev./init.rc./init./sys./init.goldfish.rc./sbin./sbin/adbd./system./datarecovery映像包含了一些额外的文件,例如一个叫做recovery的二进制程序,以及一些对该程序支持性的资源图片文件(当你您按下home+power组合键的时候就会运行这个recovery程序)。
典型的文件列表如下:./res./res/images./res/images/progress_bar_empty_left_round.bmp./res/images/icon_firmware_install.bmp./res/images/indeterminate3.bmp./res/images/progress_bar_fill.bmp./res/images/progress_bar_left_round.bmp./res/images/icon_error.bmp./res/images/indeterminate1.bmp./res/images/progress_bar_empty_right_round.bmp./res/images/icon_firmware_error.bmp./res/images/progress_bar_right_round.bmp./res/images/indeterminate4.bmp./res/images/indeterminate5.bmp./res/images/indeterminate6.bmp./res/images/progress_bar_empty.bmp./res/images/indeterminate2.bmp./res/images/icon_unpacking.bmp./res/images/icon_installing.bmp./sbin/recovery3、对映像文件进行解包、编辑、打包的常规方法(注意,下面我给你您介绍的是手工命令行方式进行解包以及重新打包的方法,但是我仍然创建了两个perl脚本,这两个脚本可以让你您的解包和打包工作变得轻松许多。
可以参考本文的附件unpack-bootimg.zip /files/apps/unpack-bootimg.ziprepack-bootimg.zip /files/apps/repack-bootimg.zip如果你您很擅长使用16进制编辑器的话,你您可以打开boot.img或者recovery.img,然后跳过开始的2K的头数据,然后寻找一大堆0的数据,在这一堆0的数据后面,紧跟着1F 8B 这两个数字(1F 8B是gzip格式的文件的结束标记)。
从此文件开始的地方(跳过2K的头),一大堆0后面紧跟着到1F 8B这两个数字为止的全部数据,就是gzip压缩过的linux内核。
从1F 8B后面紧跟着的数据一直到文件的结尾包含的全部数据,就是ramdisk内存盘的数据。
你您可以把把内核和ramdisk两个文件分别保存下来,在进行分别的修改和处理。
我们可以通过un-cpio和un-gzip操作来读取ramdisk文件中的数据,可以使用如下的命令来实现这个目的,以下操作会生成一个目录,直接cd进去就可以看到ramdisk中的数据了:gunzip -c ../your-ramdisk-file | cpio -i此命令可以将ramdisk中的所有的文件解包到当前的工作目录下面,然后就可以对它进行编辑了。
当需要重新打包ramdisk的时候,就需要re-cpio然后re-gzip这些数据和目录,可以通过如下命令来实现:(cpio会把所有当前目录下面的文件都打包进去,因此,在进行此步骤之前,请把不需要的文件都清除掉。
)find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz最后一步就是通过mkbootimg这个工具,把kernel和ramdisk打包在一起,生成一个boot.img:mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel your-kernel-file --ramdisk newramdisk.cpio.gz -o mynewimage.img这里的mkbootimg工具会在编译android的源代码的时候会在~/android-src/out/host/linux-x86/bin目录下面自动生成。