1. 认识龙芯PMON硬件世界的全能管家第一次接触龙芯开发板时我盯着串口终端里闪烁的PMON提示符愣了半天。这可不是普通的命令行界面而是国产CPU的神经中枢——一个集硬件初始化、系统引导、调试诊断于一体的超级固件。就像新电脑开机时看到的BIOS界面但PMON的能力可要强大得多。PMON的全称是Prom Monitor诞生于龙芯处理器的早期研发阶段。它最初的设计目标很简单在操作系统还没加载前先给硬件做个全身检查。但随着龙芯生态的发展PMON逐渐进化成了现在的瑞士军刀版本。我经手过的龙芯2K1000、3A4000等开发板都靠它完成最关键的启动阶段。这个固件的神奇之处在于它的双重身份既是硬件初始化程序又是实时调试工具。上电瞬间PMON会从处理器的0xbfc00000地址开始执行像熟练的管家一样检查CPU状态、初始化内存、扫描PCIe设备。完成这些基础工作后它会贴心地给你7秒时间选择启动方式——这时候如果按下U键就从U盘加载内核按C键选择光盘什么都不按就进入命令行模式。2. 玩转PMON的四种启动姿势2.1 U盘启动开发者的快捷通道我最常用的就是U盘启动方式。把编译好的内核镜像vmlinux拷贝到FAT32格式的U盘根目录插入开发板USB口。在PMON的7秒等待期内按下U键接着输入load /dev/fs/ext2usb0/vmlinux boot这两个命令就像在说把U盘里的内核加载到内存然后启动它但这里有个坑要注意如果U盘是NTFS格式需要把ext2换成ntfs。有次我忘了这茬盯着device not found的报错排查了半天。2.2 网络启动批量调试的利器当需要给机房里的几十块开发板刷系统时TFTP网络启动能省去插拔U盘的麻烦。先在电脑搭建TFTP服务器把内核镜像放在共享目录。然后在PMON中配置网络ifaddr rte0 192.168.1.100 # 给网卡分配IP ping 192.168.1.1 # 测试网络连通性 load tftp://192.168.1.1/vmlinux实测传输速度能达到10MB/s比U盘还快。不过要注意防火墙设置我有次被iptables规则坑得差点怀疑人生。2.3 光盘启动系统安装的专业选择龙芯的桌面版系统镜像通常采用ISO格式。用USB光驱连接开发板放入刻录好的光盘在启动时按C键进入光盘模式load /dev/fs/iso9660cd0/boot/vmlinux这个方式在安装统信UOS、Loongnix等系统时特别有用。不过现在越来越多的开发者改用虚拟光驱方式直接把ISO挂载到USB设备load /dev/fs/iso9660usb0/boot/vmlinux2.4 硬盘启动生产环境的标配部署正式系统时内核通常安装在SATA或NVMe硬盘。假设系统装在第一个SATA硬盘的第二个分区load /dev/fs/ext2wd0/boot/vmlinux-4.19.0这里的wd0代表第一块硬盘类似Linux的/dev/sda。要查看所有存储设备可以用devls命令——这个命令帮我找回过失踪的U盘。3. PMON的图形化界面揭秘3.1 进入图形模式的秘密很多人不知道PMON还有图形界面。上电时看到Press DEL to enter setup提示时快速按下Delete键有些板子是F2键就会进入蓝白相间的配置界面。这里藏着几个实用功能SystemInfo显示CPU型号、主频、内存大小等关键信息Boot Menu可视化选择启动设备不用记命令了Safe Mode设置管理员密码防止误操作有次客户的开发板启动异常我就是在这个界面发现内存只识别了一半最终确认是内存条接触不良。3.2 图形界面下的神操作在图形界面按F5会进入硬件测试模式可以检测内存稳定性跑memtest串口通信质量网卡回环测试最实用的是视频测试功能能直接输出测试图案到HDMI接口。我在调试龙芯7A2000桥片时就是靠这个功能确认显示输出正常的。4. PMON调试命令实战宝典4.1 内存操作硬件工程师的显微镜遇到系统崩溃时用PMON的内存查看命令能快速定位问题d4 0x80000000 16 # 查看内存0x80000000开始的16个32位数据 m4 0x80000000 0x12345678 # 修改内存值这些命令相当于高级版的printf调试。有次驱动开发时我就是通过对比内存数据发现DMA传输丢了一个字节。4.2 硬件寄存器调试PMON的pci命令简直是硬件工程师的福音pciscan # 扫描PCIe设备 pcicfg 0 1 0 # 查看总线0设备1功能0的配置空间通过这些命令我帮客户解决过网卡枚举失败的问题——原来是PCIe时钟偏差导致的链路训练异常。4.3 网络调试技巧当网络不通时这套组合拳百试不爽ifaddr rte0 192.168.1.100 # 配置IP ping 192.168.1.1 # 测试连通性 tftp # 启动TFTP服务器有个经典案例某工厂的设备无法联网最终发现是PMON的MAC地址被擦除了用setmac_fxp命令重新写入后解决。5. PMON升级与救砖指南5.1 常规升级步骤PMON本身也可以升级通常通过TFTP进行load -r -f 0xbfc00000 tftp://192.168.1.1/gzrom.bin这个操作有一定风险建议接上串口终端以防万一。我遇到过升级断电变砖的情况最后只能用编程器救回。5.2 救砖三板斧如果PMON损坏导致无法启动可以尝试使用SPI Flash编程器重写固件通过JTAG接口强制烧录短接Flash的写保护引脚有次出差现场我就是用回形针短接Flash芯片的WP引脚成功恢复了客户误擦除的PMON固件。6. 实战中的那些坑调试龙芯3A5000时遇到过玄学问题有时能启动有时不能。最后用PMON的内存测试命令发现是某地址线接触不良mt 0x80000000 0x10000000 # 测试128MB内存区域另一个经典案例是USB3.0不识别设备在PMON下看到如下错误USB EHCI controller not responding最终查明是电源时序问题——PMON初始化USB时3.3V电源还没稳定。后来在电路上加了100ms延迟解决。7. 高级玩法自定义PMONPMON其实是开源的位于龙芯的Git仓库。可以自行编译添加功能比如增加对新款网卡的支持修改默认启动参数添加自定义诊断命令编译时要注意工具链的版本匹配有次我用gcc-8编译的PMON导致内存初始化异常换回gcc-4.8就好了。对于企业用户建议在PMON中加入公司LOGO和定制化菜单。我们给某军工客户做的定制版本甚至集成了硬件自检算法开机自动运行全套测试流程。