1. 程式人生 > >Android ramdisk,boot,system.img 解包和打包

Android ramdisk,boot,system.img 解包和打包

一、ramdisk介紹
ramdisk通過字面意思就大概能理解意思,ram disk虛擬記憶體盤,將ram模擬成硬碟來使用的檔案系統。對於傳統的磁碟檔案系統來說,這樣做的好處是可以極大提高檔案訪問速度;但由於是ram,所以在掉電後,這部分內容不能儲存。ramdisk檔案系統是在系統上電後直接從磁碟一次性載入到記憶體,在整個執行期間都不會有寫回操作,所以,任何修改都掉電後丟失。

二、ramdisk.img介紹
ramdisk.img是編譯Android生成的一個映象檔案,最後和kernel一起打包生成boot.img映象。ramdisk.img中主要是存放android啟動後第一個使用者程序init可執行檔案和init.*.rc等相關啟動指令碼以及sbin目錄下的adbd工具。如下圖所示
這裡寫圖片描述

三、ramdisk.img 解壓
ramdisk.img是將上圖目錄打包壓縮而來的,我們可以通過下面命令,來解壓出其中的內容
首先使用file命令檢視ramdisk.img檔案型別

akin@akin:~/work/7722$ file ramdisk.img 
ramdisk.img: gzip compressed data, from Unix

將ramdisk.img 重新命名為gzip格式

akin@akin:~/work/7722$ mv ramdisk.img ramdisk.img.gz
akin@akin:~/work/7722$ ls
ramdisk.img.gz

使用gzip解壓ramdisk.img.gz檔案

akin@akin:~/work/7722$ gunzip ramdisk.img.gz 

再次用file命令檢視檔案型別

akin@akin:~/work/7722$ file ramdisk.img 
ramdisk.img: ASCII cpio archive (SVR4 with no CRC)

這時候使用cpio來提取ramdisk.img中的內容

//新建目錄 用來儲存解出來的檔案
[email protected]:~/work/7722$ mkdir temp
[email protected]:~/work/
7722$ cd temp/ [email protected]:~/work/7722/temp$ cpio -i -F ../ramdisk.img 4783 blocks

四、ramdisk.img 壓縮
修改相應要修改的檔案後,打包成ramdisk.img檔案的步驟如下:

[email protected]:~/work/7722/temp$ find .|cpio -ov -H newc | gzip > ../ramdisk.img 
.
./factory_init.rc
./proc
./sepolicy
./init.recovery.mt6735.rc
./file_contexts
./selinux_version
./ueventd.rc
./sys
./meta_init.modem.rc
./property_contexts
./init.aee.rc
./sbin
./sbin/mkfs.f2fs
./sbin/watchdogd
./sbin/adbd
./sbin/healthd
./sbin/ueventd
./data
./init.modem.rc
./init.xlog.rc
./meta_init.project.rc
./charger
./enableswap.sh
./init.project.rc
./init.zygote64_32.rc
./default.prop
./init.ssd.rc
./dev
./factory_init.project.rc
./system
./init
./init.zygote32.rc
./service_contexts
./fstab.mt6735
./init.trace.rc
./seapp_contexts
./init.mt6735.usb.rc
./init.rc
./meta_init.rc
./init.environ.rc
./init.mt6735.rc
./init.usb.rc
4784 blocks
[email protected]:~/work/7722/temp$ cd ..
[email protected]:~/work/7722$ ls
ramdisk.img  temp

system.img 解壓、修改、
將system.img 轉換成ext4 格式,然後掛載到/home/temp/目錄 就可以修改了

akin@akin-machine:~/tools/system$ simg2img system.img system.img.ext4
akin@akin-machine:~/tools/system$ sudo mount system.img.ext4 ~/temp/
akin@akin-machine:~/tools/system$ sudo umount ~/temp/

打包

