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