给垃圾平板“一生E本” 装新系统—————Armbian 编译 KYX T7Y (RK3326) 踩坑全记录

一、项目背景

一生E本 E30 搭载瑞芯微 RK3326 芯片(四核 Cortex-A35,ARM64),原厂系统为锁定版 Android。目标是通过社区移植的 KYX T7Y Armbian 适配仓库,编译出可刷入的 Linux 镜像。

为什么选择 KYX T7Y?

  • KYX T7Y 与 E30 同为 RK3326 平台
  • 社区已有完整的设备树、U-Boot 补丁和内核配置
  • 相比 Odroid Go Advance 镜像,屏幕适配概率更高

二、环境准备

2.1 下载源码

bash 复制代码
# KYX T7Y 适配层(补丁仓库)
git clone https://github.com/lovely-him/armbian_build_add_KYX_T7Y.git
Armbian 构建主仓(国内网络极慢,需代理)
原版 GitHub 速度 10-20 KB/s,几乎不可用
git clone --depth 1 https://github.com/armbian/build.git armbian-build

网络问题 : GitHub 裸连速度 10 KB/s,阿里云镜像站失效,Gitee 需要登录。

解决 : Windows 端开启 FLClash 代理,WSL 通过 nameserver IP 走代理:

bash 复制代码
export https_proxy=http://$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):7890

⚠️ FLClash 默认 HTTP 端口 7890,但 WSL 访问 Windows 本地服务时 IP 会变化,需确认实际监听地址。

三、Bug 全记录(按出现顺序)

Bug 1: 换行符 CRLF 问题 🔥🔥🔥

现象:

bash 复制代码
/usr/bin/env: 'bash
': No such file or directory
compile.sh: line 9: $'\r': command not found

原因 : Windows 下载的仓库,所有 .sh 文件使用 CRLF (\r\n) 换行,Linux 只认 LF (\n)。

修复:

bash 复制代码
# 单文件修复
sed -i 's/\r$//' compile.sh
批量修复(但后面发现子目录进不去,见 Bug 3)
find . -type f -name "*.sh" -exec sed -i 's/\r$//' {} +

Bug 2: 禁止 root 运行 🔥🔥

现象:

bash 复制代码
[💲|💥] PROBLEM: don't run ./compile.sh as root or with sudo
[💲|💥] Exiting in 10 seconds

原因: Armbian 构建系统强制检查非 root 用户,设计上避免构建过程中权限混乱。

修复:

bash 复制代码
# 创建普通用户
useradd -m -s /bin/bash armbian
passwd armbian
赋予 sudo 权限(编译需要)
echo "armbian ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/armbian
chmod 440 /etc/sudoers.d/armbian
切换用户
su - armbian

Bug 3: 权限 denied(核心阻塞点)🔥🔥🔥🔥🔥

现象:

bash 复制代码
find: '/home/armbian/armbian-build/lib/functions/compilation': Permission denied
find: '/home/armbian/armbian-build/config/cli/noble/debootstrap': Permission denied
# ... 数十个类似错误

根因分析:

  1. /root 下的原文件权限为 drwx------ (700),仅 root 可访问
  2. cp -r 复制时保留原权限,armbian 用户无法进入这些子目录
  3. find + chmod 因无法进入子目录而失败,形成死锁

错误尝试:

bash 复制代码
# ❌ 失败:find 本身进不去目录
find ~/armbian-build -name "*.sh" -exec chmod +x {} +
❌ 失败:子目录权限未改
chmod -R 755 /home/armbian/armbian-build

正确修复(需 root 执行):

bash 复制代码
# 必须在复制前修改原文件权限
chmod -R 777 /root/armbian-build
chmod -R 777 /root/armbian_build_add_KYX_T7Y
删除已复制的损坏目录
rm -rf /home/armbian/armbian-build /home/armbian/armbian_build_add_KYX_T7Y
重新复制(此时权限已放开)
cp -r /root/armbian-build /home/armbian/
cp -r /root/armbian_build_add_KYX_T7Y /home/armbian/
修正属主
chown -R armbian:armbian /home/armbian/armbian-build /home/armbian/armbian_build_add_KYX_T7Y

💡 关键教训 : cp -r 默认保留权限,跨用户复制前必须用 chmod -R 放开原目录。


