静态编译parted在Android上运行
【前言】
现在有越来越多的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上运行相关推荐
- 编译可在Android上运行的qemu user mode
前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的"NDK"若无特殊说明均指"Android ...
- android通过c调用shmat函数,编译可在Android上运行的qemu user mode
编译可在Android上运行的qemu user mode @(Android研究)[android|qemu] [TOC] 前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编 ...
- 编译可在Android上运行的qemu
本文在ubuntu20.04上对qemu进行交叉编译 注意:NDK编译器工具API级别要在30以后,最好用33 因为只有30以后的版本支持函数memfd_create,详情请看http://t.csd ...
- ace+arm+linux,用NDK编译ACE在Android上运行
1.准备工具链 ./build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-Androideabi-4.4.3 --arch=ar ...
- 编译可在Android上运行的依赖库(二):gettext库
随着代码的不断更新,原来的文章有很多地方已经不适用于现在,所有增加了本文章,对过去NDK交叉编译gettext源码进行更改和补充. 下载gettext源码gettext-0.21.tar.gz: In ...
- 编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)
编译可在Nexus5上运行的CyanogenMod13.0 ROM (基于Android6.0) 作者:寻禹@阿里聚安全 前言 下文中无特殊说明时CM代表CyanogenMod的缩写. 下文中说的&q ...
- python程序在安卓上如何运行-在 android 上运行 python 的方法
在android上运行python脚本,或者在android上使用python交互界面,对熟悉python的研究或开发人员来说,是一件很有吸引力的事情,因为python脚本真是非常高效,另外,有很多非 ...
- 如何用android下载python_如何在android上运行Python代码
展开全部 在android上运行python脚本,或者在android上使用python交互界面,对熟悉python的研究或开发人员来说,是一件很有吸引力的e69da5e6ba906261696475 ...
- 安卓如何运行python_如何在android上运行Python代码?
这个非常简单,Termux和QPython3这2个安卓APP就可以,都集成了Python解释器,可以直接编辑运行Python代码,下面我简单介绍一下: Termux 这是一个安卓高级终端APP,类似于 ...
最新文章
- 优达学城《DeepLearning》2-4:自编码器(无监督学习算法)
- 阿里巴巴为什么不建议直接使用Async注解?
- 基于7个案例,分享我对“提示信息设计”的思考
- EasyUI 分页 偶遇 问题
- 怎么调用系统通讯录并向被选中联系人发送短信
- php mysql 执行sql文件_PHP执行SQL文件并将SQL文件导入到数据库_PHP
- tl r402路由器设置_记一次TP-LINK路由器问题排查
- mysql組合主鍵_MySQL(二)
- 学科竞赛作品 智能家居受控端
- NYOJ15括号匹配
- 算法导论第22章部分答案
- 花瓣图形 -《跟小海龟学Python》案例代码
- 自我鉴定计算机专业大学,大学生计算机专业的自我鉴定书
- CCProxy使用 记录
- NLP专题直播 | Transformer, BERT, ALBERT, XLNet全面解析(ALBERT第一作者亲自讲解)
- mac最强项目管理工具OmniPlan极速入门
- 零基础学习SQL第一节
- 记录elmoformanylangs安装
- 思科网络学院-网络互联-第三章
- 圆锥曲线万能弦长公式_二次曲线中的万能弦长公式
热门文章
- 30 天精通 RxJS (03): Functional Programming 通用函数
- Agv、Rgv 车辆控制调度系统开发第六篇-流程控制器
- 基于 Laravel PHP 框架的房地产管理系统
- vb6 实现奇门遁甲起局排盘、格局分析概要
- 树莓派散热风扇自动启停
- mysql中多个表 master salve同步搭建过程
- 高手面试一个人,问4个问题就够了
- Centos7服务器时间同步及国内常用时间同步服务器地址 自建时间同步服务器ntpdate...
- 1.平台介绍:FISCO BCOS 区块链
- JSHint 与 JSLint 的区别