《VxWorks7系統引導指南》筆記——U-boot概述

目錄

1.關於使用U-Boot啓動VxWorks

2.獲取與構建U-Boot

3.使用U-Boot啓動VxWorks

4.準備與啓動存放在ROM中的鏡像(就地執行)

5.使用U-Boot創建和啓動VxWorks鏡像


 

1.關於使用U-Boot啓動VxWorks

對於ARM和PowerPC系統,可以使用第三方的U-Boot啓動VxWorks。ARM和PowerPC的BSP都是用DTB文件將設備訪問信息從BSP代碼中分離出來。U-Boot作爲ARM和PowerPC的標準啓動程序,可以使用獨立的DTB文件。

2.獲取與構建U-Boot

U-Boot源碼可從DENX獲得。在使用U-Boot啓動VxWorks鏡像之前,需要首先在主機上安裝和構建U-Boot。

(1)準備工作

在獲取與構建U-Boot之前,需要在主機上安裝如下軟件:

  • git
  • 交叉開發環境(提供針對開發板的SDK)
  • 以RPM形式提供的風和U-Boot補丁

(2)執行過程

a)下載U-Boot源碼

執行如下命令:

$ git clone git://git.denx.de/u-boot.git

b)構建U-Boot二進制文件

執行如下命令構建U-Boot二進制文件:

$ make distclean CROSS_COMPILE=path_to_your_cross_build_tools
$ make your_board_config ARCH=path_to_your_cross_build_tools
$ make ARCH=your_arch CROSS_COMPILE=path_to_your_cross_build_tools

最後需要將該二進制文件加載到板子上的可啓動介質中去。

3.使用U-Boot啓動VxWorks

根據VxWorks鏡像的結構,U-Boot提供了不同的啓動選項。

在構建VxWorks內核鏡像時,在BSP目錄下必須有一個可供使用的DTB文件。VxWorks內核鏡像必須使用默認的ELF格式,並且命名爲VxWorks。

過程描述:

(1)使用objcopy工具將VxWorks內核鏡像由ELF格式轉換爲二進制格式;

  • 對於ARM架構,執行如下命令:
$ objcopyarm -O binary vxWorks vxWorks.bin
  • 對於PPC架構,執行如下命令:
$ objcopyppc -O binary vxWorks vxWorks.bin

(2)將U-Boot鏡像頭部添加到VxWorks二進制文件中;

VxWorks提供mkimage工具,用於生成VxWorks.uboot文件。

mkimage工具包括如下選項:

  • -A:設置架構
  • -O:設置OS
  • -T:設置鏡像類型
  • -C:設置壓縮類型
  • -a:設置加載地址
  • -e:設置入口地址
  • -n:設置鏡像名稱
  • -d:供使用的數據文件

對於ARM架構,需要執行如下命令:

$ mkimage -A arm -O vxworks -T kernel -C none -a 0x80100000 -e 0x80100000 -n vxworks -d vxWorks.bin vxWorks.uboot

對於PPC架構,需要執行如下命令:

$ mkimage -A ppc -O vxworks -T kernel -C none -a 0x00100000 -e 0x00100000 -n vxworks -d vxWorks.bin vxWorks.uboot

加載地址與入口地址可以不同。加載地址指定了U-Boot拷貝VxWorks內核鏡像的地址。入口地址是待執行的第一條指令的地址。在準備任務完成後,U-Boot將跳轉到入口地址。在VxWorks中,這兩個地址通常是相同的。BSP使用RAM_LOW_ADRS地址,因爲在鏡像的起始部分,VxWorks具有自己的入口地址。

(3)執行如下命令,使用wrtool將DTB文件嵌入VxWorks二進制文件中;

-> prj build -target vxWorks.bin

(4)重複第2步,將U-Boot鏡像頭部添加到VxWorks.bin

也可以使用一個壓縮的VxWorks內核鏡像。U-Boot可以啓動gzip、bzip2、Ima或Izo壓縮格式的VxWorks內核鏡像。壓縮VxWorks二進制文件時,既可以使用DTB,也可以不適用DTB。

執行如下命令壓縮鏡像,結果文件爲vxWorks.bin.gz:

$ gzip --best vxWorks.bin

接着按照如下命令將U-Boot鏡像頭部添加到vxWorks.bin.gz:

$ mkimage -A ppc -O vxworks -T kernel -C gzip -a 0x00100000 -e 0x00100000 -n vxworks -d vxWorks.bin.gz vxWorks.uboot

(5)啓動目標板,等待U-Boot提示符(U-Boot#)

(6)執行標準的setenv命令,提供啓動命令行

U-Boot# setenv-bootargs cpsw(0,0)

DTB 文件中存放着傳遞給VxWorks內核的啓動命令行。如果按照ePAPR標準要求,啓動命令行被寫入設備樹中選定的節點中。VxWorks7內核從設備樹中提取信息,並按需解析。

U-Boot爲內核提供啓動命令行。如果未選擇節點,U-Boot就在設備樹中創建一個,然後更新啓動命令行。如果環境變量bootargs已經設置,U-Boot則使用該環境變量更新選中節點的啓動命令行屬性。如果啓動命令行屬性已經存在,U-Boot則直接覆寫它。不管是否有可用的啓動命令行,U-Boot都要創建一個選中的節點。

注意:對於一個嵌入的DTB文件,U-Boot無法更新DTB文件中的啓動命令行。因此,將無法傳遞環境變量bootargs。在此情況下,VxWorks內核僅適用硬編碼到設備樹中的啓動命令行。

(7)根據系統需求啓動VxWorks

當使用獨立的DTB文件時,memory,bootargs,enable-method和cpurelease-addr等節點可被U-Boot更新。對於目標板,target.ref文件中爲這些節點提供了可用的信息與合適的值。

在某些情況下,需要設置額外的環境變量。這些變量由U-Boot傳遞給VxWorks內核鏡像或直接被U-Boot使用。這些設置可在U-Boot命令提示符下使用setenv、saveenv命令實現。典型的環境變量包括:

bootargs:

內核使用的啓動那個命令行如下:

"motetsec(2,0)host:vxWorks h=10.1.0.240 e=10.1.0.41:fffffe00 g=10.1.0.1 u=vxworks pw=vxworks f=0x0"

fdt_high: 

DTB文件將重定向到fdt_high地址以下的空間。VxWorks內核鏡像必須能訪問到重定向的DTB地址。

bootm:

將內核拷貝到由uImage定義的內核加載地址中。U-Boot將存放在一個寄存器中的DTB重定向地址傳遞給內核。

啓動方式說明:

4.準備與啓動存放在ROM中的鏡像(就地執行)

VxWorks支持ROM常駐鏡像,可以直接從存儲設備中執行(如NorFLASH)。

有兩種方法可以使用ROM常駐鏡像。

方法1:最簡單的方法是創建一個嵌入設備樹的VxWorks內核鏡像,然後使用go命令加載。

方法2:可以使用bootm命令。如果使用該方法,則需要執行額外的操作。例如,在加載地址與入口地址之間必須有64字節的間隔,這64字節都需要填充爲0xff,原因是標準的U-Boot頭部是64字節。

方法2的操作過程如下:

(1)修改sysALib.s,爲U-Boot頭部保留64字節空間。

例如:

FUNC_LABEL(_sysInit)
FUNC_BEGIN(sysInit)
#ifdef UBOOT_XIP
.fill 16,4,0xff /* reserve for XIP header */
#endif

(2)執行帶-x選項的mkimage命令,添加一個支持XIP(一種特殊的頭部)的U-Boot頭部。

例如:

$ mkimage -x -A arm -O vxworks -T kernel -C none -a 0x80100000 -e 0x80100000 -n vxworks -d vxWorks.bin vxWorks.uboot

(3)執行bootm命令,啓動ROM常駐鏡像,例如:

$ bootm 0x80100000

5.使用U-Boot創建和啓動VxWorks鏡像

使用wrtool工具,可以構建適用於U-Boot的VxWorks鏡像。

wrtool命令行工具可以用於生成供U-Boot加載和啓動的VxWorks鏡像。可以使用兩種方法構建VxWorks鏡像:

  • 使用獨立的DTB文件構建VxWorks鏡像,並使用bootm命令啓動;
  • 使用嵌入的DTB文件構建VxWorks鏡像,並使用go命令啓動;

前提條件:

爲執行後續步驟,首先需要具備如下條件:

  • 一個可用的基於板子或CPU BSP的VSB項目;
  • 一個基於上述VSB項目的VIP項目;

既可以使用U-Boot啓動全功能的VxWorks內核,也可以使用U-Boot啓動一個VxWorks bootapp鏡像。爲了創建一個VxWorks bootapp鏡像,在創建VIP項目是必須指定PROFILE_BOOTRAPP特性。

操作步驟:

(1)如果使用嵌入的DTB文件構建了VxWorks鏡像,則向內核鏡像中添加INCLUDE_STANDALONE_DTB組件:

-> prj vip component add INCLUDE_STANDALONE_DTB

(2)向VxWorks鏡像中添加獨立的符號表

執行如下命令,爲內核鏡像添加INCLUDE_STANDALONE_SYM_TBL組件:

-> prj vip component add INCLUDE_STANDALONE_SYM_TBL

(3)使用如下選項構建VxWorks鏡像和DTB

  • 如果使用獨立的DTB文件構建VxWorks內核,則執行如下命令:
-> prj build -target uVxWorks
  • 如果使用嵌入的DTB文件構建VxWorks內核,則執行如下命令,該過程將生成一個嵌入DTB文件的鏡像(VxWorks.bin)
-> prj build -target vxWorks.bin

(4)設置U-Boot網絡參數

U-Boot可以利用TFTP或NFS客戶端從網絡上加載文件。執行如下命令可以設置U-Boot網絡參數:

$ setenv ethaddr 00:04:9f:ef:01:01
$ setenv ipaddr 192.168.10.5
$ setenv netmask 255.255.255.0
$ setenv serverip 192.168.10.2
$ setenv gatewayip 192.168.10.1
$ saveenv

(5)利用U-Boot下載文件到目標板

可根據需要選擇如下選項進行下載:

  • 如果使用獨立的DTB,則執行如下命令下載文件:
$ tftp 80300000 uVxWorks
$ tftp 80e00000 your-board.dtb

此時,也可以按照如下命令提供一個VxWorks6.9.x風格的啓動命令行(這個啓動命令行將覆蓋DTB文件中默認的啓動命令行):

$ setenv bootargs motetsec(2,0)host:vxWorks h=192.168.10.2 e=192.168.10.5:ffffff00 g=192.168.10.1 u=vxworks pw=vxworks f=0x0
  • 如果使用嵌入的DTB,則執行如下命令下載文件:
$ tftp 80300000 vxWorks.bin

(6)啓動VxWorks鏡像

根據需要,可以選擇如下兩種方式:

  • 如果需要啓動使用獨立的DTB文件的VxWorks鏡像,則執行如下bootm命令:
$ bootm 0x80300000 - 0x80e00000
  • 如果需要啓動使用嵌入DTB文件的VxWorks鏡像,則執行如下go命令:
$ go 0x80300000

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章