创建博客 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

MTK平台boot解包工具-转发脚本ubuntu上可用unpack.pl  

2012-11-21 16:26:54|  分类: 安卓 |  标签: |举报 |字号 订阅

今天我想将boot.img解包使用好的种方法,在ubuntu下都没有解开。
后来发现mtk下解包与普通平台不同,需要去除512M多余的加密字节等等,
脚本如下:unpack.pl 


#!/usr/bin/perl -W

# script from Android-DLS WiKi
#
# changes by Bruno Martins:
# - modified to work with MT6516 boot and recovery images (17-03-2011)
# - included support for MT65xx and eliminated the need of header files (16-05-2012)

use strict;
use bytes;
use File::Path;

my $usage = "unpack-MT65xx.pl <image>\n";

die "\nUsage:\n\n$usage" unless $ARGV[0];

my $bootimgfile = $ARGV[0];

my $slurpvar = $/;
undef $/;
open (BOOTIMGFILE, "$bootimgfile") or die "could not open boot img file: $bootimgfile\n";
my $bootimg = <BOOTIMGFILE>;
close BOOTIMGFILE;
$/ = $slurpvar;

my($bootMagic, $kernelSize, $kernelLoadAddr, $ram1Size, $ram1LoadAddr, $ram2Size, $ram2LoadAddr, $tagsAddr, $pageSize, $unused1, $unused2, $bootName, $cmdLine, $id) = unpack('a8 L L L L L L L L L L a16 a512 a8', $bootimg);

my($kernel) = substr($bootimg, $pageSize, $kernelSize);

open (KERNELFILE, ">$ARGV[0]-kernel.img");
binmode(KERNELFILE);
print KERNELFILE $kernel or die;
close KERNELFILE;

print "\nkernel written to $ARGV[0]-kernel.img\n";

my($kernelAddr) = $pageSize;
my($kernelSizeInPages) = int(($kernelSize + $pageSize - 1) / $pageSize);

my($ram1Addr) = (1 + $kernelSizeInPages) * $pageSize;

my($ram1) = substr($bootimg, $ram1Addr, $ram1Size);

# chop ramdisk header
$ram1 = substr($ram1, 512);

if (substr($ram1, 0, 2) ne "\x1F\x8B") {
die "the boot image does not appear to contain a valid gzip file";
}

open (RAMDISKFILE, ">$ARGV[0]-ramdisk.cpio.gz");
binmode(RAMDISKFILE);
print RAMDISKFILE $ram1 or die;
close RAMDISKFILE;

print "\nramdisk written to $ARGV[0]-ramdisk.cpio.gz\n";

if (-e "$ARGV[0]-ramdisk") {
rmtree "$ARGV[0]-ramdisk";
print "\nremoved old directory $ARGV[0]-ramdisk\n";
}

mkdir "$ARGV[0]-ramdisk" or die;
chdir "$ARGV[0]-ramdisk" or die;
system ("gzip -d -c ../$ARGV[0]-ramdisk.cpio.gz | cpio -i");

print "\nextracted ramdisk contents to directory $ARGV[0]-ramdisk\n";




参考 :


和申的个人主页,1985wanggang,和申Large Visitor Globe
  评论这张
 
阅读(1790)| 评论(0)
推荐 转载

历史上的今天

最近读者

热度

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2014