在BeagleBoard上运行QNX系统

为了让同学们更好地了解在BeagleBoard上运行QNX系统的方法,我将前几天的工作总结了一下。

需要完成的主要步骤如下:

1. BeagleBoard的准备:

首先是准备好BeagleBoard和周边的设备。

我个人使用的是BeagleBoard XM Rev C,然后再加Chipsee 的BeagleBoard XM 扩展板。如果同学们使用的是BeagleBoard XM Rev B或之前的版本,基本步骤都差不多,就是USB HUB加电那一步跳过。如果同学们没有购买BeagleBoard XM 扩展板,需要通过HDMI线将BeagleBoard连接到一个支持HDMI的显示器上。

我使用的周边设备有:5V电源,串口转USB线一条,网线一条。没使用HDMI线,因为BeagleBoard XM 扩展板支持QNX屏幕显示功能,不需要通过HDMI输出到屏幕上。我在运行QNX系统之前先运行了测试SD卡上的由ChipSee做好的WinCE系统,确认电源,串口输出和网络接口都没有问题。

2. 准备SD卡

准备一张2G或者4G的SD卡,将这个SD卡清空,然后在上面创建一个FAT32格式的分区,设置成启动分区。

我自己是在Ubuntu上完成以上工作的,具体步骤如下:

2.1. 清空SD卡:

dd if=/dev/zero of=/dev/sdx bs=1M count=1
2.2. 启动fdisk应用在SD卡上创建分区:

fdisk /dev/sdx


Command (m for help): x


Expert command (m for help): h
Number of heads (1-256, default 4): 255

Expert command (m for help): s
Number of sectors (1-63, default 62): 63
Warning: setting sector offset for DOS compatiblity

Expert command (m for help): c
Number of cylinders (1-1048576, default 1011): 239

Expert command (m for help): r
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-15, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-15, default 15): 15


2.3. 设置分区为启动分区:
Command (m for help): a Partition number (1-4): 1


2.4. 设置分区为FAT32格式
Command (m for help): t

Selected partition 1 Hex code (type L to list codes): c

Changed system type of partition 1 to c (W95 FAT32 (LBA))


2.5. 将分区信息写入SD卡
Command (m for help): w

The partition table has been altered!

2.6. 格式化SD卡的启动分区:
# mkfs.vfat -F 32 /dev/sdx1 mkfs.vfat 3.0.3


对于以上步骤如果有不清楚地地方请参考一下链接:
http://community.qnx.com/sf/wiki/do/viewPage/projects.bsp/wiki/AM_OMAP_boot_resources



3. 准备MLO和U-BOOT.BIN
在QNX官网指定的地址下载MLO程序和U-Boot.bin程序,链接地址如下:
http://community.qnx.com/sf/wiki/do/viewPage/projects.bsp/wiki/Bspdown_ti_omap_3730_beagle
打开页面后找到下面这段文字,点击MLO链接和U-BOOT.BIN链接下载MLO和U-BOOT.BIN
Bootloader modules
Click on the links to download MLO and U-BOOT.BIN


下载MLO和U-BOOT.BIN后,将这两个文件拷贝到Linux系统(我使用的是Ubuntu)上。

在Linux上mount刚才格式化好的SD启动分区。

然后将MLO文件和U-BOOT.BIN拷贝到SD卡的启动分区上,注意一定要先拷贝MLO文件。

到这一步以后可以进行阶段性测试:

将准备好的SD卡插入BeagleBoard的SD卡槽中。

连接PC 和 BeagleBoard的串口(我是使用的串口转USB线)。

上电启动BeagleBoard。

如果以上步骤没有问题的话,串口监控窗口应该出现uboot启动的信息,类似于:

Texas Instruments X-Loader 1.5.0 (Mar 27 2011 - 17:37:56)

Beagle xM

Reading boot sector

Loading u-boot.bin from mmc

........

OMAP3 beagleboard.org #

如果对于串口调试窗口配置有问题,可以参考下文第5步有关QNX Momentics Terminal窗口配置部分
如果这一步测试失败,应该检查之前的步骤,看是否在格式化SD卡或者是拷贝文件时出现问题。

4.准备QNX的系统影像文件

从以下链接下载QNX for BeagleBoard的BSP文件http://community.qnx.com/sf/wiki/do/viewPage/projects.bsp/wiki/Bspdown_ti_omap_3730_beagle

启动QNX Momentics开发环境,按以下步骤导入BSP文件:

选择 File - Import

展开QNX .
选择 QNX Source Package and BSP 并点击Next.
在Select a method to import source package 对话框选择Import from local archive file,然后找到刚才下载的BSP文件.
选择需要导入的BSP .
点击 Next.
选择一个 working set,缺省有填好working set,可以不做修改
点击 Finish.

导入后选择项目“bsp-TI-omap3730-Beagle-xm-src”,点击右键,选择“Build Project”,然后在images目录下可以找到新生成的文件ifs-omap3730-beagle.bin,注意文件的修改日期,如果文件的修改日期不是你操作是的当前时间,应该编译不成功,需要检查QNX Momentics的problem窗口。