Bug 4: setup-link.sh 软链接指向错误

现象:

bash 复制代码
./setup-link.sh: line 14: cd: /root/armbian-build: No such file or directory

原因 : 之前 git clone 时手误输入 armbian-buil(少了 d),目录名不匹配。

修复 : 统一使用 ~/armbian-build 路径,删除错误目录重新克隆。


Bug 5: ZIP 文件损坏

现象:

bash 复制代码
unzip: cannot find zipfile directory in one of armbian-build.zip

原因: 代理下载中断,ZIP 文件不完整(仅 632KB,实际应数十 MB)。

解决 : 放弃 ZIP,改用 Windows 端 git clone 后通过 WSL 挂载访问。

四、正确构建流程(整理后)

bash 复制代码
# ========== Step 1: root 下准备源码 ==========
# 下载 KYX T7Y 适配层
git clone https://github.com/lovely-him/armbian_build_add_KYX_T7Y.git
下载 Armbian 主仓(需代理或 Windows 端下载)
git clone --depth 1 https://github.com/armbian/build.git armbian-build
========== Step 2: 修复权限(关键!)==========
chmod -R 777 /root/armbian-build /root/armbian_build_add_KYX_T7Y
========== Step 3: 创建用户并复制 ==========
useradd -m -s /bin/bash armbian
passwd armbian
echo "armbian ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/armbian
cp -r /root/armbian-build /home/armbian/
cp -r /root/armbian_build_add_KYX_T7Y /home/armbian/
chown -R armbian:armbian /home/armbian/armbian-build /home/armbian/armbian_build_add_KYX_T7Y
========== Step 4: armbian 用户下编译 ==========
su - armbian
cd ~/armbian_build_add_KYX_T7Y
./setup-link.sh ~/armbian-build
cd ~/armbian-build
./compile.sh kyx-t7y build

五、尚未解决的问题

问题 状态
编译是否成功 ⏳ 权限修复后未继续
屏幕驱动适配 ⏳ KYX T7Y 屏幕参数可能与 E30 不同
WiFi/蓝牙固件 ⏳ RTL8723DS 固件已包含,但需验证
刷入 E30 后启动 ⏳ 需进 Maskrom 模式刷机测试

六、关键经验总结

  1. WSL 权限陷阱 : Windows 下载的仓库 → WSL 使用,cp -r 会保留 700 权限,跨用户必崩
  2. CRLF 灾难 : Windows Git 默认 core.autocrlf=true,拉下来的 .sh 全是 CRLF
  3. Armbian 非 root 强制: 设计上禁止 root,提前创建用户避免中断
  4. 代理配置 : WSL 访问 Windows 代理需用 nameserver IP,而非 127.0.0.1

📌 下一步: 按上述正确流程重新执行,观察编译输出,解决可能的依赖缺失问题。

本文记录真实踩坑过程,欢迎 RK3326 玩家交流。


七、更多踩坑细节与解决方案

Bug 6: enable_extension 重复可用 ------ 最隐蔽的坑

现象:

