在BeagelBoard上成功運(yùn)行QNX系統(tǒng)后,本以為可以很快開始進(jìn)一步的學(xué)習(xí),沒想到遇到麻煩的問題。又經(jīng)過幾天的努力才把問題弄清楚,下面繼續(xù)記錄折騰過程。
<wbr></wbr>
第一次成功地在BeagleBoard上運(yùn)行QNX系統(tǒng)后首先注意到的問題是QNX系統(tǒng)不能夠自動啟動,需要在串口上運(yùn)行裝載ifs文件的命令才能啟動。針對這個(gè)問題,需要研究一下u-boot如何自動裝載系統(tǒng)影像文件。
<wbr></wbr>
發(fā)現(xiàn)的第二個(gè)問題更嚴(yán)重一些,就是QNX系統(tǒng)在BeagleBoard上啟動后不能成功啟動網(wǎng)絡(luò)接口,無法獲取網(wǎng)絡(luò)地址。如之前的博文提到,QNX Momentics是同過qconn ip進(jìn)行調(diào)試的,如果目標(biāo)板上不能獲取IP地址,就無法進(jìn)行其它程序的調(diào)試。
<wbr></wbr>
<wbr></wbr>
對于第一個(gè)問題的相關(guān)解決方案有三個(gè),都是從網(wǎng)上找到的。
其中一個(gè)解決方案是再u-boot啟動后可以通過u-boot命令設(shè)置配置信息,然后保存配置信息,再次啟動時(shí)u-boot會使用所保存的配置信息。
還有一個(gè)解決方案是u-boot會從一個(gè)叫uEnv.txt的文件中讀取配置信息,可以在uEnv.txt文件中加入裝載信息
另一個(gè)解決方案提到u-boot會運(yùn)行boot.scr文件,可以在boot.scr文件中加入裝載命令。
<wbr></wbr>
第一個(gè)解決方案很快被證實(shí)無效,該方案主要是在u-boot啟動后使用setenv命令設(shè)置配置信息,然后通過saveenv命令保存配置信息。我測試發(fā)現(xiàn)運(yùn)行到saveenv時(shí)BeagleBoard就死機(jī)了。后來查資料發(fā)現(xiàn)BeagleBoard上沒有NAND Flash,運(yùn)行命令 saveenv會導(dǎo)致BeagleBoard掛起。
<wbr></wbr>
第二個(gè)解決方案是從QNX網(wǎng)站上找的:
http://community.qnx.com/sf/go/projects.bsp/discussion.bsp.topc20393
做法是在SD卡的啟動分區(qū)里新建一個(gè)uEnv.txt文件,文件中加入下面代碼:
nandboot=echo Booting QNX ...;fatload mmc 0 0x80100000 bsp-TI-omap3730-Beagle-xm.ifs;go 0x80100000
我測試了一下,測試失敗,我的BeagleBoard上的u-boot啟動后并沒有從uEnv.txt上讀取信息。
<wbr></wbr>
<wbr></wbr>
第二個(gè)解決方案是做一個(gè)boot.scr文件處理,剛開始我很天真地認(rèn)為用個(gè)文本編輯器修改一下Android版本的boot.scr就可以了,測試失敗。后來發(fā)現(xiàn)boot.scr是通過 mkimage命令生成的,下面鏈接有說明。
http://groups.google.com/group/beagleboard/browse_thread/thread/e97fb9895c09a98c
基本做法就是在Linux(我還是使用Ubuntu)上使用mkimage命令把一個(gè)文本文件轉(zhuǎn)換成目標(biāo)系統(tǒng)的boot.scr文件,文本文件中可以加入希望執(zhí)行的命令。
我將生成的boot.scr文件放入SD卡啟動分區(qū)中,u-boot啟動時(shí)確實(shí)運(yùn)行了boot.scr中的命令,但是報(bào)錯(cuò),說我的ifs文件是“ Invalid FAT entry ”,就是說我的ifs文件格式不對。
<wbr></wbr>
<wbr></wbr>
<wbr></wbr>
對第一個(gè)問題再也沒有辦法后開始想辦法處理第二個(gè)問題,有關(guān)網(wǎng)絡(luò)接口的問題。
在網(wǎng)上找了一輪以后發(fā)現(xiàn)BeagleBoard Rev C版缺省狀態(tài)下是不對USB HUB加電的,需要修改BSP,網(wǎng)上專門有一篇文章講述,為了同學(xué)們方便,將原文轉(zhuǎn)載如下:
My solution to enable USB Hub which is disabled at boot time in Rev-C board
---------------------------------------------------------------------------
Using Momentics IDE 4.7.0 with the QNX BSP imported as described in "QNX 6.5.0 and 6.4.1 BSPs for BeagleBoard-xM Quick Start Guide" Issue 1 February, 2011
1. Edit the file: /bsp-TI-omap3730-Beagle-xm-src/src/hardware/devb/mmcsd/arm/beagle.le.v7/sim_bs.c
2. Add<wbr> the function (see below) beagle_USB_rev_c_turn_on() to this file, just after the definition of function twl4030_i2c_write(…)<br> 3. You need to call this new function at an appropriate time. So go to the function bs_init(…) and add the new function as shown here:<br><br><wbr><wbr> . . .<br><wbr><wbr> . . .<br><wbr><wbr><wbr> EXISTING CODE...<br><wbr><wbr><wbr> // use GPIO_DEBEN1 reg to enable debouncing on GPIO0 for the beagle<br><wbr><wbr><wbr> if (twl4030_i2c_write(beagle->fd, 0x49, 0xa7, 0x00))<br><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> slogf(_SLOGC_SIM_MMC, _SLOG_ERROR, "BEAGLE MMCSD: unable to enable debouncing");<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> return MMC_FAILURE;<br><wbr><wbr><wbr> }<br><wbr><wbr> ADD NEW CODE AS BELOW...<br><wbr><wbr><wbr> // Turn on Beagleboard Revision-C USB Hub<br><wbr><wbr><wbr> if ( beagle_USB_rev_c_turn_on(beagle->fd) == MMC_FAILURE )<br> {<wbr> slogf(_SLOGC_SIM_MMC, _SLOG_ERROR, "OMAP3 MMCSD: fail on beagle_USB_rev_c_turn_on() for USB Hub");<br><wbr><wbr> return MMC_FAILURE;<br> }<br><wbr><wbr> . . .<br><wbr><wbr> . . .<br> 4. Rebuild the BSP as per the instructions in the Quick Start Guide<br> 5. Copy the .ifs file to your SD card as usual.<br> 6. Boot up. A green LED, D14, indicates that power is applied to the HUB circuitry.<br> ------------------------------------------</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
/* 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;
}
--------------------------------------------------------------------------
這里提到的主要工作就是修改文件/bsp-TI-omap3730-Beagle-xm-src/src/hardware/devb/mmcsd/arm/beagle.le.v7/sim_bs.c
然后重新編譯QNX系統(tǒng)。
同學(xué)們照著樣例修改就可以,過程中需要仔細(xì)一點(diǎn)。主要要做的是增加一個(gè)beagle_USB_rev_c_turn_on方法,該方法的實(shí)現(xiàn)在該段說明的最后部分,注意方法前還有幾個(gè)#define不要漏掉了。 增加了beagle_USB_rev_c_turn_on方法后就在bs_init方法中增加對方法beagle_USB_rev_c_turn_on的調(diào)用。
<wbr></wbr>
重新編譯后在bsp-TI-omap3730-Beagle-xm-src項(xiàng)目的images目錄中生成了文件ifs-omap3730-beagle.bin。
我將這個(gè)文件拷貝到SD卡的啟動分區(qū)中,啟動BeagleBoard,準(zhǔn)備通過下面的uboot命令啟動QNX:
fatload mmc 0 0x80100000 ifs-omap3730-beagle.bin;go 0x80100000
<wbr></wbr>
沒想到uboot又報(bào) Invalid FAT entry 錯(cuò)誤。(這時(shí)我要接近崩潰了。。。。)
<wbr></wbr>
峰回路轉(zhuǎn)也就是在這里,有資料說老版本的uboot會有“ Invalid FAT entry ”的問題,這時(shí)想到我的MLO和u-boot.bin是從Android系統(tǒng)里拷貝的,可能會是老版本。
于是老老實(shí)實(shí)從QNX官網(wǎng)指定的地方下載了MLO和U-BOOT.BIN,方便大家,鏈接如下:
http://community.qnx.com/sf/wiki/do/viewPage/projects.bsp/wiki/Bspdown_ti_omap_3730_beagle
<wbr></wbr>
重新格式化SD卡(為什么要重新格式化SD卡?因?yàn)橘Y料提到MLO必須是第一個(gè)拷貝到SD卡啟動分區(qū)的)。
將新下載的MLO和U-BOOT.BIN拷貝到SD卡啟動分區(qū)上,順便將uEnv.txt文件也拷貝上去了,修改了一下uEnv.txt,指定啟動ifs-omap3730-beagle.bin文件。
<wbr></wbr>
上電后相當(dāng)激動呀!!!!!!!
QNX系統(tǒng)自動啟動,不需要串口輸入uboot命令(解決了第一個(gè)問題)
QNX系統(tǒng)成功獲取IP地址(解決了第二個(gè)問題)
還意外地發(fā)現(xiàn)QNX系統(tǒng)還啟動了一個(gè)OpenGL樣例
<wbr></wbr>
最后上圖:

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