[email protected]-machine:~$ make_ext4fs -s -l 604M -a system system.img temp/
Creating filesystem with parameters:
    Size: 633339904
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7744
    Inode size: 256
    Journal blocks: 2416
    Label: 
    Transparent compression: none
    Blocks: 154624
    Block groups: 5
    Reserved block group size: 39
Created filesystem with 1212/38720 inodes and 67353/154624 blocks
    Total files: 1085
    Total bytes: 252503255
[email protected]-machine:~$ ls
8085Q    Desktop    examples.desktop  Pictures    temp       Videos
android  Documents  Music             Public      Templates
bin      Downloads  -n                system.img  tools

recovery.img

1.獲取recovery.img
第一種:從原廠刷機包中提取recovery.img
第二種:從手機上面提取

 root手機
 adb shell 
 su
 1.如果是高通晶片的手機,採用以下命令將recovery.img拷貝出來
 dd if=/dev/block/platform/msm_sdcc.1/by-name/recovery of=/storage/sdcard/recovery.img

 或者是:
 cd /dev/block/flatform/msm_sdcc.1/by-name/
 ls -al命令可以看到revoery其實是個連結檔案,連結到/dev/block/mmcblk0p*  這個分割槽塊,因此也可以使用一下命令:
 dd if=/dev/block/mmcblk0p16 of=/storage/sdcard/recovery.img
2.如果是MTK晶片的手機

有兩種方式:

dd if=/dev/recovery of=/storage/sdcard/recovery.img bs=1024 count=6144
dd if=/dev/block/mmcblk0 of=/storage/sdcard/recovery.img skip=xxxx bs=1024 count=6144


注意:bs的值目前可以固定1024count的值需要檢視cat /proc/dumchar_info檔案對應的recovery大小來確定(高通平臺沒有dumchar_info這個檔案),

比如size一列為0x600000,那麼count的值為6144,也就是6M,如果為0x700000,那麼count的值為7168,也就是7M大小。

skip代表偏移,因為MTK平臺recovery和boot等都在一個相同的分割槽中,通過地址偏移量來區分,這就是為什麼高通平臺不需要執行bs 和count的原因。

解包

#./mkboot recovery.img outFilePath

打包

./mkboot outFilePath recovery.img

相關推薦

Android ramdisk,boot,system.img 打包

一、ramdisk介紹 ramdisk通過字面意思就大概能理解意思,ram disk虛擬記憶體盤,將ram模擬成硬碟來使用的檔案系統。對於傳統的磁碟檔案系統來說,這樣做的好處是可以極大提高檔案訪問速度;但由於是ram,所以在掉電後,這部分內容不能儲存。ramd

boot.img打包過程

MTK平臺: boot.img打包過程: boot.img=header+kernel+ramdisk.img LK會使用header裡面的引數。 mkbootimg header引數在BoardConfig.mk檔案裡定義:BOARD_KERNEL_BASE = 0x40

imx6sl recovery.img 打包

