本页面的其他翻译?:

1 PMON介绍

本产品使用 PMON(Prom Monitor)作为基本输入输出系统(BIOS)。PMON 具有强大 而丰富的功能,包括硬件初始化、操作系统引导和硬件测试、程序调试等功能。它提 供多种加载操作系统的方式,可以从优盘、tftp 服务器和硬盘等媒介加载;它提供对 内存、串口、显示、网络、硬盘等的基础测试工具;此外 PMON 还内置一个调试器,可 以对加载的程序进行单步跟踪、设置断点等调试。PMON 支持软件升级。

2 PMON的使用手册

2.1 PMON 启动流程

接通电源后,按主板的开机按钮,主板开始工作。根据ShowBootMenu环境变量的设置情况,PMON启动流程稍有不同。如果ShowBootMenu的值为yes,则默认首先从硬盘上搜索/boot.cfg或者/boot/ boot.cfg,如果存在,则读取内容后显示相应的菜单等待用户交互后来选择要启动的内核,如果不存在,则查找是否设了al环境变量,如设置了,则从al设置的指示来启动内核,如果没设置al,则进入PMON console界面。当然,在读取boot.cfg之前可以按Del来中断直接进入PMON console界面。 如果ShowBootMenu不存在或者其值不为为yes,则BootMenu不起作用,PMON将自动搜索/boot.cfg或者/boot/boot.cfg,若搜索到,则直接按读出内容中指示的默认启动索引来启动相应内核,如果找不到,则查找是否设了al环境变量,如设置,则从al设置的指示来启动内核,如果没设置al,则进入PMON console界面。当然,同样的,在这之前可以按Del来中断直接进入PMON console界面。


2.1.1 设置 ShowBootMenu 为 yes 的情况

首先说明 ShowBootMenu 设置为 yes 的情况,在此情况下,如前面提到的,如果硬盘上存在着/boot.cfg 或者/boot/boot.cfg,则进入如图 1 所示界面。

图1 BootMenu

正如图1中所示,当用户不进行任何操作,则在指定的时间到了以后(图中为28秒)PMON将自动装载箭头所指的内核,图中为rays。如果在该时间段内用户直接按下Enter键,则PMON将装载并进入箭头所指的内核,图中也为rays。如果在该段时间内用户按上下键,则箭头会随着按键上下移动来指示用户想要选择启动的内核,等用户选定所要启动内核后按下Enter则装载并进入内核。如果在该段时间内用户按下'c'键,则进入PMON console。如果用户在该段时间内用户按下上门提到的之外的按键,则下面的Booting system in [*] second(s)的提示将消失,等待用户用上下键选择要启动的内核并且用Enter来装载并启动之。

下面介绍一下boot.cfg文件的格式,摘抄一个典型的boot.cfg文件内容说明之:


timeout 30 

default 0 

showmenu 1 

title rays 

     kernel /dev/fs/ext2@wd0/boot/vmlinux 

     args console=tty root=/dev/hda1  

title debian 

     kernel /dev/fs/ext2@wd0g/boot/vmlinux-8.9 

     args console=tty root=/dev/hda7 

title rescue 

     kernel /dev/fs/ext2@wd0/boot/rescue 

     args console=tty 

说明一下各个标签的含义:

timeout 后面跟的数值指示启动默认系统的超时时间,也就是上面提到的Booting system in [*] second(s)提示的*的初始值。

default 后面跟的数值指明默认启动的系统的索引,0代表第一个,后面依此类推。

showmenu 如果为1则要显示BootMenu,若为0则不显示。

title 也就是显示在BootMenu里的指示要启动的内核的名称。

kernel 指明了对应title的内核的所在的地方。

args 启动内核时传递给内核的一些启动参数。

如果前面提到的boot.cfg不存在(指不在根目录下或者/boot目录下或者干脆不存在),则系统会给出”The boot.cfg not existed!System will try default entry from al.”后试着装载al环境变量指定的内核,并且配合karg环境变量指定的运行参数来启动内核。al和karg的设置说明如下:

 ① PMON>set  al  string ⇓

