当前位置: 首页 > news >正文

LoongSon——PMON实战命令手册:从启动到调试

1. PMON基础入门:龙芯平台的启动管家

第一次接触龙芯开发板时,看到黑屏上跳动的PMON>提示符,我整个人都是懵的。这玩意儿既不像BIOS也不像U-Boot,输入help还全是晦涩的缩写命令。后来才发现,PMON其实是龙芯平台的"大管家",从硬件初始化到内核加载全都归它管。

PMON全称Processor Monitor,是龙芯处理器专属的Bootloader。和常见的U-Boot不同,它直接内嵌在处理器内部,上电后第一个跑的就是它。我经手过的龙芯2K1000、3A4000开发板,启动时都会先进入这个蓝底白字的界面。最神奇的是它支持完整的命令行交互,不仅能加载内核,还能直接操作内存、修改设备树,甚至自带网络协议栈。

这里有个新手容易踩的坑:PMON的命令风格特别像Unix,但又有自己的"方言"。比如查看内存不是用md而是用d系列命令,修改环境变量不是用printenv/setenv而是直接用set。刚开始我总把U-Boot的习惯带过来,结果各种报错。后来总结了个规律——所有命令都不超过3个字母,功能越基础命令越短。

2. 系统启动全流程实战

2.1 网络加载内核的三种姿势

最常用的启动方式莫过于网络加载了,特别是在调试阶段。我习惯先用devls确认网卡设备名,龙芯板子一般显示为syn0或rtl0。设置IP只需要一句:

ifaddr syn0 192.168.1.100

接着就是经典的tftp三部曲:

load tftp://192.168.1.1/vmlinux initrd tftp://192.168.1.1/initrd.gz g console=ttyS0,115200

这里有个隐藏技巧:如果内核启动卡住,可以在g命令后加-s参数进入单步模式。有次调试驱动时,我就是靠这个发现内核卡在SD卡初始化阶段。另外,initrd不是必须的,如果是内置根文件系统的内核可以直接g启动。

2.2 U盘启动的避坑指南

比起网络加载,U盘启动更依赖硬件兼容性。首先要用devls确认U盘设备名,通常是usb0或usb1。加载命令看起来简单:

load (usb0,0)/vmlinux

但实际使用时我踩过两个坑:一是U盘必须FAT32格式,NTFS会识别失败;二是分区表必须是MBR,GPT分区会报"invalid device"。建议专门准备个老式U盘做启动盘,新买的USB3.0盘反而容易翻车。

3. 固件烧写的正确姿势

3.1 NAND Flash操作三板斧

给龙芯板烧写系统要格外小心,我见过有人误操作把整片Flash擦成砖。安全流程应该是:

  1. 查看分区表:
mtdparts
  1. 擦除分区(一定要带r后缀跳过坏块):
mtd_erase /dev/mtd0r
  1. 烧写内核:
devcp tftp://192.168.1.1/vmlinux /dev/mtd0

特别注意:mtd_erase不带r参数会强制擦除坏块,可能导致Flash寿命缩短。有次批量烧写时偷懒没加r,结果有块板子的NAND直接写保护了,血的教训。

3.2 环境变量的妙用

PMON的环境变量比U-Boot灵活得多,可以存整个启动流程:

set al1 /dev/mtd0 set rd /dev/mtd1/initrd.gz set append "console=ttyS0,115200 root=/dev/mtdblock1"

调试时我常建个debug变量组:

set debug_cmd "load tftp://192.168.1.1/vmlinux;g"

需要时直接执行:

$debug_cmd

4. 内存与设备树调试技巧

4.1 内存查看的四种武器

PMON的d系列命令堪称调试利器:

  • d1查看字节:d1 0x80000000 16
  • d2查看半字:d2 0x80000000 16
  • d4查看字:d4 0x80000000 16
  • d8查看双字:d8 0x80000000 16

