【前言】

现在有越来越多的Android手机用上了GPT分区表。我目前接触过的有:华为C8816、G6-C00、Ascend P6,中兴U880E,还有亚马逊Kindle Fire。目前我不太好解释GPT 分区表相对于之前安卓手机广泛使用的MBR分区表有什么优势(毕竟手机不同于电脑;电脑上超过2TB的硬盘必须要用GPT才能完全识别),但这至少是新技术,一代更比一代强。

我观察到,网上大神们分享了不少给安卓手机重新分区的教程。他们用的是fdisk工具,针对大部分还在用MBR分区表的手机。可是像用GPT 分区表的新手机,用fdisk是没办法识别的(这一点,用Linux的朋友应该会有体会)。实测我的C8816运行"fdisk -l /dev/block/mmcblk0"时,只能读出一个EFI GPT分区,根本没办法显示出分区表。而我打开/proc/partitions查看分区信息一看,手机里其实是有25个分区的。

难道就真的没有办法了吗?

嘿嘿,当然不是了!这里有一个真正可以称得上是“大神”的工具,就是大名鼎鼎的GNU parted 工具!它是Linux下开放源代码的分区工具,完美支持GPT和MBR分区表,弥补了fdisk工具的缺憾。

我们的目标是:把parted工具通过交叉静态编译,移植到到Android手机中。这样理论上只需要一个可执行文件,就可以在大部分的Android手机上运行了。

【前提要求】

1.系统:Ubuntu等发行版的Linux系统。如果没办法装,请使用Cygwin。百度一下你就知道。

2.编译器:arm-linux-gcc。这个百度上安装文件和安装方法也有;如果用Cygwin请下载专用版本。

这个安装教程不错:arm-linux-gcc下载与安装_百度文库 http://wenku.baidu.com/link?url=CeCJg-KNFhJteKx8bX7uYTN9Udju-aB98Pk-9Po6DN1CSrc76wuxNWfIdRnhUh-MEWVnEvKvbzVqH_bqZ1158gRHvKmslz2DmN1mBcG8PG7

3.要求手机已经Root,否则这个工具没办法运行!

