如何制作安卓用的Ubuntu for arm的安卓img镜像修改工具

&&&&&&&&&&&&&&&&&&
posts - 189,comments - 115,trackbacks - 0
留言簿(31)
我参与的团队
Friend-Blog
Linux_driver
when you come back to me again
SutraResearch
IP Address
阅读排行榜
评论排行榜
以下是偶翻译的关于boot.img和recovery.img的编辑和修改方面的文章,希望能够为感兴趣的朋友节约一些看资料的时间。感谢本文的作者:Alansj, DarkriftX, RyeBrye, Will, Try OP9, Tonyb486, Timmmm, Lxrose还有好多不知名的作者们在wiki上的不懈努力。如何解包/编辑/大包boot.img文件很多人用自己的方式解决了boot.img的解包/编辑/打包的问题,有人要求我来写一篇关于boot和recovery映像的文件结构和如何对其编辑的文章,于是就有了下面这篇文章。目录1、背景知识2、boot和recovery映像的文件结构3、对映像文件进行解包、编辑、打包的常规方法3.1、另一种解包、编辑、打包的方法4、将新的映像刷回到手机5、解包、编辑、打包为我们带来了什么6、本文讲的内容与使用update.zip刷机包不是一码事正文1、背景知识Android手机的文件系统有许多存储器组成,以下是在adb shell下面的输出:#cat /proc/mtddev:& & size& &erasesize&&namemtd0: 20000 "misc"mtd1: 20000 "recovery"mtd2: 20000 "boot"mtd3: 20000 "system"mtd4: 20000 "cache"mtd5: 04ac0 "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里面去或许会变砖。一定要注意这一点!(译者的话,关于这个/system/recovery.img文件,在2.1的android的平台里面并没有找到,或许这个机制已经out了?!或者偶本人对这段话的理解不够深入?!希望明白的朋友不吝斧正)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(可以用于设置很多系统的参数)等文件。如果你您希望了解更多关于此文件的信息可以参考以下网址:http://git./?p=kernel/common.a=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和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目录下面自动生成。下载地址:http://git./?p=platform/system/core.a=f=mkbootimg现在,如果不想背这些复杂的命令或者摆弄那个让人眩晕的16进制编辑器的话,可以尝试使用我编写的用于解包和打包的perl脚本了。希望这些脚本能够节约各位的键盘。3.1、另一种解包、编辑、打包的方法下载split_bootimg.zip文件(译者注,会在本文的附件中提供),在此zip文件中包含一个perl文件,split_bootimg.pl脚本,该脚本可以读取boot.img头(根据Android源码中的bootimg.h读取)将kernel和ramdisk读取出来,此脚本也会输出内核命令行和板子名字。(注意,不要使用从/dev/mtd/mtd2直接拷贝出来的boot.img,此映像可能在读取过程遭到损坏。)下面是一个从TC4-RC28更新中提取出来的boot.img进行解包操作:% ./split_bootimg.pl boot.img&Page size: 00800)Kernel size: x)Ramdisk size: x000228ce)Second size: 0 (0x)Board name:&Command line: no_console_suspend=1Writing boot.img-kernel ... complete.Writing boot.img-ramdisk.gz ... complete.解包ramdisk的命令如下:% mkdir ramdisk% cd ramdisk% gzip -dc ../boot.img-ramdisk.gz | cpio -i% cd ..解码完毕后,就可以修改了(例如,在default.prop设置ro.secure=0等等)使用mkbootfs工具(mkbootfs工具是编译完毕Android源代码以后,就会在~/android-src/out/host/linux-x86/bin自动生成)来重新创建ramdisk,可以使用如下命令来操作:% mkbootfs ./ramdisk | gzip & ramdisk-new.gz使用mkbootimg来重新创建boot.img,mkbootimg也可以在~/android-src/out/host/linux-x86/bin目录中可以找到:% mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk ramdisk-new.gz -o boot-new.img(注意:console=null的命令行选现是从TC4-RC30的boot.img引入的,用以去掉root shell)4、将新的映像刷回到手机可以将recovery.img拷贝到/system目录下面,然后重新启动手机,让手机自动为你您刷写到mtd里面(工作原理在上面已经提过了)。对于boot.img可以通过将其拷贝到sd卡的根目录,然后通过手机内的刷写工具将此映像写入到手机中。例如,使用adb工具将boot.img拷贝到手机的sd卡的根目录:adb push ./mynewimage.img /sdcard然后通过adb shell登录手机的shell交互模式,利用命令行进行交互:# cat /dev/zero & /dev/mtd/mtd2& &write: No space left on device [this is ok, you can ignore]# flash_image boot /sdcard/mynewimage.img然后重启手机。如果手机能够正常启动,那么祝贺你您,你您的修改和替换已经成功了;如果不能够顺利启动,则需要重新启动进入recovery模式,并且使用update.zip来恢复。5、解包、编辑、打包为我们带来了什么可以修改手机开机启动时候的画面,具体的操作的地址为:http://forum./showthread.php?t=4434316、本文讲的内容与使用update.zip刷机包不是一码事您可以很容易地在其他论坛上看到关于如何自制update.zip刷机包的方法,也可以下载到很多在网络上共享的自制刷机包。例如:近期的多数刷机包都来自对rc30包的修改和调整。在update.zip刷机包里面会包括新的boot.img,recovery.img以及整个system/目录下的若干文件的替换和更新。如果您希望自己自制boot.img以及recovery.img,建议您选取相对较新的更新和版本。(选用较老的映像的话,或许会出现兼容性问题)。
阅读(4743)如何制作安卓用的Ubuntu for arm的img镜像? - 知乎5被浏览986分享邀请回答1添加评论分享收藏感谢收起1000人阅读
ARM嵌入式软件(12)
本文参考了文章《史上最详细android4.4源码下载和编译全过程》,见,还花了10个资源分在CSDN上下载了下来,实际操作还是与文章有点出入。
用的VMware workstation的虚拟机软件是11.0,它需要是win 7以上系统,并且是64位的,xp的装不了,只能装10.0的。
Ubuntu 12.04.5 LTS的64位系统,需要4G内存,60G硬盘。有人问,为什么不用Ubuntu 14.04,我也尝试过,出现稀奇古怪的问题比较多,而且在我的电脑上gcc还降不了级,没办法听说12.04的错误比较少,就相中了他,实践来看,果然还是12.04的好用。
1、安装等工具包
JDK(),注意,必须是文件,我们的系统是位的,然后去网站注册了下载了的包,下下来后,修改使其具有可执行权限。
sudo&chmod&777&jdk-6u38-linux-x64.bin
./jdk-6u38-linux-x64.bin
然后就是用编辑文件,在最后加上有关的一些环境变量:
sudo&vi&/etc/profile
export&JAVA_HOME=/home/cxy/jdk-1.6_30
export&JRE_HOME=/home/cxy/jdk-1.6_30/jre
export&CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export&PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
这个要根据自己解压的包在哪里来设置,然后保存退出在终端窗口输入来查看我们的包安装好了没有。
安装交叉编译工具链,解压到下后,但是还没设置环境变量,有些命令它会找不到的,把中文件的路径加入其中,这个估计不设置编译的没问题,但是可能编译在上跑的内核时需要。
下面就是一些其他工具软件的安装:
1、sudo&apt-get&install&ia32-libs-multiarch:i386
2、sudo&apt-get&install&flex
3、sudo&apt-get&install&g++
4、sudo&apt-get&install&gpref
5、sudo&apt-get&install&bison
6、sudo&apt-get&install&libxml2-utils
编译内核,还需要安装一下两个软件包:
7、sudo&apt-get&install&libncurses5-dev
8、sudo&apt-get&install&sharutils
注:如果在本虚拟机系统上编译的源码,则要进行如下操作:
在上面安装过的就不用安装了,注意上面的工具包的名字中字母“”和数字“”的区分,另外还要进行、降级,
另外,本人在编译过程中遇到一个错误:
/usr/bin/bash:cc&command&not&found
解决方法是在目录下执行
sudo&ln&-s&gcc&cc
在编译android 4.4的源码时,gcc不用降级,但是编译android 4.0的时候gcc我降级到了4.4.
g++降级到后,后面还要安装一个工具包:
sudo&apt-get&install&g++-4.4-multilib
2、编译源码
先解压出来源码,然后进入源码目录
source&build/envsetup.sh
lunch(先敲这个,它下面会有选项,这里选或者都可以
make&-jN(这里是你的电脑的线程数,比如说你的电脑是核线程的,那么就是,这样可以加速编译过程
接下来就是几个小时的漫长的编译过程啦,我在编译过程中也遇到了一个问题,就是在编译最后提示找不到命令,而这个命令是编译后生成的,在目录下面,所以我又编译,进入目录,执行,编译完,把里面的复制到目录下,再重新就可以啦。
最后,会在源码目录的下面生成个镜像:这就表示成功啦。
&&&另注:编译内核时用确认生成文件再,免得在编译过程中有很多编译项要你确认。
编译感悟:在这个编译过程中,可能会出现一个又一个的问题,不同的软硬件环境可能还会有不同的问题,如果实在不行,可以再换个系统试试,遇到问题,也可以多到网上去查查,看看问题在哪里,还可以参考安卓源码官网的编译要求。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:55969次
积分:1378
积分:1378
排名:千里之外
原创:76篇
转载:20篇
(5)(1)(1)(4)(7)(11)(7)(7)(19)(2)(2)(2)(11)(3)(2)(1)(11)查看: 56582|回复: 10
[转]在Android的平板上安装Ubuntu Linux操作系统附教程!
(m7测试只能单点触摸,速度还行建议使用1.2ghz固件,在此推荐y大的0805修改版)欢迎各位童鞋测试并讨论!为m7精彩注力!!!在Android上安装Ubuntu的! 对于那些想你的Android智能手机或平板设备上安装Ubuntu的,这里的普遍指导我们如何做到这一点 。(本指南是基于1ghz 512ram)(一下了内容转自机锋网,特此申明)3 `2 S. Z9 _* p/ T2 C) R$ L
在进行安装之前,先在
ubuntu.zip on Megaupload
&&U4 L5 V5 I( d3 y4 W
下载Ubuntu.zip并且解压它
(最好解压在储存卡的其他地方)& Z4 t: n# B+ F7 J
) E/ ^. T$ ~3 U+ Y; f1 M
1.首先,你需要获得Nexus One或者其他Android手机的Root权限,如果你用的是Nexus,& J% O$ F1 I# B% I: J% c- C' S0 {
在这里寻找方法获得你的手机的root权限(推荐各位直接在安卓找就可以了)7 M&&c1 i# x/ I$ l4 U5 s# y7 s1 U
更新:你也需要安装最新的BusyBox, C3 o, |: u, `) L
2.现在你有了一台获得了Root权限的Android手机了,你可以在Chroot下运行ubuntu了.
(Chroot简略解释:Chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 `/`,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 `/` 位置。)
3.我们需要复制一些东西来运行chroot,这些东西包括了一个ubuntu ARM的镜像,安装的脚本(ubuntu.sh),chroot的启动文件(bootubuntu),unionfs,fsrw以及mountonly.
把这六个文件复制到你的储存卡根目录下的ubuntu目录(自建),或者你可以直接把ubuntu.zip文件解压开了后把整个ubuntu文件夹复制到储存卡的根目录.
如果你希望安装其他的linux,只需要改变ubuntu.sh这个安装文件的名字就可以了,你可以安装比如debian.&&j/ R/ `) N. A5 K# l) N
- m&&v. q/ s9 M* ]# F3 k5 Z0 m7 L
4.在你继续之前,确认在你的手机上USB存储是关闭的,因而我们可以用ADB Shell来连接储存卡( h/ t: z/ \; B2 O4 p
同时我们还要确认USB 除错模式(USB Debugging mode) 你可以在Setting-&Applications-&Development下找到.2 ?&&d0 B. c2 B
当然,不要忘记了把你的手机用USB线连接上你的电脑.
5.假设你已经安装了Android的SDK(没有装过的可以去这里看看那.cn/sdkxiazai/)
进入你的Android SDK目录,并且运行ADB Shell- `7 m9 A4 B&&H1 ~
(对于windows用户来说,在Cmd下进入SDK的tool目录,然后用&adb shell&来启动)
. d3 `! M7 i& P2 o# ]! H
对于Linux用户来说,在控制台进入该目录,然后用&sudo ./adb shell&来启动)1 Y( C. H/ x, _8 W3 k% z
6.当你进入ADB SHELL中的时候,你可以看见一个#字标识.很好,接着可以立刻开始启动你的Ubuntu了
7.用&su&进入管理员权限模式.顺便说一下,如果你在这个部分出错了,那么标志着你没有成功root你的手机.
, T2 ~; _0 W6 {
8.下一步,用&cd /储存卡/ubuntu&,这会把你带到你的ubuntu文件夹中. d% H' ~) O( Q) B
& T7 Q& {2 E. F; z/ E
9. 使用&sh ./ubuntu.sh&来启动安装脚本
- B: I$ N' L, t$ h, c, K! I$ X
10.当它完成之后,你就可以输入&bootubuntu&来进入你手机上的ubuntu了!+ l/ s2 w3 o: E; }1 D5 p
当你看到上面的界面的时候,说明你刚刚成功地将ubuntu安装在了你的手机上2 ^1 J1 ~7 h$ Q& \& _; ~- u
& @9 p& e: U4 P8 J: b) A
如果你没有安装成功,没关系,我在两天的时间里尝试了几千次(作者),你不孤单., ~8 D&&A) P' o# |+ T. S
8 S6 \( V0 E6 E8 L+ I
尝试重启你的手机并且小心地重复5到10步.
同时,如果你用的不是Nexus One,你可以进行尝试,但不一定能够成功* N/ W! \) ?6 C+ }
+ l5 a, ^. q4 _% l
% F, c& y$ P& D&&e1 Z6 d5 _
翻译完安装部分了,安装到这里为止已经可以得到一个可以使用的ubuntu了,不过依旧是命令行界面的,如果要用图形界面的可以看下原文下面的讲解或者等我更新翻译
祝大家都能成功在Nexus上安装到ubuntu
本帖最后由 sivajin 于
13:30 编辑
除了好玩 貌似没别的用处了。居然沙发了
转过来的排版太有问题了,还是到原链接看好了
虚拟键盘,在安卓里用终端都给我郁闷死了,还linux,还不是原生的。。
当初在EPC901上安装过android,现在倒是反过来,在mid上安装Linux Ubuntu……
在9派转的,我看过
如果novo7&&mips上能安装标准版linux& &或提供&&linux& &wince固件的话,也许他会成为一代经典。一个品牌的崛起总是需要经典的,就像重要历史人物起的作用一样。智器为啥有那么多铁杆,因为有 v5&&q5&&t5&&v3&&t7
无法下载,能否发一份?谢谢楼主
白色和黑色音质有差吗
看看很厉害的样子! 好羡慕1
客观 包容 敏锐 专业
iMP3.net 随身数码影音
推广合作:139
莫凡配件:135
All Rights Reserved.

我要回帖

更多关于 安卓xp精简版镜像img 的文章

 

随机推荐