一、前置条件
先理清一个核心概念:arm-linux-gnueabi-gcc 是交叉编译器,用途:在一台主机编译程序,生成可在 Kindle(ARMv7 Linux)运行的二进制。
⚠️ 不要尝试在 Kindle 本机直接运行 arm-linux-gnueabi-gcc,性能极差、内存吃紧,仅适合调试;常规开发推荐电脑端交叉编译,Kindle 仅作为运行 / 调试终端。
1. 硬件与固件前置
- 设备已完整越狱(KUAL 可用,可获得 root 权限)
- Kterm终端模拟器
- 安装 USBNetwork
内存提醒:Kindle 内存很小,编译大型程序极易 OOM,仅适合小型 C 程序、FBInk 配套工具、驱动测试代码。
2. 内核基线
内核:Linux 3.10.53-lab126(亚马逊定制内核,2023 编译,基于 3.10 长期版)
系统根文件:Kindle 原生 BusyBox,glibc 版本极低(glibc 2.19 以内)

3. CPU 核心基础规格
CPU:ARMv7l Cortex-A9(i.MX6SLL),软浮点 ABI arm-linux-gnueabi**(非 hf 硬浮点)NXP**
- 内核:Single Cortex‑A9
- 架构:ARMv7‑A,小端
armv7l - 标准最高主频:1.0 GHz(Kindle 固件通常锁频 800MHz)
- 流水线:8 级超标量,支持乱序执行
- 浮点单元:VFPv3(软浮点 ABI
arm-linux-gnueabi) ⚠️ 重点:没有硬浮点gnueabihf! → 交叉编译必须选用arm-linux-gnueabi-,不能用gnueabihf,否则Illegal instruction - 多媒体协处理器:NEON MPE SIMD(向量运算,图像处理、ffmpeg 可用)
- 安全扩展:TrustZone
- 电源:支持 DVFS 动态调频调压,空闲可降频省电(电子书核心优势)

二、交叉编译器部署
1. ARM GCC 4.9.x
- 工具链名称:
arm-linux-gnueabi-gcc-4.9 - 适配理由:
-
- GCC4.9 是适配 Linux 3.10 内核、Cortex-A9 的黄金版本;
- 自带 glibc 2.19,和 Kindle 原生系统库版本对齐,编译程序放上去不会报版本不匹配;
- MobileRead 论坛所有 Kindle 插件、kterm、usbnethack、proot 容器全是用 4.9 编译。
- 下载源:Linaro GCC 4.9 2017.01 稳定版(Linaro 官方归档)
gcc-linaro-4.9.4-2017.01-x86_64-arm-linux-gnueabi.tar.xz
a. 执行下载命令
wget https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz
b. 解压部署
sudo mkdir -p /opt/linaro49
sudo tar -xf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz -C /opt/linaro49/
c. 写入环境变量
nano ~/.bashrc
末尾添加:
export PATH=/opt/linaro49/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin:$PATH
生效并验证:
source ~/.bashrc
arm-linux-gnueabi-gcc -v


2. 编译关键参数
# C程序编译示例
arm-linux-gnueabi-gcc-4.9 -march=armv7-a -mtune=cortex-a9 -msoft-float -mabi=aapcs-linux your_code.c -o output
# 静态编译(推荐,避免库依赖)
arm-linux-gnueabi-gcc-4.9 -static -march=armv7-a -mtune=cortex-a9 -msoft-float your_code.c -o output_static
3. 适配 Kindle 8 编译固定参数
编译时必须加 CPU 架构参数,否则性能差 / 指令报错:
arm-linux-gnueabi-gcc -march=armv7-a -mtune=cortex-a9 -msoft-float -mabi=aapcs-linux -static demo.c -o demo_kindle
-static:静态链接,避免 Kindle 低 glibc 库缺失报错-msoft-float:匹配 i.MX6SLL 原生软浮点 ABI,不会出现Illegal instruction
测试代码:
#include <stdio.h>
int main(int argc, char* argv[])
{
int i=0;
for(i;i<argc;i++){
printf("argv[%d]=%s\n",i,argv[i]);
}
return 0;
}
把上述代码分别使用静态库链接,动态库链接方式进行编译。
静态编译:
arm-linux-gnueabi-gcc -march=armv7-a -mtune=cortex-a9 -msoft-float -mabi=aapcs-linux -static main.c -o demo_kindle
动态编译:
arm-linux-gnueabi-gcc -march=armv7-a -mtune=cortex-a9 -msoft-float -mabi=aapcs-linux main.c -o demo_kindle-d

编译完成的执行文件通过下述方式传输到 kindle 设备中。
三、Linux 电脑与 Kindle 文件传输
1. 前置已知条件
你已经能正常 ssh root@KindleIP,默认账号密码:
- 用户:
root - 密码:
mario - 可读写目录:/mnt/us/(电脑 USB 挂载的磁盘分区,存放 alpine、koreader、extensions,唯一可永久写入目录)
- 系统根目录
/默认只读,禁止直接 scp 到 /root/etc,极易变砖
2. SCP 命令传输
只往 **/mnt/us/**传输文件,这是唯一可读写分区。
在 kindle 的**/mnt/us/**我们可自行创建一个测试目录/mnt/us/gcc-test,向其中传输 gcc 编译的测试文件。

(1) 上传单个文件到 Kindle
语法:
scp 本地文件路径 root@KindleIP:/mnt/us/目标文件夹
示例:把本地 test_bin 传到 Kindle 根目录
scp ~/work/test_bin root@192.168.1.105:/mnt/us/
(2) 上传整个文件夹
把本地 alpine 文件夹完整传到 Kindle
scp -r ~/work/alpine root@192.168.1.105:/mnt/us/
(3) 从 Kindle 下载文件到 Linux 电脑
# 下载单个文件
scp root@192.168.1.105:/mnt/us/alpine.ext3 ~/backup/
# 下载整个文件夹
scp -r root@192.168.1.105:/mnt/us/extensions ~/kindle_backup/
四、kindle 运行测试
1. SSH 登录 kindle
通过安装 USBNetwork 插件,使用 SSH 登录到 kindle。
首先查询 kindle 的 IP 地址,电脑端通过MobaXterm 软件 的 SSH 功能进行连接。

登录连接后界面如下,进入**/mnt/us 目录(唯一可读写目录),**在其目录下运行测试程序 。

2. 运行测试交叉编译程序
在终端窗口运行测试程序:
#./demo_kindle
#./demo_kindle-d
#./demo_pc
#file demo_kindle
#file demo_kindle-d
#file demo_pc
这里我们可以看到 demo_kindle(静态交叉编译)可行运行,demo_kindle-d(动态交叉编译)可行运行,demo_pc(使用 PC 端 gcc,非交叉编译器)运行报错。
