博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vxWorks嵌入式系统启动参数解析
阅读量:4140 次
发布时间:2019-05-25

本文共 6510 字,大约阅读时间需要 21 分钟。

boot程序的主要功能是引导vxworks 内核,所以boot程序需要知道vxworks的内核存放在何处,通过什么手段去获取。在vxworks缺省的boot程序里有一条内建的default boot line,它指明了获得vxworks内核的途径,在boot程序启动时,它先寻找NVRAM里面有无boot line,如没有,则等里的内容添入BOOT_PARAMS结构里,然后,启动程序和vxworks内核利用此结构寻找启动参数。

 

typedef struct   /* BOOT_PARAMS */

{
char bootDev [BOOT_DEV_LEN];    /* boot device code */
char hostName [BOOT_HOST_LEN];   /* name of host */
char targetName [BOOT_HOST_LEN];  /* name of target */
char ead [BOOT_ADDR_LEN];    /* ethernet internet addr */
char bad [BOOT_ADDR_LEN];    /* backplane internet addr */
char had [BOOT_ADDR_LEN];    /* host internet addr */
char gad [BOOT_ADDR_LEN];    /* gateway internet addr */
char bootFile [BOOT_FILE_LEN];    /* name of boot file */
char startupScript [BOOT_FILE_LEN];   /* name of startup script file */
char usr [BOOT_USR_LEN];     /* user name */
char passwd [BOOT_PASSWORD_LEN];   /* password */
char other [BOOT_OTHER_LEN];    /* available for applications */
int procNum;    /* processor number */
int unitNum;    /* network device unit number */
int flags;    /* configuration flags */
} BOOT_PARAMS;

 

下面看boot line结构:

bootDev(unitNum,procNum) hostname:bootFile e=ead b=bad h=had g=gad u=username pw=password f=flags tn=targetName s=startupScript o=other

bootDev     / 设备名,软盘:fd; 硬盘:ATA;网络要根据网卡的类型来做:NE2000及其兼容网卡为ENE,3COM以太网卡为ELT,Intel网卡为EEX,Intel82559网卡为fei ,3C905B PCI网卡为elPci。

unitNum     / 设备单元号,一般指为0
procnum     / cpu的处理器号,一般为0
flags       / 标识,十六进制数,意义如下:
                   0x01: 关闭对处理器0的系统控制
                   0x02: 将局部symbols和全局symbols装入目标机symbols表
                   0x04: 禁止自动启动(即由用户输入boot line)
                   0x08: 快速boot(不计数等待用户输入)
                   0x40: 使用BOOTP or DHCP client
                   0x80: 使用TFTP获取image,否则使用RSH或FTP,用FTP时pw不为空
          0x100: 使目标机登记为一个代理ARP client
ead         / 目标机ip地址,此值如为空,网络接口不被帮定
bad         / 背板接口
had         / 主机ip地址
gad         / 网关地址,如果主机和目标机不在一个局网里,需要
bootFile:   / 存放vxworks image的路径
usr:        / 使用FTP或RSH时的用户名
passwd:     / ftp password
other:      / 从网络启动时此值可为空,当从软盘或硬盘启动时,如果此值为你的网络设备,boot会为你绑定网络设备
hostname:   / 主机名,任意
targetName:/目标机名
startupScript: / 脚本名,在boot以后的target shell里执行 
 
在boot line中,e,b,h等等参数都不要求次序,你也可以让它为空值,如”pw= ”就是指口令为空参数,
看一个例子:
ene(0,0) lijun:c:/tornado/target/config/pc486/vxworks e="10".132.3.40 h="10".132.3.37 u="x86" pw="apue" tn="rod"
在上例中,网卡为NE2000及兼容网卡,主机名为lijun ,vxworks image存放在c:/tornado/target/config/pc486这个目录下,目标机的网络地址为10.132.3.40 主机的网络地址为10.132.3.37,通过FTP服务器下载,用户名为x86,口令为apue,目标机名为rod

再看一个例子:

fd="0",0(0,0) lijun:/fd0/vxWorks e="10".132.3.40 h="10".132.3.37 u="x86" o="ene"
这个例子里面,用的是软盘启动vxworks ,在软盘做好boot 后,还需要把vxworks image拷入软盘,在boot 起来以后,引导程序会在软盘里寻找vxworks,并把它启动。
软盘用fd0表示,硬盘用ATA(0,0),最后的参数o="ene" 表示网络设备是NE2000网卡,并将之和ip地址绑定。
 

上面是有关boot的一些总述。

在vxworks里面,针对每一种的bsp(什么叫bsp?参看本文上),都有各自的配置文件,在C:/Tornado/target/config/bspname/config.h里, 打开config文件,就会看到上面所说的 default_boot_line,接下来要做的就是根据你的情况修改此行参数,使之符合自己的要求。 在实时应用系统的开发调测阶段,往往采用以PC机作为目标机来调测程序。主机PC和目标机PC之间可采取串口或是网口进行联结。由于大多数目标已配有网卡,网络联结成为最简单快速的连接方式。下面是它的详细步骤:
1)、修改通用配置文件//Tornado/target/config/bspname/config.h.
     针对不同的网卡,其名称不同,如NE2000及其兼容网卡为ENE,3COM以太网卡为ELT,Intel网卡为EEX,Intel82559网卡为fei ,3C905B PCI网卡为elPci。(以3COM以太网卡为例)

2)、针对目标机的网卡,#define INCLUDE_ELT,同时 #undef 其它网卡

在config.h文件中修改相应网卡类型(如网卡为3COM网卡)的定义部分:
#define IO_ADRS_ELT 网卡I/O地址
#define INT_LVL_ELT 网卡中断号
 
3)、修改#define DEFAULT_BOOT_LINE的定义:
#elif (CPU_VARIANT == PENTIUM) (修改此行后的DEFAULT_BOOT_LINE)
#define DEFAULT_BOOT_LINE /
"elt(0,0)主机标识名:vxWorks h=主机IP e=目标机IP u=登录用户名 pw=口令 tn=目标机名" 
例如:#define DEFAULT_BOOT_LINE /
"elt(0,0)comps:VxWorks h="10".132.101.88 e="10".132.101.82 u="x86" pw="xxx" tn="x86""

 

 

 

讲过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文档,这里只是给个索引,我想已经足够了。

 

转载地址:http://tohvi.baihongyu.com/

你可能感兴趣的文章
第七章 背包问题——完全背包
查看>>
51nod 分类
查看>>
1136 . 欧拉函数
查看>>
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
性能扩展问题要趁早
查看>>
MySQL-数据库、数据表结构操作(SQL)
查看>>
OpenLDAP for Windows 安装手册(2.4.26版)
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Spring MVC和Struts2的比较
查看>>
Hibernate和IBatis对比
查看>>