al 环境变量设置之后,在boot.cfg不存在的情况下,PMON会试图自动加载$al 指定的内核并运行。 “string”为load命令的参数,例如:

 set  al  [[mailto:ext2@wd0| /dev/fs/ext2@wd0/boot/vmlinux]] -2.6.22-7inch ⇓

将自动装载硬盘第一个分区的/boot/vmlinux-2.6.22-7inch,并运行。

 ② PMON> set  karg  "argument  string"  ⇓

设置自动启动时的内核参数,例如:

 set  karg  "console=tty1 root=/dev/hda1" ⇓

如果此时al也没设置,或者设置的不准确,则系统会进入PMON console,此时可以用load命令来进入硬盘非自动启动流程。说明如下:

 ①PMON>load  [[mailto:ext2@wd0| /dev/fs/ext2@wd0/boot/vmlinux]] -2.6.22-7inch  ⇓

通过硬盘加载内核,ext2表示硬盘分区的文件系统类型,boot表示内核路径,vmlinux-2.6.22-vmlinux表示内核名。wd0表示第一个ext2分区。如果内核文件放在第2个ext2分区,则分区名称为wd0b,如果是第3个ext2分区,则分区名为wd0c,依此类推。需要注意的是这里计算的只是ext2分区,其他分区类型如fat32,swap分区均不包括在计数之类。举例说明,假设我们分了四个分区,第一个为ext2分区,第2个为swap分区,第三个为fat32分区,第四个为ext2分区。则第一个ext2分区名为wd0a,简写为wd0,第二个ext2分区(也就是物理上的第4个分区)名称则为wd0b。

 ② PMON>g  console=tty  [root=/dev/hdaN]  ⇓

开始运行内核,g命令的参数为内核命令行参数。默认参数为

 console=tty1 root=/dev/hda1 

当然,除了硬盘启动流程外,还有以下两种启动方式可供选择(前提是前面提到的boot.cfg和al都不存在或者存在后设置不准确而进入了PMON console,当然用户也可以在读取boot.cfg或者al之前按Del键来强行进入PMON console):

1 、tftp 服务器启动流程:

 ① PMON>ifaddr  rtl0  xxx.xxx.xxx.xxx  ⇓

其中xxx.xxx.xxx.xxx表示需要设置的IP地址,rtl0表示8139网卡。

例如:

 PMON>ifaddr  rtl0  172.16.11.134  ⇓

该命令设置临时的网络IP地址,重新启动会丢失。如果要永久设置则使用ifconfig 环境变量。例如:

 PMON>set  ifconfig  rtl0:172.16.11.134 

上面表示将本机的IP设置为172.16.11.134。具体IP地址请根据您的网络环境确定,如不清楚请询问您的网络管理员。

 ② PMON>setmac  xx:xx:xx:xx:xx:xx    ⇓

设置网卡MAC地址,其中xx:xx:xx:xx:xx:xx表示您需要设置的MAC地址。 例如:

 PMON>setmac  00:23:2e:44:13:10{{wiki:graphics10}}    ⇓
 ③ PMON>load  tftp:%%//%%xxx.xxx.xxx.xxx/vmlinux-2.6.22-7inch ⇓

xxx.xxx.xxx.xxx表示内核所在的服务器的ip地址,vmlinux-2.6.22-7inch是要下载的内核名字,可以是任意的,取决于您的tftp服务器上内核的命名。内核一般放在tftp服务器的/tftpboot目录下。

 ④ PMON>g  console=tty    ⇓

同上,以给定的命令行参数运行内核。

2、USB 光驱启动流程

 ① PMON>load  /dev/fs/ext2@usb0/boot/vmlinux  ⇓ 
 ② PMON>g  console=tty    ⇓ 

另外,PMON中还支持从U盘读取boot.cfg来选择要启动的内核的功能,用户只要在系统起来之前(确切的说是读取boot.cfg之前)按'u'键,那么PMON会从U盘的根目录下去搜寻boot.cfg而不是从原来的默认的硬盘的根目录或者/boot下去搜寻。

2.1.2 没有设置ShowBootMenu或者设置ShowBootMenu为非yes的情况:

在此情况下,PMON还是先从硬盘(wd0)的根目录或者/boot下去搜寻boot.cfg,但与设置ShowBootMenu为yes的情况不同的时,找到boot.cfg后不显示BootMenu,而是读取文件中的default标签值来默认启动该索引值指定的内核。当然,与设置ShowBootMenu的情况类似,如果PMON找不到boot.cfg或者boot.cfg格式不对,则搜索有没有设置al环境变量,如果al存在,并且设置准确,则自动装载al指定的内核并且运行,否则进入PMON shell。



2.1.3 可能碰到的问题及其解决方法


2.1.3.1 找不到boot.cfg或者boot.cfg格式不对

现在只支持从编号wd0的硬盘上的根目录或者/boot下去搜索boot.cfg,所以请把boot.cfg放于这两个地方的任何一处。boot.cfg格式有两层含义:

  1. 第一是真正意义上的格式错误,比如笔误,把default写成了defualt等;
  2. 第二个是指语法没错,但可能指定的内核并不存在。

以上用户都得重新按照boot.cfg的格式含义来核对后修改。

2.1.3.2 IP 地址的设置

IP地址设置只有通过tftp服务器加载内核时才会用到,而通过硬盘启动时就不需 要设置IP地址,如果需要设置IP地址,那么该地址要和tftp服务器的ip地址在一个 网段上。如果没有设置IP地址时,从tftp服务器上load内核会出现”Can`t assign requested address”的字样,提示您设置IP地址。

2.1.3.3 MAC地址的设置

设置MAC地址时,使用的都是十六进制数(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f),并且最开始的两位一般情况下都设置为00,其他可以任意设置。如果第一次设置不成功的话(会有提示),可以把后10位中的某一位修改为其他的数字。

2.1.3.4 内核加载失败

如果是从硬盘或者U盘启动的话,可能是路径没有写对;如果是从tftp服务器加载内核的话,可能是IP地址和MAC地址没有设置正确,或者是无法访问tftp服务器(不在同一网段或者服务器配置不正确),也可能是tftp服务器上没有指定的内核。

2.1.3.5 操作系统不能正常启动

虽然正常加载内核,但在运行g命令后,不能正常启动操作系统。

现象 1: 发生例外,返回 pmon 命令行或者重启动。请确认加载的内核无误而且load命令成功完成,可以尝试重新加载。

现象 2: 打出几行字之后再没有反应。这个现象也可以是由于加载内核错误引起;或者是内核命令行参数没有指定console=tty,导致内核输出到串口设备;或者内核本身有bug中途死机。

现象 3: 内核启动到准备挂载根文件系统时,报root设备 not found,panic等问题。请确认内核命令行参数指定的根分区是否正确,硬盘的分区有无损坏。

现象 4: init进程执行之后的各种错误,常见的问题包括fsck错误、fstab的内容不正确导致某些分区不能mount、时间错误导致反复fsck等等,请参考debian操作系统的相关文档。



2.2 PMON的基本命令介绍

在”PMON>“的提示符下,您可以用键盘输入命令来使用PMON的各种功能。阅读命令 的输出时,如果输出多于一屏,可按空格键翻页,”Enter”键翻行。

1、h 命令:查看PMON的所有命令及其每个命令的使用说明,h命令格式:

 PMON>h ⇓

如果想查看特定命令的详细说明,可以在PMON命令提示符下输入”h command”。 例如查看load命令,格式:

 PMON>h  load   ⇓

2、load命令:用于下载程序和数据(例如从硬盘、优盘和tftp服务器等下载内核),也可以用来升级PMON,支持fat和ext2文件格式。命令格式:

 PMON>load  [[mailto:ext2@wd0| /dev/fs/ext2@wd0/boot/vmlinux]] -2.6.22-7inch ⇓

3、reboot命令:重启电脑。格式:

 PMON>reboot ⇓

4、date命令:用于查看或者设置时间。格式:

 PMON>date  [yyyymmddhhmm.ss] ⇓

yyymmddhhmm.ss的格式是年月日时分秒

5、ifaddr命令:用于设置IP地址。格式:

 PMON>ifaddr  rtl0  xxx.xxx.xxx.xxx    ⇓        

6、ping命令:用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。格式:

 PMON>ping  xxx.xxx.xxx.xxx ⇓

7、set 命令:用来显示和设置环境变量。格式:

 PMON>set ⇓ 不加参数的可以查看所有设置的变量 
 PMON>set  al  string ⇓ 用来设置 PMON 自动启动的变量 
 PMON>set  ifconfig  rtl0:xxx.xxx.xxx.xxx ⇓ 设置 IP 地址 

8、unset命令:取消set命令设置的变量。格式:

 PMON>unset  al   ⇓

9、ifm命令:设置网络的工作模式,选项包括 auto、10Mbps和100Mbps。格式:

 PMON>ifm  ⇓ 查看网络工作模式 
 PMON>ifm auto ⇓ 自动选择网络工作模式 
 PMON>ifm 10 ⇓ 选择10Mbps模式 
 PMON>ifm 100 ⇓ 选择100Mbps模式 

10、setmac命令:设置MAC地址(MAC地址是指介质访问控制(Media Access Control,简称MAC)地址),如果不带参数则查看当前MAC地址;本命令直接修改8139网卡的ROM内容,重新启动后生效。格式:

 PMON>setmac  [xx:xx:xx:xx:xx:xx]  ⇓

11、dir命令:查询某个路径下的文件和目录分布情况。

 dir (wd0,0)/   查询wd0硬盘下第一个分区根目录下文件的分布情况。 
 dir (usb0b,0)/boot 查询编号为0的U盘上的第二个分区/boot下的文件的分布情况。 



2.3 PMON 升级

PMON保存在主板上的可拔插的EEPROM芯片中,升级PMON有两种方式:

(1) 通过专用的编程器进行升级。这个方法需要先从主板取出EEPROM芯片,放到编程器中烧录PMON映像文件。烧录时需要选择正确的芯片型号。

(2) 软件升级。使用load命令可以完成这个任务。load命令的-r选项可以装载二进制文件, -f addr可以指定把装载的内容烧录到指定位置,在本主板中一般是0xbfc00000。例如:

 load  -r  -f  bfc00000  tftp:%%//%%xx.xx.xx.xx/gzrom.bin   ⇓

可以通过网络下载和升级PMON,其中gzrom.bin是更新的PMON映像。同样也可以从硬盘等地加载。

:!: 非专业人士请勿尝试升级PMON,升级失败可能导致主板不能启动。



2.4 test 测试菜单

如果你的主板出现问题,可以在PMON的字符界面下,手动输入命令进行相关的测试。

 ① PMON>test  1 ⇓

测试 CPU 浮点数计算 CPU 浮点部件工作正常时应该有如下输出:

 ② PMON>test  2 ⇓ 测试内存 

 ③ PMON>test  4  ⇓   测试网络 

测试网络前需要先设置好IP地址,并确认网络联线正常。此外,本测试中服务器的

IP地址固定为192.168.2.231,因此要把在一台同子网的服务器上添加该IP地址,并把本主板的IP地址设置为192.168.2.0网段的地址。

测试网络时输入test 4 相当于ping命令,网络正常时应该有如下输出:

如果网络不正常,输出会如下图所示:

 ④ PMON>test  8  ⇓ 测试CPU的频率 

输入该命令后,会在显示器上显示出CPU的频率,如下图(其中总线频率不准确):

 ⑤ PMON>test  32  ⇓ 测试PCI设备 

测试PCI设备时,如果PCI设备正常的话,会在显示器上输出每个PCI设备的总线 号、设备号和功能号,以及PCI设备的地址分配情况等。

 ⑥ PMON>test  64 ⇓  测试显示 

 ⑦ PMON>test  128           测试硬盘 

没有硬盘时输出:

begin  harddisk  test get  harddisk  info: 

can  not  found  harddisk 

press  <Enter>  to  continue  !!  

正常情况下输出:


begin  harddisk  test 

get  harddisk  info: 

LBA,  xxxdMB,  xxxcyl,xxxhead,  xxxsec,  xxxsectors(其中 xxx 表示数字) 

start  harddisk  read  write  test 

…………… 然后对硬盘进行读写测试。

 ⑧  PMON>test  256 ⇓ 测试键盘  

正常时输出:

keyboard  test check  keyboard... ok 

test  kbd  leds 

………………….  

测试失败时输出:

 keyboard  test check  keyboard... failed 
 ⑨  PMON>test  512{{wiki:graphics46}}   ⇓  测试串口,如下图: 

测试的同时会在串口打印出一个字母”a”。

 PMON>test  4096 ⇓ 测试所有选项  

该命令把①~⑨综合起来,用一条命令分别执行。

2.5 PMON 的命令列表

GUI

gui start gui progress

Boot and Load

boot boot oload load memory from hostport

load load file

Misc

call call function devls list devices

flush flush caches reboot reboot system

poweroff power off system flash program flash memory

tr transparent mode

MyCmds

pnpr pnpr LDN(logic device NO) index pnpw pnpw LDN(logic device NO) index value

pcs select pci dev function d1 dump address byte

d2 dump address half world d4 dump address world

d8 dump address double word m1 modify address byte

m2 mofify address half world m4 modify address world

m8 modify address double word setvga set vga_available

writefb write fb setkbd set kbd_available

initkbd kbd_initialize tlbset tlbset viraddr phyaddr [-x]

cache cache [0 1] erase cache [0 1]

program cache [0 1] newmt new memory test

test hardware test serial hardware test

Debugger

c continue execution t trace (single step)

to trace (step over) db delete break point(s)

b set break point(s) g start execution (go)

sym define symbol ls list symbols

r display/set register l list (disassemble) memory

bt stack backtrace

Shell

more paginator h on-line help

sh command shell vers print version info

eval evaluate and print result stty set tty options

hi display command history date get/set date and time

about about PMON2000

Network

ifaddr Configure Network Interface ping ping remote host

Memory

m modify memory d display memory

compare compare memory to memory copy copy memory to memory

fill fill memory search search memory

mt simple memory test

Pci

pcicfg pci config space pciscan scan pci bus

memt

nmt Memory test wm write memory

space test

sread read memory sset modify memory

USB commands

usb general usb commands

cs5536 debug

rdmsr msr read test wrmsr msr write test

powerdebug for debug the power state of sm712 graphic kdecreg KB3310 EC reg read test

wrecreg KB3310 EC reg write test rdbat KB3310 smbus battery reg read test

rdfan KB3310 smbus fan reg read test xbiwr for debug write data to xbi interface of ec

xbird for debug read data from xbi interface ec testvideo for debug read data from xbi interface of ec

Realtek 8139

ifm Set 8139 interface mode setmac Set mac address into 8139 eeprom

reprom dump rtl8139 eprom content

2.6 PMON 的系统还原功能

上电启动后出现启动画面,如图0-1所示。按Tab键后,进入还原界面,如图0-2所示。

2.6.1硬盘还原

按”W”键进入硬盘还原,如图 1-1,硬盘还原系统支持HD版,不支持SSD版。硬盘还原是从本地硬盘的一个分区中下载一个系统还原的文件,启动后进入一个系统还原的提示界面,如图 1-2。按U升级系统(目前支持U盘升级系统),按R键,进入还原系统的选择界面如图 1-3。

按”1”键 选择配置分区还原

按”2”键 选择主分区和配置分区还原

按”3”键 选择系统完整还原,包括主分区、配置分区还原和用户分区。此项,可以导致用户数据丢失。

按”4”键 对于从硬盘还原系统,和第三项还原是相同的,但是从U盘还原系统时,是有区别的。

硬盘系统还原时,如果找不到还原系统的文件,出现如图1-4的提示画面。

图 1-1

图 1-2

图 1-3

图 1-4


2.6.2 U盘还原

进入图 0-2界面后,按”U”键开始U盘的系统还原。出现如图 2-1的界面提示。

按”R”键,终止U盘的系统还原,并且重新启动。

按”C”从U盘下载系统还原文件,启动后进入一个系统还原的提示界面,如图 1-2。按”U”键从U盘读取系统的文件补丁,升级系统。按”R”健,启动后进入一个系统还原的选择界面,如图 2-3。

按”1”键 选择配置分区还原

按”2”键 选择主分区和配置分区还原

按”3”键 选择系统完整还原,包括主分区、配置分区还原和用户分区。此项,可以导致用户数据丢失。

按”4”键 除了系统完整还原外,还将格式化硬盘的其他隐藏分区。

U盘还原时,没有U盘或者U盘中没有系统还原的文件时,出现如图 2-2的画面提示。

图 2-1

图 2-2

2.6.3 服务器还原

服务器还原适合用于局域网内的用户,需要搭建tftp服务器和http服务器,个人用户建议使用U盘还原。进入0-2画面后,按”V”键进入服务器还原的设置界面,如图 3-1。

图 3-1

按”I”键 进入本机IP地址的设置(如图3-2)和tftp服务器IP地址的设置(如图 3-3),然后从tftp服务器上下载还原文件然后运行。运行还原文件后,弹出图1-2的界面,按”U”健,升级系统。按”R”键,启动后进入一个系统还原的选择界面,如图 1-3。说明:

按”1”键 选择配置分区还原

按”2”键 选择主分区和配置分区还原

按”3”键 选择系统完整还原,包括主分区、配置分区还原和用户分区。此项,可以导致用户数据丢失。

按”4”键与按”3”键在服务器还原时,是相同的。

按完数字键,并且确认后,需要再次输入服务器的IP地址(如图3-4),回车后,开始还原。

按”R”键 重新启动系统

按”S”键 如果之前设置好了本机IP地址和tftp服务器IP地址,不需要修改的话,直接按此键,下载还原文件。

注:

目前在设置IP地址时,不支持退格键。

图 3-2

图 3-3

图 3-4



3 PMON的源代码访问方式

PMON的源代码可以从dev.lemote.com获取,由于该源代码是采用git进行版本管理的,所以用户可以通过git clone命令来获取,具体的获取方式如下: git clone git://dev.lemote.com/pmon.git,然后用户可以通过Checkout对应某个版本的tag来进行开发,具体的git的使用方法开发者可参阅相关的git手册,这边推荐参阅git_SCM_book.pdf。



4 PMON的编译环境及其配置

1. 首先从http://dev.lemote.com/code/pmon 下载交叉编译环境mips-elf.tar.gz

2. 把下载的mips-elf.tar.gz文件解压缩到/usr/local/comp/,使用的命令如下

 tar -xpf mips-elf.tar.gz -C / 

3. 设置Path路径,命令如下

 Export PATH=/usr/local/comp/mips-elf/gcc-2.95.3/bin/:$PATH 

4. 编译生成配置PMON所需要的pmoncfg工具,命令如下

   cd pmon_dir 

   cd tools/pmoncfg 

   make  

   cp pmoncfg /usr/bin 
 注:pmon_dir代指刚才1.3中提到的从服务器下clone下来以后PMON源代码所在的目录。 

5. 运行pmoncfg,来配置PMON中的Bonito环境(pmoncfg会产生一些帮助文件,放在目录:pmon_dir/Targets/dir_corresponding_to_your_target_hardware /compile下,注:dir_corresponding_to_your_target_hardware是指硬件平台所对应的文件目录,例如对于8.9寸笔记本就是 Bonito2F7inch。),命令如下

   cd pmon_dir 

   cd Targets/dir_corresponding_to_your_target_hardware/conf 

   pmoncf Bonito 

6. 编译产生所需的PMON映像

   cd pmon_dir 

   cd zloader. dir_corresponding_to_your_target_hardware  

   make tgt=rom 

结果是在zloader. dir_corresponding_to_your_target_hardware (对于8.9寸笔记本为zloader.2f7inch)目录下产生默认名字为gzrom.bin的PMON映像。

注:make tgt=?有三个选项:

  • rom: 表示产生gzrom.bin文件,接着就可以把它烧到主板的flash rom中(这个可以通过主板上老的PMON console的支持通过load命令实现,典型的例子为load -r -f bfc00000 tftp://172.16.0.30/gzrom.bin)
  • ram: 表示产生gzram文件,接着可以把它装载并且在老的PMON console中运行,它与前面的rom的文件的不同点在于,它只是被下载到内存在线运行,一旦断电,系统还会从flash rom中装载老的PMON映像进内存运行,这样可以防止调试中出现新的PMON运行时的错误而导致不能启动系统或者不能正常运行从而无法调试而非得用烧写器来重烧PMON映像到主板的flash rom的情况。
  • sim: 此选项暂时不支持。



5 PMON的环境变量

PMON的环境变量,其作用就是进行可配置操作,比如对启动方式的可配置(自动启动或者非自动启动)、FTP服务器IP的自动配置或者手工配置等。常用的一些环境配置变量的功能说明如下:

al 设置启动内核,也就是指明要启动哪个内核,例如:/dev/fs/ext2@wd0/boot/vmlinux,该参数的含义是指示PMON启动编号为wd0的硬盘上文件格式为ext2的第一个分区上的/boot文件夹下的名为vmlinux的内核文件,其它的依此类推。

karg 设置启动内核时传递给内核的参数,例如”console=tty root=/dev/hda1”。

ShowBootMenu 该环境变量为一开关参数,当其设置为yes时表明需要显示BootMenu菜单来供用户可视化交互选择要启动的内核。当其设置不为yes,或者该参数不存在时,则默认从/boot/boot.cfg或者/boot.cfg中读取默认的内核启动,当然,如果以上提到的boot.cfg文件不存在,则启动al中指示的内核,如果al也没设置,或者设置不准确,或者al也不存在,则回到PMON console。

novga 该环境变量也为一开关参数,当其存在时,则调试log全部打到串口上,当其不存在时,则当显示驱动初始化后,调试log打到显示器上。

ifconfig 该环境变量用来为tftp服务自动设置ip地址,如rtl0:172.16.1.205。



6 PMON中如何植入图片

1、图片首先通过PMON的load命令写到flash芯片中。

  load -r -f xxxxxxxx tftp:%%//%%ip_addr/picture.bmp.gz(tftp方式) 
  load -r -f xxxxxxxx /dev/fs/ext2@usb0/path/picture.bmp.gz(u盘方式) 

注:xxxxxxxx代表物理地址,ip_addr代表ip地址,如172.16.0.30,path代表文件路径,picture代表图片文件的名字。

2、PMON显示图片是通过fb/cfb_console.c文件中的 video_display_bitmap函数实现的,其函数原型为int video_display_bitmap(ulong bmp_image, int x, int y),参数bmp_image指明图片文件的数据所在的地址,也就是1中提到的xxxxxxxx,x表明图片显示的x坐标,y表明图片显示的y坐标。

以PMON的logo图片为例:

图片:448 x 224 x 8;bmp格式;

首先将图片压缩

  gzip logo.bmp 

接着用load命令装载到PMON中,其数据的起始地址为bfc60000

  load -r -f bfc60000 tftp:%%//%%ip_address/logo.bmp.gz 

接着就可以在代码合适的地方,通过调用函数video_display_bitmap()来在屏幕上显示之,如video_display_bitmap(bfc60000,0,0),即表示从屏幕的(0,0)坐标开始显示此图片。

注:

pmon中图片位深是8位色(256),bmp格式

图片的高度和宽度均为8的整数倍,这样做的目的是使得图片的显示效果好。




Personal Tools