X86的板子上要跑VxWorks的话,bios必选先执行一段load,用来引导VxWorks的image文件,这段load可以放在软盘,U盘,硬盘等存储介质上,其主要内容有2点:

1 改写存储介质的MBR(512B),让bios可以读取指定名字的启动文件,如bootrom.sys

2 把启动文件放入存储介质里,要求存储介质必须挂载FAT16文件系统

(FAT16文件系统限制了启动盘不能超过2GB)

可见重点是要对存储介质分区,格式化,挂载文件系统,写入MBR,写入启动文件。整个这个过程称之为启动盘制作。风河支持多种启动方式,这里重点介绍其中2中,分别是: 在windows下通过diskpart制作 和 在linux下通过fdisk工具制作。

使用Diskpart工具在windos下制作VxWorks U 盘启动盘

1. 键盘快捷键 “windows键+R” 运行”cmd”,打开命令行窗口
2. 输入”diskpart”启动,插入U盘或者硬盘
3. 输入 “lis dis” 显示磁盘列表
DISKPART> lis dis
Disk ### Status Size Free Dyn Gpt
——– ————- ——- ——- — —
Disk 0 Online 465 GB 0 B
Disk 1 Online 465 GB 2048 KB
* Disk 3 Online 959 MB 0 B
4 输入”sel dis X” 选择X号磁盘,此处Disk 3 是U 盘,选择成功后焦点指向disk 3
DISKPART> sel dis 3
Disk 3 is now the selected disk.
DISKPART> lis dis
Disk ### Status Size Free Dyn Gpt
——– ————- ——- ——- — —
Disk 0 Online 465 GB 0 B
Disk 1 Online 465 GB 2048 KB
* Disk 3 Online 959 MB 0 B
5 输入”clean”清除磁盘上所有的内容
DISKPART> clean
DiskPart succeeded in cleaning the disk.
6 输入”create partition primary” 创建主分区
DISKPART> create par primary
DiskPart succeeded in creating the specified partition.
DISKPART> lis par
Partition ### Type Size Offset
————- —————- ——- ——-
* Partition 1 Primary 959 MB 64 KB
7 输入”active”激活分区
DISKPART> active
DiskPart marked the current partition as active.
8 输入”format fs=fat quick” fat16格式快速格式化主分区
DISKPART> format fs=fat quick
100 percent completed
DiskPart successfully formatted the volume.
9 输入”assign”自动分配驱动器号.(指定驱动器号输入”assign letter=x”,x改成用户驱动器号)
DISKPART> assign
DiskPart successfully assigned the drive letter or mount point.
10 输入”exit”退出diskpart
11 键盘快捷键 “windows键+R” 运行”cmd”,打开命令行窗口,切换到mkbt工具目录下
12 把BSP包里的bootsect.bin文件拷贝到mkbt工具的文件夹里,如果有则不用做
13 输入”mkbt -x bootsect.bin f:” f是之前assign命令分配好的磁盘驱动号
C:\mkbt20>mkbt -x bootsect.bin f:
* Expert mode (-x)
* Warning different filesystem ID
Size=0bytes OEM=”MSDOS5.0″ VolLabel=”NO NAME” FileSys=”FAT16″
14 把启动文件bootrom.sys 和 bootapp.sys 拷贝到U盘里, 至此启动盘制作完成
15 拔出U盘,插入设备板上电启动.

注意事项:

1. FAT16文件系统最大支持容量是2G或者4G取决与windows版本,因此如果U盘容量大于2G,建议在创建主分区时指定size在2GB以内, 第6步改为:

DISKPART> create par primary size=2048
DiskPart succeeded in creating the specified partition.

其余步骤相同

2 其它常用命令. 选择分区命令”sel par n”, n代表分区号, 删除分区命令”del par”

使用Diskpart工具在windos下制作VxWorks sata 启动盘

lis dis
sel dis x
create par primary size=2048 主分区2G
create partition extended
create partition logical size=10240 逻辑分区10G
create partition logical 剩余逻辑分区
list par
sel par 1
active 唯一一个主分区并且要激活
format fs=fat quick FAT16文件系统
assign 分配磁盘符
sel par 2
format fs=ntfs quick
assign
sel par 3
format fs=ntfs quick
assign
lis par
lis vol
exit

使用fdisk工具在linux下制作VxWorks U 盘启动盘

环境 Ubuntu16.10