bash 复制代码
[💲|💥] Exiting with error 17 [ at .../extensions.sh:1
           enable_extension() --> .../extensions.sh:1
                     source() --> .../rockchip64_common.inc:9

根因分析:

  1. 你的 rockchip-rk3326.conf 里已经启用了 enable_extension "rkbin-upstream-rk3326"
  2. rockchip64_common.inc 第 9 行会启用 rkbin-tools
  3. 日志里出现了诡异的一行:
    ] |🌐] Enabling extension [ rkbin-tools ' anywhere - called by ...</code><br/> rkbin-tools 后面没有 ],而是换行来了个 ' anywhere

真相 : rockchip64_common.inc 这个 .inc 文件也有 CRLFenable_extension 收到的扩展名变成了 rkbin-tools\r,函数内部找不到这个扩展,于是报错退出。

修复:

bash 复制代码
# 必须扩大范围,把 .inc 和 .conf 也一起修
find ~/armbian-build -type f \( -name "*.sh" -o -name "*.inc" -o -name "*.conf" \) \
    -exec sed -i 's/\r$//' {} +

🔑 这是整个调试过程中最关键的一步 。如果只看 .sh,你永远找不到这个 bug。


Bug 7: Git TLS 握手失败

现象:

bash 复制代码
fatal: unable to access 'https://github.com/...': gnutls_handshake() failed: The TLS connection was non-properly terminated.

原因: WSL2 访问 Windows 主机的 FLClash 代理时,TLS 握手不稳定,时通时不通。

修复 : 放弃在 WSL 里直接 git clone,改为 Windows 下载 → 复制到 WSL

powershell 复制代码
# Windows PowerShell 里
cd C:\Users\17379\Downloads
curl.exe -L -o rkbin.zip https://github.com/rockchip-linux/rkbin/archive/refs/heads/master.zip
Expand-Archive -Path rkbin.zip -DestinationPath .
bash 复制代码
# WSL 里
cp -r /mnt/c/Users/17379/Downloads/rkbin-master ~/armbian-build/cache/sources/rkbin-upstream

⚠️ 注意 : PowerShell 里的 curlInvoke-WebRequest 的别名,参数语法完全不同。必须用 curl.exe(带 .exe)!


Bug 8: WSL2 终端 UTF-8 警告

现象:

bash 复制代码
[💲|💥] Problem detected [ WSL2 Terminal does not support UTF-8 ]
[💲|💥] Exiting in 10 seconds [ Press <Ctrl-C> to abort, <Enter> to ignore and continue ]

处理 : 直接按 Enter 忽略即可。脚本会继续执行。

如果嫌烦,可以预先设置 locale:

bash 复制代码
export LANG=C.UTF-8
export LC_ALL=C.UTF-8

八、一键修复脚本(备用)

如果你也遇到了类似问题,可以在 root 下执行这个脚本:

bash 复制代码
#!/bin/bash
# 修复权限 + CRLF + 复制到 armbian 用户
1. 修复 CRLF(扩大范围)
find /root/armbian-build -type f ( -name ".sh" -o -name ".inc" -o -name "*.conf" ) 
-exec sed -i 's/\r$//' {} +
2. 放开权限
chmod -R 777 /root/armbian-build
chmod -R 777 /root/armbian_build_add_KYX_T7Y
3. 清理并复制
rm -rf /home/armbian/armbian-build /home/armbian/armbian_build_add_KYX_T7Y
cp -r /root/armbian-build /home/armbian/
cp -r /root/armbian_build_add_KYX_T7Y /home/armbian/
4. 改属主
chown -R armbian:armbian /home/armbian/armbian-build /home/armbian/armbian_build_add_KYX_T7Y
echo "Done. Now run: su - armbian"

九、最终经验总结

  1. CRLF 是 WSL 编译的万恶之源 。不要只修 .sh.inc.conf、甚至 .cmd 都可能被 bash source
  2. 权限问题要追溯到复制链cp -r 保留权限,chown 之前先 chmod
  3. 代理不稳定时,Windows 下载 + WSL 挂载是最佳绕过方案/mnt/c/ 就是 WSL 的救命稻草。
  4. PowerShell 的 curl 不是 curl 。永远用 curl.exe
  5. Armbian 的 enable_extension 报错 17,优先检查 CRLF 。日志里扩展名后面多了换行或 ',就是 \r 在作祟。

祝编译顺利,少踩坑,多产出! 🚀

相关推荐
ljs6482739511 小时前
Linux 网络常用命令与端口基础详解
linux·网络·php
执迷不悟8231 小时前
51单片机--通信/串口
单片机·嵌入式硬件·51单片机
西城微科方案开发2 小时前
激光测距仪PCBA方案开发
单片机·嵌入式硬件
qq_163135752 小时前
Linux 判断是否安装 Conda / Miniconda 完整方法
linux
weixin_307779132 小时前
Linux下Docker Compose里运行Milvus向量数据库故障诊断Shell脚本
linux·运维·数据库·docker·milvus
素心如月桠2 小时前
windows系统使用https://lnmp.org/的LNMP一键安装包,来打开我的服务器Linux
linux·运维·服务器
AOwhisky2 小时前
Linux(CentOS)系统管理入门笔记:第二期核心知识点自测与详解
linux·笔记·centos
运维大师2 小时前
【Linux运维极简教程】03-用户与用户组管理
linux·运维·服务器
KaifuZeng2 小时前
通信与接口协议面试问题汇总一
单片机·嵌入式硬件·面试·通信与接口协议