Files
Docs/DevLogs/Day16.md
2025-12-31 16:18:28 +08:00

249 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Day 16 - 固件重刷后问题修复与自启动配置
**日期**: 2025-12-16
**主题**: 解决固件重刷后问题、配置自启动、公网服务器配置
---
## 问题记录
### 问题 1程序无法执行 (`not found`)
**现象**
```bash
root@(none):~# /tmp/avaota_client
/bin/sh: /tmp/avaota_client: not found
```
**原因**
- 程序编译时指定的动态链接器路径为 `/lib32/ld.so.1`
- 固件实际的 musl 动态链接器在 `/lib/ld-musl-riscv32.so.1`
- 重刷固件后,之前手动创建的符号链接丢失
**解决方案**
```bash
ln -sf /lib/ld-musl-riscv32.so.1 /lib32/ld.so.1
```
**永久修复**
修改了 `avaota_app_demo/src/Makefile`,添加动态链接器路径:
```makefile
# 指定正确的动态链接器路径,避免开发板上需要手动创建 /lib32/ld.so.1 符号链接
LDFLAGS += -Wl,--dynamic-linker=/lib/ld-musl-riscv32.so.1
```
---
### 问题 2JFFS2 分区满 + overlay 只读
**现象**
```
Your JFFS2-partition seems full and overlayfs is mounted read-only.
Please try to remove files from /overlay/upper/... and reboot!
```
**原因**
- 程序崩溃时在 `/overlay/upper/core` 生成了 **1.5MB 的 core dump 文件**
- overlay 分区只有 **512KB**,被撑满后变成只读
**解决方案**
```bash
rm -rf /overlay/upper/core
reboot
```
---
### 问题 3摄像头初始化失败
**现象**
```
[Camera][E] AW_MPI_SYS_Init failed
[ERROR] [CAM] Init failed
Segmentation fault (core dumped)
```
**原因**
- 程序崩溃时 MPP 资源未正确释放
- 再次运行时资源冲突导致初始化失败
**解决方案**
重启开发板,重置 MPP 系统状态。
---
## 自启动配置
### 系统信息
- **Init 系统**: BusyBox init
- **文件系统**:
- `/overlay`: 512KB JFFS2很小不适合存放大文件
- `/mnt/UDISK`: 18MB JFFS2可用于存放程序
- `/mnt/extsd`: 14.6GB FATSD卡
### ✅ 成功方案:使用 load_script.conf
**1. 程序部署到 UDISK**
```bash
mkdir -p /mnt/UDISK/app
cp /tmp/avaota_client /mnt/UDISK/app/
chmod +x /mnt/UDISK/app/avaota_client
```
**2. 创建 init 脚本**
```bash
cat > /etc/init.d/avaota << 'EOF'
#!/bin/sh /etc/rc.common
START=99
start() {
sleep 15
ulimit -c 0
/mnt/UDISK/app/avaota_client > /tmp/avaota.log 2>&1 &
}
stop() {
killall avaota_client
}
EOF
chmod +x /etc/init.d/avaota
```
**使用方法**
- 停止:`/etc/init.d/avaota stop`
- 启动:`/etc/init.d/avaota start`
**3. 添加到启动列表**
```bash
echo "avaota" >> /etc/init.d/load_script.conf
```
**4. 确保 crond 也在启动列表**(可选):
```bash
echo "cron" >> /etc/init.d/load_script.conf
```
### ❌ 不要使用的方案
- **rc.final** - 会导致 SD 卡检测失败,需要重刷固件
- **crontab @reboot** - BusyBox crond 不支持此语法
### 注意事项
- **WiFi 自动连接**:系统会自动保存 WiFi 配置到 `/etc/wifi/wifimg.config`
- **启动延迟**`sleep 15` 等待系统就绪(音频需要更长时间初始化)
- **禁用 core dump**`ulimit -c 0` 防止撑满 overlay
---
## WiFi 配置
### 手动连接
```bash
wifi -s # 扫描
wifi -c SSID PASSWORD # 连接
ifconfig wlan0 # 查看IP
```
### 自动连接
WiFi 配置文件位置:`/etc/wifi/wifimg.config`
如需自动连接,建议将 wifi 连接命令加入启动脚本。
---
## Makefile 修改记录
文件:`avaota_app_demo/src/Makefile`
```diff
# 系统动态库
+# 指定正确的动态链接器路径,避免开发板上需要手动创建 /lib32/ld.so.1 符号链接
+LDFLAGS += -Wl,--dynamic-linker=/lib/ld-musl-riscv32.so.1
LDFLAGS += -Wl,-Bdynamic -lasound -lpthread -lm -lrt -ldl -lz -static-libstdc++
```
---
### 问题 4rc.final 导致 SD 卡检测失败(严重)
**现象**
- 创建 `/etc/init.d/rc.final` 后重启
- SD 卡设备 `/dev/mmcblk1` 完全消失
- `/mnt/extsd/` 为空,无法挂载
- 删除 rc.final 并重启后问题依然存在,需要重刷固件
**原因**
- rc.final 执行时机过早,可能干扰了 SD 卡驱动初始化
- 或 rc.final 中的脚本阻塞了系统启动流程
**结论**
- **不要使用 `/etc/init.d/rc.final` 实现自启动**
- 需要寻找其他自启动方案(如 crontab @reboot、修改 rc.local 等)
---
## 公网服务器配置
### 服务器地址修改
将服务器地址从内网 IP 改为公网 IP支持 frp 内网穿透:
**修改 `main.cpp`**
```cpp
// 修改前
const char* SERVER_HOST = "192.168.110.188";
// 修改后
const char* SERVER_HOST = "8.148.25.142";
```
### frp 配置Windows
**frpc.toml**
```toml
serverAddr = "8.148.25.142"
serverPort = 7000
auth.token = "你的token"
[[proxies]]
name = "avaota_server"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8081
remotePort = 8081
```
### WiFi 热点切换
开发板支持连接不同的 WiFi 热点:
```bash
# 断开当前连接
wifi -d
# 连接新热点(例如 iPhone 热点)
wifi -c Kevin qazwsx1988
# 确认连接
ifconfig wlan0
```
系统会自动保存最后连接的 WiFi 配置。
---
## 已完成
- [x] 重新编译程序(包含正确的动态链接器路径)
- [x] 配置自启动功能(使用 load_script.conf 方案成功)
- [x] 配置 WiFi 自动连接(已确认系统自动保存配置)
- [x] 修改服务器地址支持公网访问frp 内网穿透)
- [x] 测试 iPhone 热点连接
---
## 相关文档
- [Day 9 - musl 工具链修复](file:///d:/CodingProjects/Antigravity/NaviGlass/Docs/Day9.md)
- [Day 15 - 导航性能优化](file:///d:/CodingProjects/Antigravity/NaviGlass/Docs/Day15.md)
- [任务清单](file:///d:/CodingProjects/Antigravity/NaviGlass/Docs/task_complete.md)