4.手机上安装终端工具(推荐使用终端模拟器——Terminal Emulator:http://as.baidu.com/a/item?docid=6609286&f=web_alad_6)。为了方便复制文件,最好再配合RE管理器

【注意】

目前能静态编译的parted版本只有比较旧的parted-1.6.25,新版本已经不支持。但1.6.25已经完全够用。

【源代码下载】

http://download.csdn.net/detail/wanglin1950/3466383

感谢CSDN网友wanglin1990分享

【具体步骤】

工作目录:/home/administrator/(即用户主目录,可以用~代替)

1.先编译e2fsprogs库。其中包含了parted工具必不可少的libuuid库。

(1)下载:在Ubuntu中打开终端,输入

cd ~
sudo apt-get source e2fsprogs

回车,就可以把源代码下载到主目录里面了。我下载到的源代码文件是:e2fsprogs_1.42.5.orig.tar.gz。另外几个不必理会。

(2)解压

继续输入命令

tar -xvf e2fsprogs_1.42.5.orig.tar.gz

源代码就会自动解压到主目录的e2fsprogs_1.42.5目录下。输入

cd e2fsprogs_1.42.5

进到解压后输出的目录中。

(3)编译

依次执行如下命令

./configure --host=arm-linux              #预先编译,生成Makefile文件
make                                      #正式编译
make DESTDIR=~ install-libs               #完成安装。这一步是为了得到我们需要的libuuid

执行完成 后,在主目录下可以得到一个usr文件夹。其中的include、lib里面存放的就是parted编译时所需要的头文件和库文件了——libuuid就在里面。

2.正式开始编译

(1)按上面的链接,把parted-1.6.25的源代码下载到主目录中。

(2)解压

依次输入如下命令:

cd ~
tar -xvf parted-1.6.25.tar.gz

(3)预先设置

前面我们已经说过,parted工具依赖于libuuid库,所以我们要在编译之前指定好make的CFLAGS参数(设置成环境变量),让parted的./configure脚本识别出来。

输入命令

<span style="font-size:18px;">export CFLAGS="-I/home/administrator/usr/include -L/home/administrator/usr/lib"</span>

(4)编译

依次输入如下命令

<span style="font-size:18px;">cd parted-1.6.25
./configure --host=arm-linux --disable-device-mapper --without-readline         #预先编译,生成Makefile
make                                                                            #正式编译</span>

(5)获取编译好的可执行文件

源代码目录下有一个parted文件夹,里面就由我们的可执行文件parted,把它复制到Android手机上。

编译出来的可执行文件有1.2MB左右,这对于交叉静态编译的程序来说是再正常不过的。因为程序运行时需要的各种库文件都囊括于其中,这样在不同的Android设备上运行的时候就不至于再出现令人抓狂的错误了:

<span style="font-size:18px;"># ./parted
parted: No such file or directory</span>

或者是

<span style="font-size:18px;">$ ./parted
Segmentation Fault</span>

我试过把我在这里编译好的parted放到上述“我接触过”的几台手机中,都能正常运行。

3.测试

假设SD卡目录为/sdcard。
(1)设备连上电脑,打开MTP模式或USB存储设备,把parted可执行文件放到SD卡中。

(2)用RE管理器把parted可执行文件放到/system/bin 或/system/xbin 中(强烈建议后者)。

习惯终端操作的朋友可以在终端模拟器中试试(注意$和# 不用输):

<span style="font-size:18px;">$ su
# mount         //在mount命令输出的挂载信息中找到system的那一行,记下它对应的设备节点名称,如/dev/block/mmcblk0p12
# mount -o remount,rw <设备节点名称> /system
# cp /sdcard/parted /system/xbin</span>

(3)设置权限

打开终端模拟器,输入命令(注意$和# 不用输)

<span style="font-size:18px;">$ su
# chmod 777 /system/bin/parted
# chmod 777 /system/xbin/parted</span>

(4)测试

直接在终端中输入

<span style="font-size:18px;">parted</span>

如果出现以下的提示,就说明我们的编译成功了:

<span style="font-size:18px;">Error: No device found.Retry/Cancel?</span>

输入r,回车退出。然后更进一步,测试它能否识别eMMC:

<span style="font-size:18px;">parted /dev/block/mmcblk0</span>

如果插入了外置SD卡,也不妨试试

<span style="font-size:18px;">parted /dev/block/mmcblk1</span>

回车,熟悉的parted界面出现在我们的眼前。然后试试print命令,获取分区表。

以下是亲测的效果图:

至此,parted交叉静态编译成功!

参考资料

[1]《嵌入式 linux 分区工具(parted) 交叉编译过程》,fjfhccfkuk,http://blog.163.com/fjfhccfkuk/blog/static/3665929920120532710413

[2]自由调整ROM与Sdcard空间大小,亚马逊Kindle Fire内存分区方法详细教程 ,adb,http://bbs.imp3.net/thread-10515210-1-1.html

静态编译parted在Android上运行相关推荐

  1. 编译可在Android上运行的qemu user mode

    前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的"NDK"若无特殊说明均指"Android ...

  2. android通过c调用shmat函数,编译可在Android上运行的qemu user mode

    编译可在Android上运行的qemu user mode @(Android研究)[android|qemu] [TOC] 前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编 ...

  3. 编译可在Android上运行的qemu

    本文在ubuntu20.04上对qemu进行交叉编译 注意:NDK编译器工具API级别要在30以后,最好用33 因为只有30以后的版本支持函数memfd_create,详情请看http://t.csd ...

  4. ace+arm+linux,用NDK编译ACE在Android上运行

    1.准备工具链 ./build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-Androideabi-4.4.3 --arch=ar ...

  5. 编译可在Android上运行的依赖库(二):gettext库

    随着代码的不断更新,原来的文章有很多地方已经不适用于现在,所有增加了本文章,对过去NDK交叉编译gettext源码进行更改和补充. 下载gettext源码gettext-0.21.tar.gz: In ...

  6. 编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)

    编译可在Nexus5上运行的CyanogenMod13.0 ROM (基于Android6.0) 作者:寻禹@阿里聚安全 前言 下文中无特殊说明时CM代表CyanogenMod的缩写. 下文中说的&q ...

  7. python程序在安卓上如何运行-在 android 上运行 python 的方法

    在android上运行python脚本,或者在android上使用python交互界面,对熟悉python的研究或开发人员来说,是一件很有吸引力的事情,因为python脚本真是非常高效,另外,有很多非 ...

  8. 如何用android下载python_如何在android上运行Python代码

    展开全部 在android上运行python脚本,或者在android上使用python交互界面,对熟悉python的研究或开发人员来说,是一件很有吸引力的e69da5e6ba906261696475 ...

  9. 安卓如何运行python_如何在android上运行Python代码?

    这个非常简单,Termux和QPython3这2个安卓APP就可以,都集成了Python解释器,可以直接编辑运行Python代码,下面我简单介绍一下: Termux 这是一个安卓高级终端APP,类似于 ...

最新文章

  1. 优达学城《DeepLearning》2-4:自编码器(无监督学习算法)
  2. 阿里巴巴为什么不建议直接使用Async注解?
  3. 基于7个案例,分享我对“提示信息设计”的思考
  4. EasyUI 分页 偶遇 问题
  5. 怎么调用系统通讯录并向被选中联系人发送短信
  6. php mysql 执行sql文件_PHP执行SQL文件并将SQL文件导入到数据库_PHP
  7. tl r402路由器设置_记一次TP-LINK路由器问题排查
  8. mysql組合主鍵_MySQL(二)
  9. 学科竞赛作品 智能家居受控端
  10. NYOJ15括号匹配
  11. 算法导论第22章部分答案
  12. 花瓣图形 -《跟小海龟学Python》案例代码
  13. 自我鉴定计算机专业大学,大学生计算机专业的自我鉴定书
  14. CCProxy使用 记录
  15. NLP专题直播 | Transformer, BERT, ALBERT, XLNet全面解析(ALBERT第一作者亲自讲解)
  16. mac最强项目管理工具OmniPlan极速入门
  17. 零基础学习SQL第一节
  18. 记录elmoformanylangs安装
  19. 思科网络学院-网络互联-第三章
  20. 圆锥曲线万能弦长公式_二次曲线中的万能弦长公式

热门文章

  1. 30 天精通 RxJS (03): Functional Programming 通用函数
  2. Agv、Rgv 车辆控制调度系统开发第六篇-流程控制器
  3. 基于 Laravel PHP 框架的房地产管理系统
  4. vb6 实现奇门遁甲起局排盘、格局分析概要
  5. 树莓派散热风扇自动启停
  6. mysql中多个表 master salve同步搭建过程
  7. 高手面试一个人,问4个问题就够了
  8. Centos7服务器时间同步及国内常用时间同步服务器地址 自建时间同步服务器ntpdate...
  9. 1.平台介绍:FISCO BCOS 区块链
  10. JSHint 与 JSLint 的区别