1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年8月17日 |
---|
#200 in #android
30KB
564 行
android-bootimage
处理 Android 启动映像的工具。目前它仅适用于三星启动映像。
目录
构建
整个项目是用 Rust 编程语言编写的,并使用 cargo 构建。要编译程序,请安装 Rust 和 Cargo,然后简单地运行以下命令。二进制文件将随后在 ./target/release/android-bootimage
中可用。
git clone https://gitlab.com/binero/android-bootimage.git
cd android-bootimage
cargo build --release
它是如何工作的?
目前,该工具仅适用于基于三星的启动映像。三星使用与 Android 不同的图像格式来处理其图像。该工具可以解包这些启动映像,并且可以显示用户图像的组成。
解包
要解包映像,请使用以下命令
android-bootimage unpack boot.img --unpack-all
这将在命令执行的相对位置创建一个 boot/
目录。在此目录中,您将找到启动映像每个分区的 SECTION.img
。要更精确地控制要提取的文件和提取的位置,请传递 --help
标志。以下示例仅将内核提取到当前目录中的 zImage
文件中。
android-bootimage unpack boot.img --kernel ./zImage
某些设备的启动映像页面大小设置为 0。当这种情况发生时,工具无法提取启动映像,并将警告用户。如果用户知道页面大小,则可以使用 --page-size
参数传递它。页面大小通常是 2048 字节。
android-bootimage unpack boot.img --page-size 2048 --unpack-all
提取 ramdisk
作为最后的例子,我们将从启动映像文件中提取 ramdisk 并将其提取出来。
android-bootimage unpack boot.img --page-size 2048 --ramdisk ramdisk.img
mkdir ramdisk
cd ramdisk
gzip -dc < ../ramdisk.img | cpio -i
列出分区
要列出启动映像中的不同分区,请简单运行
android-bootimage secions boot.img
在未设置有效页面大小的平台上,它必须手动指定。通常它是 2048 字节。
android bootimage sections boot.img --page-size 2048
输出将类似于以下内容。请注意,空(大小为 0)分区未列出。
0x00000000 - header (size: 616 B)
0x00000800 - kernel (size: 5.31 MiB)
0x0054F000 - ramdisk (size: 4.48 MiB)
0x009C9800 - device_tree (size: 256 B)
未来工作
项目仍缺少一些重要功能。
- 它不能创建启动映像。我正在积极努力确保将来可以实现这一功能。
- 它不能处理非三星启动映像。
由于我只拥有两个三星设备(用于测试),我将无法使该程序适用于非三星设备。如果有人提供帮助,我将很高兴实现这一点。
依赖关系
~0.9–1.2MB
~12K SLoC