有次排查内存泄漏,就是靠d4发现某地址数据异常增长。修改内存同样方便,比如改GPIO状态:

m4 0xbfe10420 0x00000001

4.2 设备树动态调试

龙芯的设备树操作简直黑科技:

print_dtb /soc/uart@0xBFE20000

能直接打印串口节点所有属性。更厉害的是支持运行时修改:

rm_dtb_node /soc/usb@0xBFE10000

这个在调试USB驱动时帮了大忙,不用重新烧写就能禁用问题设备。

5. 实战故障排查案例

上周就遇到个典型问题:板子启动卡在"Starting kernel..."。用以下步骤定位:

  1. 单步执行发现卡在内存初始化
  2. print_dtb查看发现内存参数错误
  3. 通过m8命令修正内存大小
  4. 重新烧写正确dtb文件

整个过程不用接JTAG,全靠PMON命令搞定。另外分享个冷知识:PMON的ping命令其实能测网络延迟,有时候比Linux下的ping还准。

http://www.jsqmd.com/news/900077/

相关文章:

  • 2026年Q2云南厨电工厂深度解析:家园优品如何引领区域产业升级? - 2026年企业资讯
  • 3分钟学会Windows 11终极优化:Win11Debloat免费系统清理完整指南
  • 告别手写定位符!用 Appium Inspector 的录制和搜索功能快速生成 Python/Java 测试脚本
  • 68_《智能体微服务架构企业级实战教程》运维与部署之编写docker-compose部署脚本
  • LeagueAkari:英雄联盟玩家的智能效率革命,告别传统低效操作
  • 2026年Q2苏州的经济合同纠纷法律服务深度解析与选择指南 - 2026年企业资讯
  • 从Linux到SPDK:NVMe Namespace的创建、绑定与高性能存储实践
  • SAP FICO 集成场景下GL_ACCT_MASTER_SAVE的实战应用与BAPI封装
  • AI 基础概念卡片
  • ChatGPT客服话术设计全链路拆解,从客户投诉归因→话术颗粒度分级→AB测试验证→实时迭代机制
  • 工期紧张时的救星:哪些HC-276厂商能做到灵活排产并按时交付? - 品牌2025
  • Cortex-R4处理器nCPUHALT信号原理与应用解析
  • Pearcleaner:Mac应用清理的终极解决方案,彻底释放存储空间
  • Notepad++ 详细下载安装全流程指南
  • 2026年 热电阻/铠装热电阻/温度传感器厂家推荐榜:TKWZPK-24-440/WZPK-24-440型号精度与耐用性深度解析 - 品牌企业推荐师(官方)
  • 边缘计算安全最佳实践:保护边缘环境中的数据和应用
  • 第06篇|module.json5 深读:设备类型、权限、Ability 与智能体配置
  • 【Qt】QModbusRtuSerialMaster:串行Modbus客户端实战与帧时序调优
  • 被低估的超级不锈钢:为什么高端装备都在悄悄使用UNS S21800? - 品牌2025
  • Go语言timer源码:时间调度实现深度解析
  • 航空发动机叶盘系统的多场耦合振动特性及优化设计【附程序】
  • Adobe-GenP 3.0完整指南:如何免费解锁Adobe Creative Cloud全系列软件
  • 酒店门锁V10SDK接口vb模块-幽冥大陆(一百27)—东方仙盟
  • AI原生网站构建:智能体与MCP工具协同架构实战
  • 蓝牙协议栈探秘:从HCI到AMP的协同架构
  • 实战解析:基于MapReduce的气象数据清洗与质量控制
  • LeetCode 102:二叉树的层序遍历 | BFS
  • 如何永久保存微信聊天记录?3个步骤让你的数字记忆永不丢失
  • 保研文书进阶指南:如何打造一份脱颖而出的导师推荐信
  • macOS菜单栏架构演进:Ice如何重构系统级UI管理范式