1.工具 split_bootimg.pl (./device/fsl/common/tools/split_bootimg.pl) mkbootfs (./out/host/linux-x86/bin/mkbootfs) minigzip(./out/host/linux-x86/bi

[教程] system.img打包的方法,方便菜鳥們製作直刷ROM

作業系統:ubuntu10.10可虛擬機器可其他linux可其他版本 & Windows 7 Ubuntu下操作: 下載unyaffs和yaffs2.tar.gz,並編譯yaffs2再複製到/bin下(自己找資料) 1.Ubuntu下,在任意資料夾下面建立一個sys

system.img打包

system.img有兩種格式:raw和sparse。 $file system.img system.img: data 這說明我的system.img是sparse的。 $simg2img system.img system.raw $file system.raw

使用apktool打包apk

植入程式碼  使用apktool解包要植入程式碼的apk(以下稱為A),  使用apktool解包包含待植入程式碼的apk(以下稱為B).  -將B的AndroidManifest.xml中相應的許可權和各元件宣告資訊複製到A中.  -把B的相應的smali檔案複製到A中.  -把B的相應的佈局檔案複製到A中

ramdisk.img system.img userdata.img介紹及打包方法

http://www.diybl.com/course/6_system/linux/linuxjq/20111128/563204.html Android 原始碼編譯後,在out/target/product/generic下生成的三個映象檔案:ramdisk.i

boot.img打包

轉自:http://blog.csdn.net/wh_19910525/article/details/8200372 Android 產品中,核心格式是Linux標準的zImage,根檔案系統採用ramdisk格式。這兩者在Android下是直接合並在一起取名為boot.img,會放

[android]system.img文件的打包和解

tin pre port ast 1.0 linux factory bridge 修改 1:system.img的兩種格式 system2_0.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655

dubbo-php-framework的資料邏輯解析

前面分析了框架的請求和回覆實體的封裝,而在進行底層網路通訊時,需要進行解包(收到資料)和組包(傳送資料),框架底層使用了dubbo協議,資料序列化方式是json格式,這篇文章我們就重點看看解包和組包的邏輯,這部分邏輯在DubboParser類中完成,這個類定義在dubbo-p

Android安全/應用逆向--25--使用Apktool打包

7-2、使用Apktool解包並打包 目前apktool是最通用的解包及二次打包工具。 需要注意的是,APKtool使用不當會導致區域格式化,後果相當嚴重!因此我們通常使用以下架構: 1、 新建資料夾A

python中引數、變數

這是學習python的第10課,主要學習了另外一種將變數傳遞給指令碼的方法,也就是用  argv  來傳遞變數。 from sys import argv #read the WYSS section for how to run this script,first,s

將第三方apk編譯進Android系統檔案system.img

1、把apk拷貝到out\target\product\generic\system\app中。 執行命令make snod , 把新增的spk編到system.img 中 2、使用mkyaffs2image工具,把apk及相關檔案(如.so)拷

python中的 序列元組之(序列鏈式賦值!)

python語言的 元組和序列 支援序列解包或鏈式賦值 和 序列打包: #序列解包全部支援! a,b,c = 1,2,3 #元組解包 a,b,c = (1,2,3) #元組解包 a,b,c = [1,2,3] #序列解包 a,b,c = {1,2,3} #集合解包 #序列打包僅支援元組和序列

android 5.x system.img 大於2G導致編譯otapackage時報錯如何處理

1、sign_target_files_apks2、replace_img_from_target_files.py 3、ota_from_target_files4、img_from_target_files.py 5 、img_from_target_files6、common.py 7、add_img

習題13--引數、變數

一:程式碼 from sys import argv script, first, second, third = argv print "The script is called:", scri

替換Android系統映象system.img的方法

之前修改了Android的系統原始碼的framework層程式碼,定製ROM。通過make之後會生成三個映象檔案userdata.img、system.img、ramdisk.img三個檔案。這個時候

Scala詳---------引用

摘要: 在本篇中,你將會了解到Scala中的包和引入語句是如何工作的。相比Java不論是包還是引入都更加符合常規,也更靈活一些。本篇的要點包括: 1. 包也可以像內部類那樣巢狀 2. 包路徑不是絕對路徑 3. 包宣告鏈x.y.z並不自動將中間包x和x.y變成可見 4. 位於檔案頂部不帶花括號的包宣告在整個檔

ubuntu下recovery.img打包方法

為了方便各位機友製作自己的recovery.img,特推出解包打包的方法。 1.安裝好ubuntu系統,下載附件:,並解壓到ubuntu系統的主資料夾。 2.把將要解包的recovery.img放到主資料夾的tool裡。 3.解包recovery.img,開啟終端,輸入:

android 如何調整System.img 大小,從而多內建應用

通過excel 開啟: alps/mediatek/build/tools/ptgen/partition_table.xls, 表中的MT6573 no 子表, 修改 11 行/G 列 如預設11行: 11 ANDROID YAFFS2 1500000 DD00000 2