PMON是一个兼有BIOS和boot loader部分功能的开放源码软件,多用于嵌入式系统。 


与BIOS相比功能不足,与常见的bootloader 相比,功能要丰富的多。基于龙芯的系统采用 pmon 作为类 BIOS 兼 bootloader,并做了很多完善工作。 


 其有如下主要特点: 

     * 支持ext2 fat32 ram 文件系统 

     * 支持网络引导(tftp),磁盘引导,flash 引导 

     * 内建调试功能(强大,调试内核举重若轻) 

     * USB 2.0 Mass Storage 支持 

     * 支持MIPS、ARM、PowerPC 平台 

     * BSD Licensed 

     ... 

 以下结合实际,给出开发中常用的命令介绍 

 1. pmon 日常命令 

     a. load --- 加载文件 

     load [-options] pathname 

     -o offset     将文件加载到内存 load_address + offset 处 

     -f addr       将文件加载到 flash 的地址 addr 处 

     pathname     要加载的文件路径或URL 

     其他选项 h load 查看 

     例子: 

     加载位于硬盘第一个分区的(pmon 只认第一个分区)内核: 

         load /dev/fs/ext2@wd0/boot/vmlinux   # 第一个分区是ext2文件系统 

         load /dev/fs/ext2@wd0b/boot/vmlinux #加载第二个分区上的内核文件,wd0c,wd0d,为第三,四个分区。 


     从远程tftp服务器上加载内核: (该功能在反复编译调试内核中很方便) 


       load tftp://192.168.10.100/vmlinux   # 先要配置好网络 



     其他格式: 

         

     load /dev/fs/iso9660@cd0/boot/vmlinux 

         load /dev/ram@address 

         load /dev/ram@address,size 

         load /dev/ram/logger 


         这些在龙梦电脑上很少用到,不知有没有被支持(未测试) 



       PS: 以上 wd0, cd0, ram 为pmon 对设备的命名,可以用 devls 命令查看他发现并支持 

         的所有设备, 龙梦电脑上常见的设备为: 


           wd0 --------- 磁盘 

           rtl0 --------- 网卡 

           usb0 --------- usb 存储设备 


           cd0 --------- 光盘 

           ram --------- 内存 


           

   b. g ------ 执行程序 


     g [-st] [-b addr] [-e addr] [-- args...]     


     当 load 完一个文件后, 通过 g 命令告诉 pmon 开始执行刚刚载人的文件 



     例子:     


         g  # 从 epc 寄存器指定的地址处开始执行 


         g -e addr # 从内存地址 addr 处开始执行 


         g -e addr -b add2 # 从内存地址 addr 处开始执行, 在addr2处设置一个临时断点 

                 # 在下一次执行挂起时删除该断点 


         g console=tty root=/dev/hda1 # 从 epc 寄存器指定的地址处开始执行, 并将参数 

                 # console=tty root=/dev/hda1 传递给程序(内核) 



   c. devls ------- 显示设备 


     devls [-a] 


       例子: 


         devls -a # 显示所有设备 

   



     d. ifaddr ------ 配置网卡 


     ifaddr ifname ipaddr[:ifparameters] 


     其中 第二个字段可以为 ipaddr:netmask:broadcast:gateway 


       例子: 


         ifaddr rtl0 192.168.10.99 # 设置网卡 rtl0 的 IP 地址 

         

         ifaddr rtl0 192.168.10.99:255.255.255.0::192.168.10.2 # 设置网卡 IP 地址和网关 

     


     e. ping 


     ping 192.168.10.188 # 测试网络是否配置好 


 [补充] 


 A. PMON 更新命令 


 load -r -f bfc00000 tftp://SERVER_IP/gzrom.bin 


 load -r -f bfc00000 /dev/fs/ext2@wd0/gzrom.bin 


 可以从系统更新PMON: 


 modprobe physmap     [装上mtd驱动以识别eeprom] 


 mknod /dev/mtd0 c 90 0     [创建mtd设备文件] 


 cp gzrom.bin /dev/mtd0     [写入] 

 sync 


 reboot 



 B. 从 USB 光驱加载 kernel: 


   load iso9660/usb0/path/to/kernel 



 C. 从 U 盘或者移动硬盘加载 kernel: 


   load /dev/fs/ext2@usb0/path/to/kernel 


   注意:如果根文件系统位于 U 盘或者移动硬盘的话,传给内核的参数应为: 


     root=8:1 rootdelay=5 



 //------------------------------------------------------------另一篇文章----------------------------------------------------
 
输出到串口/显示器(永久起效)
 set novga 1/0

 输出到串口/显示器(临时起效)
 setvga 0/1

 设定默认启动内核,第一个IDE硬盘第一个分区(其他分区改a为其他字母即可):
 set al /dev/fs/ext2@wd0a/boot/vmlinux-2.6.18-godson2e

 设定内核启动参数:
 set karg "console=tty root=/dev/hda2 init=/sbin/runit-init"

 加载内核:
 load /dev/fs/ext2@usb0/path/to/netboot.image

 启动内核:
 g console=tty root=/dev/hda1