适用场景 :调试固件、烧录新系统、排查启动问题
关键词:龙芯 2K0300、PMON、取消自动启动、boot.cfg、auto_loaded
在使用 龙芯 2K0300 开发板 进行嵌入式开发时,我们经常需要 中断 PMON 的自动启动流程 ,以便手动加载内核、烧写镜像或调试硬件。但你会发现:PMON 并不像 U-Boot 那样支持 saveenv 命令,导致设置无法持久保存。
本文将介绍两种可靠方法,助你彻底"停住"PMON,进入命令行调试模式。
❓ 为什么需要取消自启动?
默认情况下,PMON 启动后会:
- 倒计时 3 秒(
Booting system in [3] second(s)...) - 自动扫描 eMMC/SD 卡/U 盘中的
boot.cfg、/boot/boot.cfg - 按配置加载 Linux 内核并启动
这在量产设备中很实用,但在开发阶段却会阻碍调试------你根本来不及按任意键中断!
✅ 方法一:尝试设置 auto_loaded 0(临时有效)
这是最直接的方式,但在 2K0300 上通常无法永久生效。
操作步骤:
-
开机时按任意键,进入 PMON 命令行:
Booting system in [3] second(s)... (快速按任意键) PMON> -
输入命令禁用自动加载:
pmPMON> set auto_loaded 0 -
(可选)清空启动命令:
pmPMON> setenv bootcmd "" -
重启测试:
pmPMON> reset
⚠️ 重要限制:
saveenv命令不存在!
在龙芯 2K0300 的标准 PMON 中,没有saveenv命令 (执行会提示Command not found)。- 因此,上述设置仅在本次会话有效,重启后恢复默认行为。
💡 结论:此方法适合单次调试,但无法"永久"禁用自启动。
✅ 方法二:重命名 boot.cfg(推荐!持久有效)
既然 PMON 的自动启动依赖 boot.cfg、 /boot/boot.cfg 文件,那我们就让它找不到这个文件!
原理:
- PMON 启动时会依次扫描 eMMC、SD 卡、U 盘的
boot.cfg、/boot/boot.cfg - 如果找不到,就会放弃自动启动,停在
PMON>命令行
操作步骤:
-
先正常启动进入 Linux 系统(确保能访问 eMMC)
-
执行重命名命令:
bashsudo mv /boot/boot.cfg /boot/boot.cfg.bak -
重启开发板:
bashsudo reboot -
观察串口输出:
- 不再出现倒计时
- 直接进入
PMON>提示符 - 可自由输入命令(如
help,mmcinfo,usb等)
✅ 成功!现在你可以随意调试了。
🔁 如何恢复自动启动?
只需把文件名改回来:
bash
sudo mv /boot/boot.cfg.bak /boot/boot.cfg
sudo reboot
下次启动,PMON 将恢复正常自动加载。
🧪 补充:手动启动 Linux(无需 boot.cfg)
即使没有 boot.cfg,你仍可手动启动系统:
pm
# 加载内核(假设在 eMMC 第一分区,ext4)
PMON>load (emmc0,0)/boot/vmlinuz-custom-loongarch
# 启动
PMON>g console=tty console=ttyS0,115200 rdinit=/sbin/init rootdelay=5 root=/dev/mmcblk0p1
📌 总结
| 方法 | 是否持久 | 操作难度 | 推荐度 |
|---|---|---|---|
set auto_loaded 0 |
❌ 临时 | ⭐ | ★★☆ |
重命名 boot.cfg |
✅ 永久 | ⭐⭐ | ★★★★★ |
对于龙芯 2K0300 开发者,强烈推荐使用"重命名 boot.cfg"方案 ------ 简单、可靠、无需修改固件。