Skip to content
This repository was archived by the owner on Jun 28, 2026. It is now read-only.

Commit e8e066f

Browse files
authored
Merge pull request #57 from AkarinServer/master
Add support for MacOS
2 parents dc7efda + 241ee42 commit e8e066f

16 files changed

Lines changed: 453 additions & 27 deletions

File tree

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# OpenixCard
22

3-
Open Source Version of Allwinner PhoenixCard to Dump, Unpack, Flash Allwinner Linux IMG Files on Linux
3+
English | [简体中文](README_ZH.md)
4+
5+
Open Source Version of Allwinner PhoenixCard to Dump, Unpack, Flash Allwinner Linux IMG Files on Linux and MacOS
46

57
[![forthebadge](https://forthebadge.com/images/badges/made-with-c-plus-plus.svg)](https://forthebadge.com)
68
[![forthebadge](https://forthebadge.com/images/badges/made-with-c.svg)](https://forthebadge.com)
@@ -90,7 +92,7 @@ sudo make install
9092
## LICENSE
9193
```
9294
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
93-
95+
9496
Copyright (c) 2022, YuzukiTsuru <GloomyGhost@GloomyGhost.com>
9597
9698
This program is free software; you can redistribute it and/or modify

README_ZH.md

Lines changed: 297 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,297 @@
1+
# OpenixCard
2+
3+
[English](README.md) | 简体中文
4+
5+
Allwinner PhoenixCard 的开源版本,用于在 Linux 和 MacOS 上解包、转储、烧录 Allwinner Linux IMG 文件
6+
7+
[![forthebadge](https://forthebadge.com/images/badges/made-with-c-plus-plus.svg)](https://forthebadge.com)
8+
[![forthebadge](https://forthebadge.com/images/badges/made-with-c.svg)](https://forthebadge.com)
9+
[![forthebadge](https://forthebadge.com/images/badges/powered-by-black-magic.svg)](https://forthebadge.com)
10+
[![forthebadge](https://forthebadge.com/images/badges/uses-git.svg)](https://forthebadge.com)
11+
12+
[![CMake](https://github.com/YuzukiTsuru/OpenixCard/actions/workflows/cmake.yml/badge.svg)](https://github.com/YuzukiTsuru/OpenixCard/actions/workflows/cmake.yml)
13+
14+
## 关于 Android IMG 文件支持
15+
> Android 固件将不被支持,未来也不会适配支持。由于 Android GKI、GMS、GRF 版本众多,无法覆盖所有固件版本,且 Android 固件分区非常复杂,没有通用的方法生成可用的固件,也没有固定的地址使其运行。即使能够适配,也会出现功能不可用的情况,如 fastboot、GMS 服务等。最后,Android 固件修改常用于破解和修改固件,本项目不支持此类行为。
16+
17+
## 程序位置
18+
19+
编译后的可执行文件位于:`build/dist/OpenixCard`
20+
21+
## 基本使用方法
22+
23+
### 1. 查看帮助信息
24+
```bash
25+
./build/dist/OpenixCard --help
26+
#
27+
./build/dist/OpenixCard -h
28+
```
29+
30+
### 2. 查看版本信息
31+
```bash
32+
./build/dist/OpenixCard --version
33+
#
34+
./build/dist/OpenixCard -v
35+
```
36+
37+
## 主要功能
38+
39+
### 功能 1: 解包 Allwinner 镜像文件 (-u)
40+
41+
**用途**:将 Allwinner 格式的固件镜像文件解包,提取其中的分区和文件。
42+
43+
**使用方法**
44+
```bash
45+
./build/dist/OpenixCard -u <镜像文件路径>
46+
```
47+
48+
**示例**
49+
```bash
50+
# 解包名为 firmware.img 的镜像文件
51+
./build/dist/OpenixCard -u firmware.img
52+
53+
# 解包后会生成一个同名的目录,包含所有解包的文件
54+
```
55+
56+
**输出**
57+
- 创建一个目录(通常与镜像文件名相同)
58+
- 目录中包含所有分区和文件内容
59+
60+
---
61+
62+
### 功能 2: 解包并生成分区表配置 (-uc)
63+
64+
**用途**:解包镜像文件,同时生成分区表配置文件(.cfg),用于后续重新打包。
65+
66+
**使用方法**
67+
```bash
68+
./build/dist/OpenixCard -uc <镜像文件路径>
69+
```
70+
71+
**示例**
72+
```bash
73+
./build/dist/OpenixCard -uc firmware.img
74+
```
75+
76+
**输出**
77+
- 解包后的文件目录
78+
- 分区表配置文件(.cfg),记录了分区的布局信息
79+
80+
**使用场景**
81+
- 需要修改固件后重新打包
82+
- 需要了解镜像的分区结构
83+
- 备份分区表配置
84+
85+
---
86+
87+
### 功能 3: 转储镜像 (-d)
88+
89+
**用途**:将 Allwinner 专有格式的镜像转换为标准的镜像格式。
90+
91+
**使用方法**
92+
```bash
93+
./build/dist/OpenixCard -d <镜像文件路径>
94+
```
95+
96+
**示例**
97+
```bash
98+
./build/dist/OpenixCard -d firmware.img
99+
```
100+
101+
**输出**
102+
- 转换后的标准格式镜像文件
103+
- 通常可以直接用于刷机或挂载
104+
105+
**使用场景**
106+
- 将 Allwinner 格式转换为通用格式
107+
- 提取原始镜像数据
108+
- 用于其他工具处理
109+
110+
---
111+
112+
### 功能 4: 获取镜像大小 (-s)
113+
114+
**用途**:获取 Allwinner 镜像文件的准确大小信息。
115+
116+
**使用方法**
117+
```bash
118+
./build/dist/OpenixCard -s <镜像文件路径>
119+
```
120+
121+
**示例**
122+
```bash
123+
./build/dist/OpenixCard -s firmware.img
124+
```
125+
126+
**输出**
127+
- 显示镜像的准确大小(字节数或带单位的大小)
128+
129+
**使用场景**
130+
- 验证镜像文件完整性
131+
- 了解镜像大小以便准备存储设备
132+
- 调试镜像文件问题
133+
134+
---
135+
136+
### 功能 5: 打包镜像 (-p)
137+
138+
**用途**:从解包后的目录重新打包成 Allwinner 镜像文件。
139+
140+
**使用方法**
141+
```bash
142+
./build/dist/OpenixCard -p <目录路径>
143+
```
144+
145+
**示例**
146+
```bash
147+
# 假设已经解包了 firmware.img,生成了 firmware 目录
148+
./build/dist/OpenixCard -p firmware
149+
```
150+
151+
**前置条件**
152+
- 目录中必须包含 `.cfg` 配置文件
153+
- 目录结构必须完整(通常由 `-uc` 命令生成)
154+
155+
**输出**
156+
- 重新打包的镜像文件
157+
158+
**使用场景**
159+
- 修改固件后重新打包
160+
- 创建自定义固件镜像
161+
- 测试镜像打包功能
162+
163+
---
164+
165+
## 完整工作流程示例
166+
167+
### 场景 1: 分析和修改固件
168+
169+
```bash
170+
# 1. 解包镜像并生成配置文件
171+
./build/dist/OpenixCard -uc firmware.img
172+
173+
# 2. 这会生成 firmware 目录和配置文件
174+
# 3. 修改 firmware 目录中的文件
175+
# 4. 重新打包
176+
./build/dist/OpenixCard -p firmware
177+
178+
# 5. 生成新的镜像文件
179+
```
180+
181+
### 场景 2: 转换镜像格式
182+
183+
```bash
184+
# 1. 转储为标准格式
185+
./build/dist/OpenixCard -d firmware.img
186+
187+
# 2. 可以使用其他工具处理转换后的镜像
188+
```
189+
190+
### 场景 3: 检查镜像信息
191+
192+
```bash
193+
# 1. 查看镜像大小
194+
./build/dist/OpenixCard -s firmware.img
195+
196+
# 2. 解包查看内容
197+
./build/dist/OpenixCard -u firmware.img
198+
```
199+
200+
## 注意事项
201+
202+
1. **文件路径**:确保镜像文件路径正确,可以使用相对路径或绝对路径
203+
2. **权限**:确保对目标目录有写入权限
204+
3. **磁盘空间**:解包操作需要足够的磁盘空间
205+
4. **配置文件**:打包时需要 `.cfg` 文件,建议使用 `-uc` 选项生成
206+
5. **备份**:在修改固件前,建议先备份原始镜像文件
207+
208+
## 常见问题
209+
210+
**Q: 如何知道镜像文件是否有效?**
211+
A: 使用 `-s` 选项检查镜像大小,或尝试 `-u` 解包看是否成功。
212+
213+
**Q: 打包时提示缺少配置文件?**
214+
A: 使用 `-uc` 选项解包,会自动生成 `.cfg` 配置文件。
215+
216+
**Q: 可以处理哪些类型的镜像?**
217+
A: 主要用于 Allwinner 芯片的 Linux 固件镜像,不支持 Android 固件。
218+
219+
## 快速参考
220+
221+
```bash
222+
# 查看帮助
223+
./build/dist/OpenixCard -h
224+
225+
# 查看版本
226+
./build/dist/OpenixCard -v
227+
228+
# 解包镜像
229+
./build/dist/OpenixCard -u <img>
230+
231+
# 解包并生成配置
232+
./build/dist/OpenixCard -uc <img>
233+
234+
# 转储镜像
235+
./build/dist/OpenixCard -d <img>
236+
237+
# 获取大小
238+
./build/dist/OpenixCard -s <img>
239+
240+
# 打包镜像
241+
./build/dist/OpenixCard -p <dir>
242+
```
243+
244+
## 下载
245+
### ArchLinux
246+
OpenixCard 现在可在 [AUR](https://aur.archlinux.org/packages/openixcard) 上获取 [#3](https://github.com/YuzukiTsuru/OpenixCard/issues/3#issuecomment-1135317155)
247+
```
248+
yay -S openixcard
249+
```
250+
251+
### 其他 Linux
252+
您可以在以下链接找到最新的发布文件:
253+
https://github.com/YuzukiTsuru/OpenixCard/releases
254+
255+
## 从源码构建
256+
257+
```bash
258+
# 下载源代码
259+
git clone --recursive --depth 1 https://github.com/YuzukiTsuru/OpenixCard
260+
261+
# 安装依赖
262+
sudo apt install cmake build-essential automake autoconf libconfuse-dev pkg-config
263+
264+
# 创建构建目录
265+
mkdir build
266+
cd build
267+
268+
# 编译
269+
cmake .. && make -j
270+
```
271+
272+
> 注意:Ubuntu 20.04 编译会报错,这是由 ar 的 bug 导致的,您可以编译安装新版本。
273+
274+
```bash
275+
sudo apt-get install texinfo
276+
277+
wget https://ftp.gnu.org/gnu/binutils/binutils-2.38.tar.xz && \
278+
tar xvf binutils-2.38.tar.xz && \
279+
cd binutils-2.38 && \
280+
./configure --prefix=/usr/local && \
281+
make
282+
283+
sudo make install
284+
```
285+
286+
## LICENSE
287+
```
288+
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
289+
290+
Copyright (c) 2022, YuzukiTsuru <GloomyGhost@GloomyGhost.com>
291+
292+
This program is free software; you can redistribute it and/or modify
293+
it under the terms of the GNU General Public License version 2 as
294+
published by the Free Software Foundation.
295+
296+
See README and LICENSE for more details.
297+
```

lib/inicpp

src/CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ add_subdirectory(GenIMG)
22
add_subdirectory(OpenixIMG)
33
add_subdirectory(OpenixCard)
44

5+
# Find libconfuse for linking
6+
find_package(PkgConfig REQUIRED)
7+
pkg_check_modules(CONFUSE REQUIRED libconfuse)
8+
59
# Main app
610
add_executable(OpenixCard main.cpp)
7-
target_link_libraries(OpenixCard PRIVATE libOpenixCard OpenixIMG inicpp GenIMG)
11+
target_link_libraries(OpenixCard PRIVATE libOpenixCard OpenixIMG inicpp GenIMG ${CONFUSE_LIBRARIES})
12+
target_link_directories(OpenixCard PRIVATE ${CONFUSE_LIBRARY_DIRS})

src/GenIMG/CMakeLists.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,22 @@ set(LIBGENIMAGE_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/GenIMG/genimage-src")
66
set(LIBGENIMAGE_TARGET_BUILD_DIR "${CMAKE_BINARY_DIR}/thirdparty/genimage-src/")
77
set(LIBGENIMAGE_TARGET_LIBRARY "${CMAKE_BINARY_DIR}/thirdparty/genimage-src/libgenimage.a")
88

9+
# Find libconfuse
10+
find_package(PkgConfig REQUIRED)
11+
pkg_check_modules(CONFUSE REQUIRED libconfuse)
12+
913
add_library(GenIMG ${GenIMGSource} GenIMG.cpp GenIMG.h GenimageWrapper.h)
10-
target_link_libraries(GenIMG PRIVATE ${LIBGENIMAGE_TARGET_LIBRARY} Threads::Threads confuse)
14+
target_include_directories(GenIMG PRIVATE ${CONFUSE_INCLUDE_DIRS})
15+
target_link_libraries(GenIMG PRIVATE ${LIBGENIMAGE_TARGET_LIBRARY} Threads::Threads ${CONFUSE_LIBRARIES})
16+
target_compile_options(GenIMG PRIVATE ${CONFUSE_CFLAGS_OTHER})
1117

1218
file(MAKE_DIRECTORY ${LIBGENIMAGE_TARGET_BUILD_DIR})
1319

20+
# Copy genimage-src files to build directory using CMake for cross-platform compatibility
1421
add_custom_command(
1522
TARGET GenIMG
1623
PRE_LINK
17-
COMMAND cp -rf "${LIBGENIMAGE_SOURCE_DIR}/*" "${LIBGENIMAGE_TARGET_BUILD_DIR}"
24+
COMMAND ${CMAKE_COMMAND} -E copy_directory "${LIBGENIMAGE_SOURCE_DIR}" "${LIBGENIMAGE_TARGET_BUILD_DIR}"
1825
)
1926

2027
# autotools build

src/GenIMG/genimage-src/Makefile.am

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ libgenimage_a_CFLAGS = \
4141
$(AM_CFLAGS) \
4242
$(CONFUSE_CFLAGS)
4343

44-
libgenimage_a_LIBADD = \
45-
$(CONFUSE_LIBS)
44+
# Note: LIBADD is not used for static libraries in autotools
45+
# libconfuse will be linked when the final executable is built
4646

4747
noinst_HEADERS = \
4848
genimage.h \

0 commit comments

Comments
 (0)