首先感谢gaoping8384 (from EDW)
【续】硬盘加载
【第一步】 修改config.h中的启动行参数:
(要注意你的CF卡是使用哪个ata控制器)
(1) 在config.h中
#define DEFAULT_BOOT_LINE \:
"ata=1,0(0,0)host:/ata1/vxWorks h=192.168.0.24 e=192.168.0.55 o=rtl"
【第二步】 在BSP中修改有关ata配置的部分:
(2) 在config.h中包含定义:
#define INCLUDE_ATA /*包含IDE或EIDE(ATA)硬盘驱动*/
(3) 在config.h中将
#define SYS_WARM_TYPE SYS_WARM_FD
改为
#define SYS_WARM_TYPE SYS_WARM_ATA /*定义热启动设备为硬盘*/
(4) 在config.h中把
#define SYS_WARM_ATA_CTRL 0
改为
#define SYS_WARM_ATA_CTRL 1 /*使用1#硬盘控制器进行热启动*/
(5) 在config/bspname/sysLib.c中找到
ATA_RESOURCE ataResource[]=
{
................
PCMCIA
...................
}
修改为
ATA_RESOURCE ataResource[]=
{
................
IDE_LOCAL
...................
} /*定义设备为IDE 硬盘*/
另外需要改写其他的参数。例如ATA1_CONFIG等等。
(6) 在sysLib.c中将原来的ataTypes数组
ATA_TYPE ataTypes[ATA_MAX_CTRLS][ATA_MAX_DRIVES] =
{
................
{{761, 8, 39, 512, 0xff}, /* ctrl 1 drive 0 */
...............
};
改为
ATA_TYPE ataTypes[ATA_MAX_CTRLS][ATA_MAX_DRIVES] =
{
................
{{980, 8, 32, 512, 0xff}, /* ctrl 1 drive 0 */
...............
}; /*使它和你的CF卡的几何参数(磁道,扇区,柱面等)一致*/
这个参数可以在BIOS中查找到,使用IDE HDD AUTO DETECTION 就可以查看你的CF卡的参数,这对于硬盘也是一样的。
注:此处偶的不作任何参数的修改也可以。
(7) 在config/bspname/pc.h中找到
#define ATA1_INT_LVL 0x9
改为
#define ATA1_INT_LVL 0xf /*定义中断请求号*/
注意:在制作"硬盘加载"方式下的引导盘之前,必须先完成"网络加载"方式下的第1.2.3.5步,主要是为了生成工具链:depend.PENTIUMgnu,为下面的编译作准备。
【第三步】 创建Bootrom和Vxworks image:
(8) 首先用Dos 6.22 启动pc104,格式化 CF 卡为一个主DOS分区.
执行以下的步骤:
C:\>format C: 回车;
C:\>vxsys C: 回车;
(成功后vxld会成功写入CF卡的引导扇区,表明你的CF卡已经在vxworks下被认可了,现在就可以创建Bootrom了。)
(9) 参照《网络加载》中的第二步:编译和固化Bootrom,创建一个引导映像bootrom_uncmp,并将bootrom.sys文件做到你的CF卡中。
(10) 创建VxWorks Image(可选择带应用程序或不带应用程序),并将其拷贝至CF卡中。至此,引导盘制作完毕,现在可以将CF卡插入目标机并启动,出现了心爱的loading!
其加载顺序是这样的:
VxLd-->bootrom.sys-->VxWorks image
【最后】 下载调试应用程序
(11) 如果硬盘中的vxWorks映象没有封装应用程序,单纯只是为了从硬盘启动vxWorks,则启动成功后,还可以配置你的FTP Server和target server,通过网络(连接好网线)来下载调试运行你的应用程序,也就是说硬盘加载方式不仅可以封装运行,还可以下载调试。若硬盘中的vxWorks映 象已经封装应用程序,则不能再进行下载调试。
注意:
1. 在默认设置情况下,如果在config.h中包含定义#define INCLUDE_ATA,则vxworks 从一个ata 设备上启动。但是如果有两个ata controller的话,需要修改sysLib.c中的ataResources 来解决这个问题,来支持更多的ata drive。而一般的CF卡是在ata1 controller上面的,所以这就是问题的关键所在。
2. 在启动行参数设置中,
"ata=1,0(0,0)host:/ata1/vxWorks h=192.168.0.24 e=192.168.0.55 u=target o=rtl"
"ata=1,0(0,0)"中括号外的1表示ata controler1(硬盘控制器1),0表示drive 0
(驱动器0);括号内的前一个0表示硬盘编号,和drive 0是同样的意思,后一个0表示硬盘的分区编号。
"host:/ata1/vxWorks"是需要Bootrom加载的映象文件,其中"ata1"不是必须的,只是选择的设备名称,可根据喜好任意设定,如"gaoping"。特别注意的是这里的vxWorks一定要与生成的映象文件名一致。
3. 在硬盘加载方式中,虽然我们是将CF卡作为硬盘,但它与普通的硬盘还是有差别的,一般的CF卡作为ata1 controller(secondary),普通的硬盘才作为ata0 controller(primary)。
4. 驱动器也有主从之分:drive 0(master)表示主驱动器 "C:";drive 1(sl**e)表示从驱动器D:"。
注:CF卡做盘方法:
法一:宿主机上
在Windoze 2000下,可以用vxsys.exe a:把引导代码写入a盘,但是我试过vxsys.exe h:
却出现错误(h:为CF卡的盘符)。偶锁定不了CF卡,如果有哪位大牛做成功了,不妨告诉一声。
不过在Win2k上还是有办法的,可以用Flash tool 专用工具做盘,也可以用WinHex等16进制文本编辑工具完成该使命。
用WinHex可把a:盘中的引导扇区(512Bit)导出,并把此内容导入CF卡的引导扇区,再把bootrom.sys
copy到CF卡上,至此就可以从你的CF卡上引导你的VxWorks系统了。
法二:目标机上
1:准备一张软盘,把bin\目录下vxsys.exe,vxcopy.exe 和已经做好的bootrom.sys 拷贝到此张软盘上。另准备一张Dos 6.22或者Win98启动盘,用启动盘进入Dos系统. 试用lock c: (C:为你的CF卡盘符)命令。有时候
可以不用此命令,原因我也不知道。接着用vxsys c:来把引导代码写入CF卡,
接着用vxcopy a:\bootrom.sys c: 最后用chkdsk c:\bootrom.sys检查boorom.sys的连续性。
2: 可以用串口或网络把目标机上引导起来,通过wShell或者telnet, tShell把mkboot.o下载到目标机上,用
mkboot命令做盘。这里我就不详细叙述了。
修改将继续...
From: http://hi.baidu.com/pp2016001/blog/item/513a9701c93112031d958387.html