1 键盘快捷键 “ctrl+alt+t”打开终端
2 输入”sudo -s”切换到root模式下,插入U盘或者硬盘
3 输入 “fdisk -l” 显示磁盘列表
root@yy ~# fdisk -l
Disk /dev/sdb: 3.6 GiB, 3880452096 bytes, 7579008 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcad4ebea
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 62 3934207 3934146 1.9G 6 FAT16
4 输入 “mount”或者df/dfc 查看磁盘mount,如果u盘/磁盘mount的话, 一定先umount u盘/磁盘
root@yy ~# df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 1785840 0 1785840 0% /dev
tmpfs 360872 7772 353100 3% /run
/dev/sda6 204360488 39141688 154814756 21% /
tmpfs 1804344 300 1804044 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 1804344 0 1804344 0% /sys/fs/cgroup
cgmfs 100 0 100 0% /run/cgmanager/fs
tmpfs 360872 60 360812 1% /run/user/1000
/dev/sdb1 1963872 864 1963008 1% /media/wind/47AF-05B0
root@yy ~# umount /dev/sdb1
5 输入”fdisk /dev/sdb” 对磁盘进行分区
p 查看分区
d 删除分区
p 查看分区
n 创建新分区
p 创建主分区
1 主分区号
enter 开始扇区
+1920M 分区大小 eg: +1G, +32M
p 显示分区
a 激活主分区,设置boot标志
t 改变分区文件系统
6 选FAT16文件系统
w 使能分区表

如果设备出现

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

可以使用partprobe命令以免reset,更应该考虑的是 是否 umount u盘或者磁盘设备

Command (m for help): p
Disk /dev/sdb: 3.6 GiB, 3880452096 bytes, 7579008 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcad4ebea
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 34815 32768 16M 6 FAT16
6 从vxWorks安装目录拷贝 $WIND_BASE/host/$WIND_HOST_TYPE/bin/vxld.bin 到本机某个目录. vxld.bin是一个16位的bootload,bios会先load vxld然后vxld会loadbootrom.sys,控制权交给bootrom
7 把启动文件bootrom.sys和bootapp.sys拷贝到和vxld.bin同一个目录下
8 配置mtools 驱动器名
vim /etc/mtools.conf
对U盘设备添加一行,磁盘设备类似
drive u: file=”/dev/sdb1″
9.格式化分区
mformat u: -B vxld.bin 把vxld.bin写入MBR 或者
mformat u: -B bootsect.bin 把bootsect.bin写入MBR

这一步很重要,有可能会报错,报错最好,需要修改开始扇区位置

root@yy ~# mformat u: -B vxld.bin
mformat: Hidden (30) does not match sectors (4)

如果不报错但是u盘无法启动,可以试试同样修改开始扇区位置

fdisk /dev/sdb
x 扩展命令
b 新的起始扇区位置 一般设成1
r 返回主菜单
w 写分区表
再次执行mformat命令 移动要按照mformat要求的sectors来改写
mcopy bootrom.sys u:
mcopy bootapp.sys u: 或者直接拷贝文件
sync
eject /dev/sdb1

注意事项

  • 一定要先umount 设备再执行fdisk
  • start sector 可能要修改,否则不行
  • 启动盘尺寸不能超过2GB,否则必须分区

使用fdisk工具在linux下制作VxWorks sata启动盘

和上面写过的方法相同,因此这里就不详细描述了.

df 查看硬盘是否mount, 如果mount必须先umount

fdisk -l 查看硬盘分区信息

fdisk /dev/sda 进入硬盘

p 显示磁盘分区
d 删除磁盘分区,可能需要多次d命令删除多个分区
n 创建新分区
p 主分区
1 分区号
enter 默认first sector
+1920M 启动分区尺寸不能超过2GB
a 设置启动盘标志
t 分区文件系统类型
6 FAT16
x 扩展命令
b 重设first sector
1 new beginning of data
r 返回主菜单
p
n 创建其它分区
p
enter partition type
enter partition number
enter first sector
enter last sector
p
w 写分区表
为启动分区分配磁盘符

vim /etc/mtools.conf

添加 “drive c: file=”/dev/sda1”

mformat c: -B vxld.bin bootload-vxld.bin写入MBR

报错:

mformat: Hidden (1) does not match sectors (63)

Note: mformat要求开始分区必须位于第63个sector,修改之

fdisk /dev/sda
x 扩展命令
b 重置new beginning of data
1 选择分区,启动分区是1
63 new beginning of data 改成63
r 返回
w 写分区表
mformat c: -B vxld.bin
把启动文件copy到硬盘里或者使用mcopy bootapp.sys c:
sync
reboot

至此完成

为什么要激活(active)?
因为,激活后分区信息和唯一的活动分区标记会写入硬盘分区表,这样当启动电脑时BIOS会检测主分区的操作系统,然后操作系统开始控制启动权。
格式化分区命令

Format Quick 快速格式化分区,默认为NTFS格式

Format FS=NTFS Quick 分区格式为NTFS并快速格式化

Format FS=FAT32 Quick 分区格式为FAT32并快速格式化

Format FS=FAT16 Quick 分区格式为FAT16并快速格式化

linux下 二进制查看工具

ubuntu下安装: apt get install hexedit, hexer ,ghex ,bless

windows下用DiskGenius 工具

linux下查看MBR

dd if=/dev/sda of=mbr.bin bs=512 count=1

hexer mbr.bin

知道这些可以备份分区表:

dd if=/dev/sda of=mbr.bak bs=512 count=1

恢复分区表:

dd if=mbr.bak of=/dev/sda bs=512 count=1

关于vxld.bin和bootsect.bin的区别:

VxWorks, vxld.bin, bootsect.bin