Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371382
  • 博文数量: 48
  • 博客积分: 1084
  • 博客等级: 少尉
  • 技术积分: 496
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 14:09
文章分类

全部博文(48)

文章存档

2014年(2)

2013年(3)

2012年(13)

2011年(24)

2010年(6)

分类: 系统运维

2012-10-19 17:26:20

VxWorks启动参数详解 
上次讲过NI8106控制器如何从SATA磁盘启动VxWorks。但是,看来单是讲磁盘启动还不够,有同事按照里面讲的内容,直接修改bootline中的boot device,改成从磁盘启动。磁盘启动倒是成功了,但是他遇到了问题,原来(用网络引导时)直接使用主机上文件的功能没了。

其实要解决类似他这样的问题,需要两个东西:
1. 在启动参数(bootline/boot parameters)的other参数设置(非启动的)网络接口
2. 通过netDrv直接访问host文件

既然遇到问题了,就顺便把两个都解释一下。

先说bootline。干脆给个bootline的完整解释。

bootline其实是boot loader parameters的紧凑写法。完整的bootline格式如下:
dev(unitnum,procnum)host:/file h=# e=# b=# g=# u=usr [pw=passwd] f=# tn=targetname s=script o=other
bootline的例子:
ln(0,0)mars:c:\tmp\vxWorks e=90.0.0.50 h=90.0.0.1 u=fred pw=secret
对应(分解)的boot loader parameters例子如下:
boot device : ln
unit number : 0
processor number : 0
host name : mars
file name : c:\tmp\vxWorks
inet on ethernet (e) : 90.0.0.50:ffffff00
inet on backplane (b) :
host inet (h) : 90.0.0.1
gateway inet (g) :
user (u) : fred
ftp password (pw)(blank=use rsh) :secret
flags (f) : 0x0
target name (tn) : phobos
startup script (s) :
other (o) :

下面解释一下bootline各个参数的含义。

boot device
    引导设备的类型。必须是boot loader已包含的驱动程序名。boot loader shell中使用devs或者h命令可显示可用设备列表。
    引导设备通常是网卡、软盘、硬盘等。
    网卡直接写驱动程序的名,比如ln、gei、enp等;
    对于ATA硬盘,要写ata=controllerNum, driveNum(如ata=0,0)的格式;
    对于SCSI硬盘,要写scsi=id,lun的格式;
    对于软盘,要写fd=controllerNum, driveNum的格式;

unit number
    具体引导设备的设备号,第一个设备的编号是0。

processor number
    底板上有多个目标系统时,启动的目标的处理器号。底板控制器的处理器号必须设为0。

host name
    用于引导的主机系统名。它只是引导起来的VxWorks中用来标识主机的名字(比如代码中用这个名字调用hostGetByName就能得到主机的地址),不一定就是主机自己(在网络中)使用的名字。

file name
    要引导的VxWorks image的完整路径。使用target server时,这个名字被返回给主机,通常主机用它来定位image在主机上的位置。最长160字节,包括结尾空字符。

inet on ethernet (e)
    被引导目标系统以太网接口的IP地址及子网掩码。IP地址用‘.’分隔的十进制数,后面跟16进制的子网掩码。网络引导时,这个是我们(被引导机器)自己的地址。

inet on backplane (b)
    被引导目标系统底板网络接口的IP地址。对于一般的环境,我们没有这个东西。

host inet (h)
    用于引导的主机系统的IP地址。网络引导时,这个是引导服务器(比如ftp服务器)的地址。

gateway inet (g)
    如果被引导目标和主机不在一个物理网络,需要路由器,这是路由器地址。

user (u)
    从主机装载VxWorks image文件时用于访问主机的用户ID,这个用户必须具有VxWorks image文件的“读”权限。

ftp password (pw)
    对应上述用户ID的密码。通过FTP或者TFTP访问文件时,必须有密码,如果密码为空,将使用UNIX rsh协议访问主机。

flags (f)
    一些标志位的集合,每个标志代表一个特殊的选项。这些标志定义如下:
0x01 = 即使processor number为0,也不要激活系统控制器。(这个其实是有使用的板子解释的,所以应参考目标板子的资料)
0x02 = 载入所有VxWorks符号表,而不只是全局部分。
0x04 = 不要自动引导
0x08 = 快速自动引导,也就是自动引导前等的时间短一些。
0x20 = 禁用安全登录。
0x80 = 用TFTP(而不是FTP)来引导。
0x400 = 调试模式。

target name (tn)
    目标系统的名字,这个名字会被加入host table,所以代码中用这个名字调用hostGetByName就能得到目标系统自己的名字。

startup script (s)
    启动脚本。如果引导的VxWorks image包含kernel shell,系统引导后,这个参数指定的路径和文件名会被传递给kernel shell执行。启动脚本中,只能包含shell的C命令。注意kernel shell和boot loader shell互相有冲突。(如果系统配置好了,这个脚本也可以用来RTP应用。)

other (o)
    这个参数通常没有什么用,由应用程序来解释。但是,当我们不从网络引导又需要激活网络时,这个参数就非常重要了,它被用来指定默认的网络接口。跟boot device参数一样,我们仍然使用驱动程序的名字来标识设备。
    比如,如下的bootline,
ata=0,0(0,0)mars:/ata0a/vxWorks h=192.168.86.185 e=192.168.86.92 u=fred pw=secret tn=vx66 o=gei
    可从第一个ATA硬盘引导,并且激活(第一个)gei网络端口,同时设置本机(gei端口)的IP地址为“192.168.86.92”,本机名字叫“vx66”,服务器(主机)的IP地址为“192.168.86.185”,名字为“mars”。
    这样设置之后,网络可以像从网络启动一样的使用。

    除了上面的bootline之外,要(想像使用本地文件一样)直接使用远程(主机)文件,还需要netDrv。在VxWorks内核工程中,设置INCLUDE_NET_DRV 后可以使用netDrv。netDrv通常通过ftp或者rsh在主机(host)和目标机器(target,即VxWorks机器)之前传递文件。
    VxWorks引导程序(bootloader)从网络启动时,就是使用bootline中的参数创建了一个netDrv实例来下载run-time image。具体参见源码文件usrNetwork.c中的usrNetInit()。
    如果VxWorks内核参数设置了INCLUDE_NET_DRV,并且像前面那样在bootline指定了网络接口,那么从硬盘启动后,照样可以直接使用远程(主机上的)文件。关于netDrv的详细信息,可参见VxWorks文档,这里只是给个索引,我想已经足够了。
阅读(6265) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~