折騰了好幾天,終于成功在BeagleBoard上運行QNX系統,如果說在BeagleBoard上運行Android費了一些手腳的話,在BeagleBoard上運行QNX可以說是費盡周折。秉承本博客的主旨,將折騰過程記錄下來,供各位同學參考,以后可以少繞一些彎子。
為了在BeagleBoard上運行QNX系統,我參考了一些書和網上的資料,同時將制作Android系統的sh文件打開仔細讀了一下,得出的主要思路如下:
1. 首先要將啟動的SD卡進行分區和格式化,讓其中一個分區成為啟動分區。
2. BeagleBoard提供了MLO和u-boot.bin文件,將他們拷貝到SD卡的啟動分區后,BeagleBoard啟動時會啟動MLO程序,然后MLO程序會調用u-boot.bin。其中u-boot.bin可以用來裝載QNX系統鏡像。
3. 需要去QNX官網上下載BeagleBoard的QNX BSP文件,導入到QNX Momentics環境中,用于生成QNX的系統鏡像文件(英文資料說的是OS Image)
4. 將生成的QNX系統鏡像文件拷貝到SD卡啟動分區中,u-boot.bin啟動后會裝載QNX系統鏡像。
有了基本思路就開始開干,第一步是對SD卡進行分區和格式化。
為了保持之前的WinCE系統和Android系統,我另外找了一個2G的卡,又是幾十塊錢出去了。。。。
網上有一些資料關于如何格式化SD卡的,有Windows操作系統的方法,也有Linux系統的方法。反正我的Ubuntu已經安裝好了,而且Linux系統上的方法說的詳細一點,就采用了Linux系統上的方法。
我做SD卡的過程主要是參考了foundry27的一篇文章,鏈接是:
http://community.qnx.com/sf/wiki/do/viewPage/projects.bsp/wiki/AM_OMAP_boot_resources
將SD卡裝如讀卡器,將讀卡器插入PC上,從VMWare菜單上設置在Ubuntu虛擬機上使用USB設備。
于是在我的Ubuntu上就可以看到自動mount出來的SD卡內容了。
關掉自動顯示的SD卡內容窗口(主要是擔心一會umount SD卡的時候會出問題)
啟動Ubuntu的terminal窗口,開始在命令行界面下格式化SD卡。
a)通過df命令查看SD卡的設備名,df的輸出里有類似/dev/sdb1 .... /media/的一行,表示SD卡的設備名是sdb,下面統一使用sdx作為SD卡的設備名,如果你的情況有所不同,請作相應調整,如將umount /dev/sdx1 調整成umount /dev/sdb1
b) 通過umount命令釋放sbd: umount /dev/sdx1
c) 通過以下命令清除sdb的內容,如果遇到權限問題,請使用sudo,或者直接設置root的密碼后su 到root上執行:
dd if=/dev/zero of=/dev/sdx bs=1M count=1
d)啟動fdisk:
fdisk /dev/sdx
c) 在fdisk界面下先通過命令p查看一下情況,如果c)步驟完成的話,顯示出來的應該只用磁盤信息,沒有分區信息。在我參考的文檔中建議通過磁盤信息計算一下分區時分多少柱面,計算方法是字節總量除以255再除以63再除以512,我自己用的是2G的卡,計算結果和他的相同,就按他的結果(239)做了。
Command (m for help): p
Disk /dev/sdx: 1973 MB, 1973420032 bytes
d)通過x命令進入高級模式:
Command (m for help): x
e)通過h命令設置head數量,通過s命令設置setor數量,通過c命令設置cylinder數量,這里的cylinder(柱面)使用的值就是上面算出來的值。其中的255,63就是上一步的除數。
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
f)通過r命令回到普通模式,使用n命令創建分區:
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
g)讓分區成為啟動分區:
Command (m for help): a Partition number (1-4): 1
h)通過t命令設置分區為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))
i)通過p命令確認分區情況:
Command (m for help): p
Disk /dev/sdx: 1973 MB, 1973420032 bytes 255 heads, 63 sectors/track, 239 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0xa2b8daf8 Device Boot Start End Blocks Id System /dev/sdx1 * 1 15 120456 c W95 FAT32 (LBA)
j)通過w命令寫入分區信息:
Command (m for help): w
The partition table has been altered! Calling ioctl() t re-read partition table.
k)通過mkfs.vfat命令格式化分區:
# mkfs.vfat -F 32 /dev/sdx1 mkfs.vfat 3.0.3 (18 May 2009)
好的,通過一連串的命令后SD卡已經格式化完成了,下一步是將MLO和u-boot.bin拷貝到SD卡中。我上次做Android系統的時候我的Ubuntu上已經有MLO文件和u-boot.bin文件了,所以決定將Android上使用過的MLO和u-boot.bin拷貝進去。 當時主要的想法是這兩個文件已經驗證是可用的,使用它們可以保證不出其他問題,后來發生的事情證明我犯了一個嚴重錯誤。這里正確的做法應該是去QNX官網上通過指定的鏈接下載MLO和u-boot.bin文件,那個版本才是對的。
我繼續記錄我錯誤的做法,雖然是錯誤的,但是還是成功啟動QNX了。
將剛格式化得分區mount進來,拷貝MLO程序和u-boot.bin程序,注意一定要第一個拷貝MLO程序,保證它在0磁道上,BeagleBoard才能啟動它:
mount /dev/sdx1 /mnt
cp MLO /mnt cp u-boot.bin /mnt
umount /dev/sdx1
拷貝了MLO文件和u-boot.bin文件后需要做QNX的系統影像文件了。
到QNX官網下載BSP文件,頁面鏈接如下:
http://community.qnx.com/sf/wiki/do/viewPage/projects.bsp/wiki/Bspdown_ti_omap_3730_beagle
注意這個頁面就有MLO和u-boot.bin的鏈接,一塊將他們下載下來,后面可以使用
下載的文件是:
2011_July_19th_QNX_650_BEAGLEBOARD_XM_BSP.zip
解壓以后在images目錄可以找到已經做好的QNX系統影像文件bsp-TI-beagleboard-xm.ifs
將這個bsp-TI-beagleboard-xm.ifs拷貝到剛才格式化的SD卡中(可以直接在windows系統里拷貝,剛才的SD卡分區時FAT32分區,當SD卡插入windows系統是可以認到)
按我的思路,應該可以啟動了,將SD卡插入BeagleBoard中,插上5V電源,啟動后SD卡旁邊的燈長亮,液晶屏沒有任何顯示。
查了一輪資料,主要是參考的是文檔《QNX 6.5.0 and 6.4.1 BSPs for BeagleBoard-xM》,里面提到啟動過程需要通過串口發送啟動命令才行。
所以我還需要將BeagleBoard和PC通過串口線連接起來,可惡的是我的手提電腦沒有串口,于是聯系ChipSee買了一個串口轉USB的連接器,大家也可以自己去買,但是ChipSee這個他們測試過,應該保險一些。
連接器到貨后里面是一個連接線和一個光盤,光盤里有啟動程序,安裝啟動程序后系統將它對應到了com7上。
QNX Momentics環境里有串口顯示窗口,選擇Windows -> show view -> terminal -> terminal可以顯示串口顯示窗口。
串口配置如下:
Baud: 115200
Bits: 8
Stop bits: 1
Parity: none
Flow control: none
將串口線插到beagleBoard上,另一頭連接USB轉串口的連接器上,連接器的U口插入PC上。
BeagleBoard通電啟動,從串口顯示窗口會出現uboot的啟動文字。
uboot啟動后在串口顯示窗口輸入如下命令啟動beagleBoard:
fatload mmc 0 0x80100000 bsp-TI-beagleboard-xm.ifs;
go 80100000
成功啟動!!!! 提醒各位同學,這里的配置過程有些問題的,有關正確的做法大家請關注我后面的博文。
最后上圖,辛苦的結果:
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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