制作了QNX系统影像文件后,将ifs-omap3730-beagle.bin文件拷贝到SD卡启动分区中。

5. 准备串口调试窗口

在QNX Momentics中选择“windows -> show view -> others”然后选择“Terminal -> terminal”。

在出现的“Terminal”窗口点击“setting”图标,将connection type选为serial (就是串口的意思)

其它参数按以下信息配置:

Baud: 115200

Bits: 8

Stop bits: 1

Parity: none

Flow control: none



6. 测试手动启动QNX系统
确认ifs-omap3730-beagle.bin文件已经拷贝到SD卡的启动分区中,将SD卡插入BeagleBoard,连接BeagleBoard和PC的串口,在QNX Momentics的terminal窗口点击“connect”图标。


给BeagleBoard上电启动,在QNX Momentics的terminal窗口应该可以看见uboot启动的信息,在出现uboot提示符:OMAP3 beagleboard.org # 后在terminal窗口输入如下命令装载QNX系统:
fatload mmc 0 0x80100000 ifs-omap3730-beagle.bin; go 80100000


BeagleBoard会加载QNX系统,最后显示QNX桌面和一组转动的齿轮。

7. 配置自动启动QNX系统
新建一个uEnv.txt文档,写入以下信息:
nandboot=echo Booting QNX ...;fatload mmc 0 0x80100000 ifs-omap3730-beagle.bin;go 0x80100000
保存后将这个uEnv.txt拷贝到SD卡的启动分区中。

8. 修改QNX BSP文件使它支持网络接口。


通过以上方法启动QNX系统后,它不能识别BeagleBoard的网络接口,原因是BeagleBoard XM Rev C 在启动时不给USB HUB加电。
这个需要通过修改BSP文件进行调整。


在QNX Momentics环境中找到以下文件并打开:
/bsp-TI-omap3730-Beagle-xm-src/src/hardware/devb/mmcsd/arm/beagle.le.v7/sim_bs.c

在twl4030_i2c_write方法后加入一个beagle_USB_rev_c_turn_on() 方法
方法代码如下:

/* USB Hub Enable Definitions */
/* I2C Addressing */
#define ADDRESS_GROUP_ID3 0x4A
#define LEDEN_PHYSICAL_ADDRESS 0xEE


/* LEDEN Register bit definitions */
#define LEDAON 0x01 /* LEDA Enable */
#define LEDAPWM 0x10 /* LEDA PWM Enable */

/* Parameter: i2c_fd - file handle to i2c */
static int beagle_USB_rev_c_turn_on(int i2c_fd)
{
uint8_t i2c_val;
/* printf("\n\rTurn on USB Hub\n\r"); */
/* get the existing register value that includes Hub control bits */
if ( twl4030_i2c_read( i2c_fd, ADDRESS_GROUP_ID3,LEDEN_PHYSICAL_ADDRESS, &i2c_val) == -1)
return MMC_FAILURE;


/* printf("\n\rExisting Reg value = %d\n\r", i2c_val ); */
/* Set the appropriate bits to enable the Hub */
if ( twl4030_i2c_write( i2c_fd, ADDRESS_GROUP_ID3,LEDEN_PHYSICAL_ADDRESS,i2c_val |LEDAON |LEDAPWM ) == -1)
return MMC_FAILURE;


/* Let's check the updated register value */
/* twl4030_i2c_read(beagle->fd, 0x4A,0xEE, &i2c_val); */
/* printf("\n\r New Reg value = %d\n\r", i2c_val ); */
return MMC_SUCCESS;
}

然后修改function bs_init(…) 方法,加入beagle_USB_rev_c_turn_on方法的调用:


//原来的代码...

. . .
. . .
EXISTING CODE...
// use GPIO_DEBEN1 reg to enable debouncing on GPIO0 for the beagle
if (twl4030_i2c_write(beagle->fd, 0x49, 0xa7, 0x00))
{
slogf(_SLOGC_SIM_MMC, _SLOG_ERROR, "BEAGLE MMCSD: unable to enable debouncing");
return MMC_FAILURE;
}
ADD NEW CODE AS BELOW...
// Turn on Beagleboard Revision-C USB Hub
if ( beagle_USB_rev_c_turn_on(beagle->fd) == MMC_FAILURE )
{ slogf(_SLOGC_SIM_MMC, _SLOG_ERROR, "OMAP3 MMCSD: fail on beagle_USB_rev_c_turn_on() for USB Hub");
return MMC_FAILURE;
}
. . .
. . .

修改后保存文件,重新编译项目,将新生成的ifs-omap3730-beagle.bin文件拷贝到SD卡启动分区中。
在BeagleBoard上插入网线,网线另一端插入一个支持DHCP的路由器,给BeagleBoard上电启动,可以看到板上D14灯会亮,系统认到网卡,获取到IP地址。

你可能感兴趣的:(QNX)