当前位置: 首页 > 工具软件 > Flashboot > 使用案例 >

VxWorks中怎么从Flash Boot(转贴)

沈子昂
2023-12-01

本文主要介绍VxWorks系统在MPC860系列处理器的开发中怎样去掉BOOT Flash,直接从Flash引导VxWorks的BootRom。

WindRiver的VxWorks和Motorola的MPC860系列微处理器已经广泛应用到通信行业的通信产品中,在用VxWorks系统进行开发时,会生成两个文件,一个是BootRom文件,类似Windows中的BIOS,是引导文件,完成内存初始化,内核初始化,基本硬件的初始化并最终引导VxWorks系统启动,另外一个是VxWorks文件,此文件中包括VxWorks系统内核及上层应用程序,而这两个文件在MPC860的开发中一般存储在两片不同的Flash上,即BootRom存储在BOOT Flash,而VxWorks存储在Flash上。

实际开发中,生成的没有压缩的BootRom大小一般为512K左右,在VxWorks 5.4中有450K左右,而在VxWorks 5.5中为540K左右,一般存储BootRom的Flash只需要512K大小,因为即使540K的BootRom也可以截成512K。

在硬件开发Flash选型时,Boot Flash一般采用SST公司的28VF040,29VF040等,Flash芯片一般会采用Intel,AMD公司的,根据需要可能会采用容量为4M,8M,16M,32M大小不等。从节省成本角度考虑,可以考虑将BootRom直接转载到Flash中并引导,则可以节省一片Boot Flash?

VxWorks系统中,加上上层应用程序的生成VxWorks文件一般为3M左右,所以不管采用4M,8M或更大的Flash,同时装载BootRom,VxWorks文件也绰绰有余。

将Flash地址映射成两个地址段,一段用做BootRom,一段用做VxWorks使用,用做BootRom的地址端为0xFFF00000~0xFFF80000,另外一段用做VxWorks的地址段为0x4080000~0x4800000(假设此Flash大小为8M大小),在0xFFF00000~0xFFF80000地址段写入BootRom,在0x4080000~0x4800000地址段写入VxWorks,加电后,PC指针会跳到0xFFF001000地址执行第一条指令,引导BootRom起来并最终VxWorks系统引导成功。

1、片选

在romInit.s文件中要做如下片选操作,片选0为BOOT Flash的片选地址,片选1为Flash的片选地址,其中ROM_BASE_ADRS为0xFF00000

 /*--------------------------------------------------------------------------------------------------------------------*/

/*                      Initialize Chip Select 0 for BootRom                                                                      */

/*---------------------------------------------------------------------------------------------------------------------*/

lis r5, HIADJ(ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V)

addi r5, r5, LO(ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V)

stw r5, BRO(0)(r4)

lis r5, HIADJ(0xFFF80000 | 0x00000100 | 0x00000080)

addi r5, r5, LO(0xFFF800000 | 0x000000100 | 0x000000080)

stw 5, ORO(0)(r4)

 

/*----------------------------------------------------------------------------------------------------------------*/

/*                 Initialize Chip Select 1 for FLASH                                                                         */

/*----------------------------------------------------------------------------------------------------------------*/

lis r5, HIADJ(0x04000000 | BR_PS_16 | 0x000000001)

addi r5, r5, LO(0x04000000 | BR_PS_16 | 0x00000001)

stw r5, BR1(0)(r4)

lis r5,  HIADJ(0xFF800000 | 0x000000100 | 0x0000080)

addi r5, r5, LO(0xFF800000 | 0x00000100 | 0x00000080)

stw r5, OR1(0)(r4)

 

地址映射

在sysLib.c文件中有一sysPhysMemDesc的地址映射数组的声明,对BOOT Flash和Flash的地址按照如下的地址映射后,VxWorks系统才会让你对此地址进行相应的读写操作。

{

       (void *)0x4000000,

      (void *)0x0400000,

        0x0080000,           /*8M - Flash window 1 */

       VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE,

       VM_STATE_VALID | VM_STATE_WRITABLE

},

{

   (void *)ROM_BASE_ADRS,

   (void *)ROM_BASE_ADRS,

    ROM_SIZE,   /*Flash memory */

    VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE |

     VM_STATE_MASK_CACHEABLE,

      VM_STATE_VALID | VM_STATE_WRITABLE |

       VM_STATE_CACHEABLE_NOT

}

文件烧录

因为Boot Flash是可以在烧录器上烧录的,而Flash芯片是直接焊接在MPC860的主板上的,只能通过相应的Flash驱动才能读写,是不可能通过烧录器烧录的,要解决此问题按照如下方法:

在主板上要保留BootRom Flash插座,要有一片从BOOT Flash引导的BOOT Flash芯片,此芯片中要有已经烧录好的可以正常运行的BootRom程序,先将此芯片加到BootRom Flash座上,加电将系统引导起来,然后用事先写好的将BootRom及VxWorks写入Flash的函数将BootRom及VxWorks文件写入Flash相应的地址段,注意写入的地址要正确,即BootRom的第一条指令必须写入到0xFFF00100地址,关电后将BOOT Flash从座中取出,加电后系统就从Flash中引导起来了。

      

 类似资料: