编译环境

  • PMON的编译环境是交叉编译,即在X86机器上进行编译,编译出MIPS版本的PMON二进制。
  • 系统要求为X86 32位linux操作系统。实验测试Ubuntu,Debian,Fedora,CentOS都可以使用。
  • 系统中需要先安装一些开发包:flex,bison,xutils-dev。
  • Fedora系统使用yum install 命令安装,Ubuntu、Debian系统使用apt-get install命令安装。

安装编译器

# mkdir  -p  /usr/local/comp/mips-elf/
# tar -zxvf gcc-4.4.0-pmon.tgz -C /usr/local/comp/mips-elf/
  • 设置如下环境变量:
$ vi ~/.bash_profile

在文件末尾添加下面三行:
export LD_LIBRARY_PATH=/usr/local/comp/mips-elf/gcc-4.4.0-pmon/lib:
export CROSS_COMPILE=mipsel-linux-
export PATH=/usr/local/comp/mips-elf/gcc-4.4.0-pmon/bin/:$PATH

编译PMON

  • 下载PMON源代码,
$ git clone  http://cgit.loongnix.org/cgit/pmon-loongson3
$ cd  pmon-loongson3/
  • 下一步很重要,根据要编译平台的不同,进入不同的子目录。

例如:如果要编译3A780E单路的PMON,则进入zloader.3a780e子目录;如果要编译3A双路的PMON,则进入zloader.3aserver。 其它还有很多种平台的子目录。 为例:

$ cd zloader.3a780e
$ make cfg
$ make tgt=rom
$ make dtb
生成三个文件:gzrom.bin、LS2K.dtb、gzrom-dtb.bin
  • 编译正常结束后,当前目录下有一个gzrom.bin文件,这就是PMON的二进制

在机器上更新PMON

  • 龙芯PMON支持在线更新功能,即在本机上启动PMON,在命令行上更新上面编译出来的二进制
  • 在线更新命令为:
# load -r -f 0xbfc00000  URL
如下:
# ifconfig syn0 192.168.0.150 (temp)
# load_dtb LS2K.dtb
# load –r –f 0xbfc00000 tftp://192.168.0.189/gzrom.bin
  • 其中URL指向PMON二进制所在的位置,龙芯支持通过U盘和网络两种形式。

  • 由于不同的开发板的具体命令可能不同,请参考相应的开发板手册。

  • 以龙芯3A780E单路为例,请下载 《龙芯 3A+RS780E 单路开发板技术规格书》,在“第4.1.2.3 PMON 的更新”中有详细描述。

附加说明

  • 如果在编译时提示“缺少 pmoncfg文件”,通过以下步骤解决:
$ cd tools/pmoncfg
$ make
此步骤将生成pmoncfg文件
# cp pmoncfg /usr/bin  (以root身份执行此命令)
  • 执行 make cfg all tgt=rom 报错:/bin/sh: 1: mipsel-linux-gcc: not found LS1B是32位的,而ubuntu是64位的,需要安装相应的库来解决。。

PMON的更新

使用软件更新

  • 由于PMON文件具体存放的介质不同,更新方式稍有区别,主要是介质的文件格式和设备标识符不同,可用devls查看不同的设备标识符,如硬盘在有的PMON上显示wd0,有的显示sd0等,使用如下的load命令后,需要输入reboot重新启动才能生效,特别需要注意的是,软件升级有可能导致系统无法启动,请谨慎操作,如果升级失败就需要使用专业的烧录器烧录芯片
  • 从TFTP服务器上更新BIOS
    • load -r -f 0xbfc00000 tftp://10.2.5.22/gzrom.bin (假设PMON更新文件gzrom.bin放在内部的tftp服务器10.2.5.22上)
  • 从硬盘上更新PMON
    • load -r -f 0xbfc00000 /dev/fs/ext2@wd0/boot/gzrom.bin (假设PMON更新文件gzrom.bin放在硬盘的/boot目录下)
  • 从U盘上更新PMON
    • load -r -f 0xbfc00000 /dev/fs/ext2@usb0/gzrom.bin (假设PMON更新文件gzrom.bin放在ext2格式的U盘的根目录下,如果U盘是fat格式,要写fat@usb0) =》 load -r -f 0xbfc00000 /dev/fs/fat@usb0/gzrom.bin
  • 从USB光驱上更新PMON
    • load -r -f 0xbfc00000 /dev/fs/iso9660@usb0/boot/gzrom.bin (假设PMON更新文件gzrom.bin放在光盘的/boot目录下)
  • 从sata光驱上更新PMON
    • load -r -f 0xbfc00000 /dev/fs/iso9660@cd0/boot/gzrom.bin (假设PMON更新文件gzrom.bin放在光盘的/boot目录下)

Reference

http://www.loongnix.org/index.php/PMON%E7%BC%96%E8%AF%91%E6%96%B9%E6%B3%95