《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于Simics的嵌入式系統(tǒng)的研究與開發(fā)
基于Simics的嵌入式系統(tǒng)的研究與開發(fā)
2015年電子技術(shù)應(yīng)用第2期
韓德強,馮云賀,王宗俠,高雪園
北京工業(yè)大學(xué) 計算機學(xué)院,北京100124
摘要: 以VxWorks 6.9嵌入式操作系統(tǒng)為例,論述了在風(fēng)河Simics全系統(tǒng)仿真環(huán)境下進行嵌入式操作系統(tǒng)的bootrom開發(fā)、操作系統(tǒng)的定制、設(shè)備驅(qū)動和應(yīng)用程序的開發(fā)方法,探究出了利用Simics全系統(tǒng)仿真環(huán)境協(xié)助開發(fā)者進行嵌入式操作系統(tǒng)底層軟件、中間層軟件和上層應(yīng)用軟件開發(fā)的新方法。
中圖分類號: TP316.5
文獻標(biāo)識碼: A
文章編號: 0258-7998(2015)02-0031-04
Research and development of embedded systems based on Simics
Han Deqiang,F(xiàn)eng Yunhe,Wang Zongxia,Gao Xueyuan
College of Computer, Beijing University of Technology,Beijing 100124,China
Abstract: This paper takes VxWorks 6.9 embedded operating system as an example to discuss the development methodology of embedded operating system′s bootrom, device drivers and applications, as well as the customization of embedded operating systems under Simics full system simulation environment. In this way, we explore and summarize the new approach of using Simics full system simulation environment to help developers to develop underlying software, middle-layer software and upper-layer software of embedded systems.
Key words : full system simulation environment;Simics;VxWorks embedded operating system

  

0 引言

  當(dāng)今嵌入式系統(tǒng)的功能日趨多元化,系統(tǒng)間通過總線、背板以及網(wǎng)絡(luò)通信的互聯(lián)日趨復(fù)雜,這導(dǎo)致嵌入式系統(tǒng)的調(diào)試、集成和測試變得相對困難。嵌入式軟件開發(fā)者經(jīng)常因為缺乏硬件開發(fā)板等物理設(shè)備,導(dǎo)致開發(fā)效率低下。譬如在獲取硬件開發(fā)板實物之前,系統(tǒng)開發(fā)者很難提前開發(fā)基于硬件開發(fā)板的軟件程序;當(dāng)硬件開發(fā)板數(shù)量有限時,并不能保證每個系統(tǒng)開發(fā)者都能拿到硬件開發(fā)板進行相關(guān)軟件的設(shè)計與開發(fā)。

  Simics作為一款快速的、功能精確的全系統(tǒng)仿真環(huán)境[1],較好地解決了上述問題。Simics為多種任務(wù)提供了一個共用框架來實現(xiàn)處理器設(shè)計、存儲器分級體系設(shè)計、元器件開發(fā)和測試、軟件質(zhì)量的自動化測試、SOC虛擬原型、軟硬件協(xié)同仿真,以及固件、驅(qū)動程序和操作系統(tǒng)的開發(fā)等功能。首先,Simics提供了一個功能強大的虛擬平臺,可以模擬處理器、存儲器、板級硬件和復(fù)雜網(wǎng)絡(luò)系統(tǒng)等任意規(guī)模的硬件目標(biāo)設(shè)備,解決了軟件開發(fā)者因缺乏硬件設(shè)備引起的問題。Simics允許開發(fā)者在硬件開發(fā)板實物到位之前,就開始進行相應(yīng)的軟件開發(fā)、系統(tǒng)集成以及系統(tǒng)測試,從而縮短產(chǎn)品的上市時間。針對于目標(biāo)設(shè)備的板級支持包(Board Support Package,BSP)、固件、實時操作系統(tǒng)、中間件和應(yīng)用程序等目標(biāo)軟件不需要進行任何更改,即可運行在Simics模擬的硬件平臺上[2]。其次,Simics提供了故障注入、虛擬系統(tǒng)時間的控制和硬件寄存器管理等功能,并且支持整個系統(tǒng)精確地、并可恒現(xiàn)地正向和回溯執(zhí)行以及創(chuàng)建系統(tǒng)檢查點快照。嵌入式軟件開發(fā)者可以借助Simics特有的開發(fā)及調(diào)試方式,降低調(diào)試難度,提高開發(fā)效率。譬如,同時啟動或暫停操作系統(tǒng)與處理器的時鐘,檢查所有系統(tǒng)部件的狀態(tài)。

  美國風(fēng)河系統(tǒng)公司推出的VxWorks嵌入式操作系統(tǒng)具備實時性好、可靠性高、可定制性強等特點。VxWorks嵌入式操作系統(tǒng)在實時嵌入式系統(tǒng)領(lǐng)域一直占據(jù)一席之地,尤其是在國防、航空、工業(yè)控制等領(lǐng)域具有統(tǒng)治地位。

  本文以VxWorks 6.9嵌入式操作系統(tǒng)為例,論述了在風(fēng)河Simics全系統(tǒng)仿真環(huán)境下進行嵌入式操作系統(tǒng)的bootrom開發(fā)、操作系統(tǒng)的定制、設(shè)備驅(qū)動和應(yīng)用程序的開發(fā)方法,探究出了利用Simics全系統(tǒng)仿真環(huán)境協(xié)助開發(fā)者進行嵌入式操作系統(tǒng)底層軟件、中間層軟件和上層應(yīng)用軟件開發(fā)的新方法。

1 Simics全系統(tǒng)仿真環(huán)境架構(gòu)

  借助于Simics全系統(tǒng)仿真環(huán)境,開發(fā)者不僅可以進行硬件建模,還可以模擬真實硬件環(huán)境中運行的所有軟件。Simics全系統(tǒng)仿真環(huán)境架構(gòu)圖如圖1所示。Simics主要由虛擬硬件和目標(biāo)軟件棧兩部分組成。虛擬硬件與真實的硬件設(shè)備相對應(yīng),開發(fā)者可以使用模型庫,利用C/C++、SystemC、Python或DML等語言進行處理器、內(nèi)存、存儲設(shè)備等虛擬設(shè)備模型的開發(fā)和配置。目標(biāo)軟件棧自底向上分為Hypervisor層、驅(qū)動層、BSP層、固件層和實時操作系統(tǒng)(Real Time Operating System,RTOS)層、應(yīng)用軟件和中間件層。其中Hypervisor、驅(qū)動、BSP、固件和RTOS作為中間層負責(zé)上層軟件與虛擬硬件的交互。此外,Eclipse、風(fēng)河Workbench、Tornado等常用的開發(fā)調(diào)試工具均可配合Simics進行協(xié)同開發(fā)[3]。Simics支持運行各種目標(biāo)軟件,只要是能在實際硬件設(shè)備上運行的目標(biāo)軟件,均可在相應(yīng)的Simics全系統(tǒng)仿真環(huán)境下運行且無絲毫差異[4]。

001.jpg

  與VMware、VirtualBox等常用的虛擬機相比,Simics能夠支持包括Power PC、Intel x86、MIPS、ARM、M68K、SPARC在內(nèi)的更多類型的處理器架構(gòu)[5]。與EDA仿真工具相比,Simics能夠更加高效準(zhǔn)確地運行目標(biāo)軟件,并提供強大的調(diào)試功能。雖然EDA仿真工具能夠非常準(zhǔn)確地仿真硬件設(shè)備,但速度往往不夠快,或者不能完整地運行的整個目標(biāo)軟件。Simics能夠較好地克服EDA仿真工具的上述缺陷。

2 開發(fā)VxWorks操作系統(tǒng)的bootrom

  Simics可以運行風(fēng)河公司官方提供的硬件目標(biāo)設(shè)備模型以及開發(fā)者自定義的硬件目標(biāo)設(shè)備模型。本文選用了風(fēng)河官方提供的Model Library Intel Core i7 with X58 and ICH10 4.6(下文簡稱x86-X58-ICH10)硬件目標(biāo)設(shè)備模型。該硬件目標(biāo)設(shè)備模型可以仿真一個具有Intel Core i7處理器、X58北橋高速芯片組以及ICH10南橋的硬件系統(tǒng)。

  在Simics x86-X58-ICH10硬件模型上啟動VxWorks下載型映像,需要開發(fā)相應(yīng)的VxWorks啟動引導(dǎo)程序bootrom。首先,使用風(fēng)河Workbench 3.3集成開發(fā)環(huán)境創(chuàng)建VxWorks Boot Loader Project類型的工程。輸入工程名字,指定工程保存的位置,設(shè)置工程基于的BSP為Intel Nehalem BSP,設(shè)置工具鏈為gnu,設(shè)置bootrom格式為二進制bin格式,設(shè)置映像壓縮類型為壓縮型。然后,配置源代碼索引,完成工程的創(chuàng)建。

  如需修改VxWorks映像啟動時的默認(rèn)IP地址,則需修改Intel Nehalem BSP目錄下的config.h頭文件。將VxWorks映像啟動時的IP地址設(shè)置為“172.21.28.64”的相應(yīng)代碼如下所示:

  #if !defined (CDF_OVERRIDE) && !defined (PRJ_BUILD)

  #define DEFAULT_BOOT_LINE \

  "gei(0,0)host:vxWorks h=172.21.28.110 e=172.21.28.64 u=

  target"

  #endif

  修改完畢后,編譯該工程即可生成bootrom.bin映像。

3 定制VxWorks嵌入式操作系統(tǒng)

  首先,創(chuàng)建VxWorks Image Project類型的工程。輸入工程名字,指定VIP工程保存的位置。由于所定制的VxWorks鏡像將要運行在Intel Core i7處理器上,因此設(shè)置工程所基于的BSP為Intel Nehalem BSP,設(shè)置工具鏈為gnu。然后,配置SMP、IPv6、Debug和編譯器優(yōu)化選項等。最后,配置源代碼索引,完成VIP工程的創(chuàng)建。

  完成創(chuàng)建VIP工程后,可在工程資源管理器選項卡中查看該工程的文件列表信息。其中Kernel Configuration是內(nèi)核配置工具,幫助開發(fā)者快速添加或移除內(nèi)核組件。vxWorks.bin、vxWorks.hex和vxWorks均是工程經(jīng)過編譯后生成的映像。

  上述步驟只是定制了具有基本功能的VxWorks映像。由于VxWorks具有很好的可裁剪性,開發(fā)者可以根據(jù)需求添加相應(yīng)的組件。以添加系統(tǒng)符號表組件INCLUDE_SYM_TBL_INIT及其依賴組件為例進行說明。首先選中Kernel Configuration,點擊右鍵,單擊Edit Kernel Configuration,或者直接雙擊Kernel Configuration打開組件配置列表。然后,按下Ctrl+F,打開內(nèi)核組件查看器,輸入INCLUDE_SYM_TBL_INIT。在組件樹下會顯示找到的組件,點擊“Find”按鈕,組件配置列表自動定位到找到的組件。最后,選中該組件,點擊右鍵,選擇“Include”即可將該組件添加到內(nèi)核中。其他組件的添加方式與上述步驟類似。組件添加完畢后,重新編譯映像。

4 開發(fā)VxBus架構(gòu)的驅(qū)動程序

  自VxWorks 6.2引入了VxBus設(shè)備驅(qū)動架構(gòu),該驅(qū)動架構(gòu)提供了針對操作系統(tǒng)和硬件設(shè)備的標(biāo)準(zhǔn)接口。VxBus架構(gòu)的最核心功能是VxBus驅(qū)動程序能夠在風(fēng)河Workbench開發(fā)環(huán)境中以組件的形式進行配置。開發(fā)者可以根據(jù)需求添加或刪除驅(qū)動組件,重新編譯VxWorks內(nèi)核映像即可完成驅(qū)動的配置。在引入VxBus驅(qū)動架構(gòu)之前,開發(fā)者若要添加或者刪除VxWorks驅(qū)動,則需要修改繁瑣的底層文件和代碼。譬如,配置VxWorks5.5驅(qū)動程序時,開發(fā)者需要修改BSP中的sysLib.c等文件。此外,非VxBus架構(gòu)的驅(qū)動程序的可移植性差,更換BSP時需要重新移植驅(qū)動程序。

  開發(fā)基于VxBus的驅(qū)動,并將其集成到風(fēng)河Workbench開發(fā)環(huán)境中,一般至少需要如下6個文件。其中組件描述文件、driverName.dc和driverName.dr被稱為驅(qū)動配置文件。

  (1)驅(qū)動源文件:實現(xiàn)驅(qū)動的邏輯;

  (2)組件描述文件:將驅(qū)動集成至Workbench開發(fā)環(huán)境中;

  (3)driverName.dc:提供了驅(qū)動注冊程序的原型;

  (4)driverName.dr:提供了一段調(diào)用驅(qū)動注冊程序的代碼;

  (5)README:自述文件;

  (6)Makefile:編譯信息。

  驅(qū)動源文件負責(zé)實現(xiàn)驅(qū)動的邏輯功能,從而實現(xiàn)對硬件設(shè)備的控制與操作。一個驅(qū)動可以包含一個或者多個驅(qū)動源文件以及可選的頭文件。

  組件描述文件提供了將驅(qū)動以組件的形式集成到風(fēng)河Workbench開發(fā)環(huán)境中所需要的信息。VxWorks配置工具通過組件描述文件能夠?qū)⒒赩xBus的驅(qū)動識別成獨立的組件,并集成到開發(fā)環(huán)境中。開發(fā)第三方驅(qū)動時,需要將組件描述文件拷貝到installDir\vxworks-6.x\target\config\comps\vxWorks路徑下,以便VxWorks配置工具能夠讀取該文件。

  driverName.dc文件聲明了驅(qū)動注冊程序的原型,其文件名要和驅(qū)動源文件保持一致。driverName.dr文件描述了調(diào)用驅(qū)動注冊程序的方法。若新增驅(qū)動至VxWorks源碼樹,則需在installDir\vxworks-6.x\target\config\comps\src\

  hwif路徑下執(zhí)行如下指令,將新增驅(qū)動的配置文件合并到vxbUsrCmdLine.c文件中:

  makevxbUsrCmdLine.c

  README文件包含驅(qū)動的版本列表、文件列表以及所支持的設(shè)備等信息。在撰寫README文件時,可以參考風(fēng)河官方提供的驅(qū)動的README文件。

  Makefile文件定義了編譯驅(qū)動的源文件的規(guī)則,并通過OBJ_COMMON宏指定了編譯出的目標(biāo)文件列表。

5 Simics上啟動VxWorks操作系統(tǒng)

  在x86-X58-ICH10硬件模型上啟動VxWorks操作系統(tǒng),首先要編寫Session腳本文件。Simics在加載bootrom之前需要BIOS的引導(dǎo)。BIOS執(zhí)行完畢后,跳轉(zhuǎn)到bootrom繼續(xù)執(zhí)行。具體的實現(xiàn)方法是:將bootrom加載到RAM中,然后將BIOS的INT 19控制句柄切換到bootrom所在的RAM處。代碼如下:

  #itl_nehalem架構(gòu)的bootrom入口點

  $ram_boot_entry = 0x8000

  #bootrom.bin文件的完整路徑

  $bootrombin="d:/bootrom.bin"

  #VxWorks內(nèi)核的完整路徑

  $kernel="d:/vxWorks"

  #創(chuàng)建具有磁盤和串口控制臺的x86-X58-ICH10虛擬機

  #設(shè)置磁盤大小為512 KiB,涵蓋了引導(dǎo)扇區(qū)(Boot Sector)

  $disk_size = 0x80000

  #啟用串口控制臺

  $uart0_text_console = TRUE

  #初始化x86-X58-ICH10硬件配置

  run-command-file"%simics%/targets/x86-x58-ich10/x86-x58-ich10-system.include"

  #初始化組件

  instantiate-components

  #設(shè)置系統(tǒng)信息,設(shè)置VxWorks可使用的CPU數(shù)目

  $system->system_info = "Viper - vxWorks 6.9 SMP"

  $system.mb.cpu0.core[0][0]->cpuid_logical_processor_count=0x1

  cpu-switch-time 0.0001

  #為BIOS設(shè)置一個假想的啟動磁盤

  #MBR直接跳轉(zhuǎn)到bootrom入口處

  $disk.hd_image.set 0x0 0xea 1

  $disk.hd_image.set 0x1 ($ram_boot_entry& 0xFF ) 1

  $disk.hd_image.set 0x2 (($ram_boot_entry& 0xFF00)>>8) 1

  $disk.hd_image.set 0x3 (($ram_boot_entry& 0xFF0000)>>16) 1

  $disk.hd_image.set 0x4 (($ram_boot_entry& 0xFF000000)>>24) 1

  #引導(dǎo)扇區(qū)(Boot Sector)設(shè)置為0x55AA,分區(qū)結(jié)束標(biāo)志

  $disk.hd_image.set 0x1fe 0x55 1

  $disk.hd_image.set 0x1ff 0xaa 1

  #開始啟動VxWorks映像

  script-branch{

  local $bpID = (break $ram_boot_entry)

  local $con  = $system.serconsole.con

  #等待BIOS跳轉(zhuǎn)至bootrom入口處

  wait-for-breakpoint $bpID

  delete $bpID

  #加載bootrom

  load-file $bootrombin $ram_boot_entry

  $con.wait-then-write "auto-boot..." "*"

  $entry = ( load-binary $kernel )

  $con.wait-then-write -s "Boot]:"("g"+(hex $entry)+"\n")

  }

  上述代碼在x86-x58-ich10-system.include文件中初始化了x86-X58-ICH10的硬件配置。首先,設(shè)置了硬盤大小為20 GB,設(shè)置時鐘時間為當(dāng)前本地時間。其次,設(shè)置CPU執(zhí)行一條指令所需的平均時鐘周期數(shù)為1,CPU類型為core-i7,CPU內(nèi)核數(shù)目為1,主頻為2 GHz。再次,設(shè)置主機名為viper,指定BIOS文件為seabios-simics-x58-ich10-1.6.3-20121004.bin,指定串口0作為文本控制臺,設(shè)置MAC地址為00:19:A0:E1:1C:9F。最后,使用create-chassis-x58-ich10命令創(chuàng)建X58-ICH10主板,并配置南橋和北橋。

  Session腳本編寫完畢后,即可啟動Simics。點擊“New Session from Script”按鈕,選中并載入編寫好的Session腳本。此時,Simics控制板上顯示將要啟動的操作系統(tǒng)的名字以及硬件模型的相關(guān)信息。VxWorks在x86-X58-ICH10硬件模型上啟動成功,如圖2所示。

002.jpg

  在VxWorks的啟動過程中,開發(fā)者可以在任意時刻暫停啟動過程,查看啟動輸出信息和相關(guān)的寄存器狀態(tài)。開發(fā)者還可以使用Simics特有的檢查點功能,將當(dāng)前目標(biāo)硬件平臺以及所有軟件的運行狀態(tài)完整地保存在檢查點文件中。該類型的文件可以在任意安裝了相關(guān)Simics硬件安裝包的環(huán)境下完全恢復(fù)現(xiàn)場。檢查點調(diào)試主要有兩大優(yōu)勢。第一,Simics可以通過重載檢查點文件,恢復(fù)檢查點位置的軟硬件狀態(tài),迅速并精確地回到用戶想要的位置;第二,檢查點文件可以在用戶之間進行共享,可以在世界任何地方重新載入,增強了開發(fā)團隊協(xié)作能力,大大提高了調(diào)試效率。上述調(diào)試方法在傳統(tǒng)的開發(fā)過程中是極難實現(xiàn)的。

  譬如,在遇到某個故障錯誤時,用戶可以暫停Simics并在命令行窗口中執(zhí)行write-configuration “my-configuration”命令,創(chuàng)建一個名字為my-configuration的檢查點,保存故障現(xiàn)場。檢查點文件主要由info、config和鏡像文件等三類文件組成。info文件提供了開發(fā)主機名、主機上安裝的Simics產(chǎn)品列表等信息。config文件提供了硬件模型的配置信息。鏡像文件保存了當(dāng)前軟硬件的運行狀態(tài)。檢查點創(chuàng)建完成后,用戶可以將my-configuration檢查點文件共享給其他用戶。其他用戶在Simics命令行窗口上執(zhí)行read-configuration "my-configuration"命令即可重載檢查點,恢復(fù)軟硬件狀態(tài),然后分析故障并進行調(diào)試。

6 開發(fā)具有圖形界面的VxWorks應(yīng)用程序

  開發(fā)具有圖形界面的VxWorks應(yīng)用程序需要用到風(fēng)河媒體庫。風(fēng)河媒體庫以源代碼的方式提供了基本的圖形、音頻和視頻開發(fā)技術(shù)以及開發(fā)框架。開發(fā)者需要自行編譯風(fēng)河媒體庫文件,調(diào)用相應(yīng)的API庫函數(shù)進行多媒體應(yīng)用程序的開發(fā)。

  風(fēng)河媒體庫主要由軟件開發(fā)工具包(Software Development Kit,SDK)和驅(qū)動開發(fā)工具包(Driver Development Kit,DDK)組成。SDK提供了豐富的API集,涵蓋圖形、輸入處理、多媒體、字體、內(nèi)存管理和設(shè)備管理等操作。開發(fā)者可以使用SDK開發(fā)獨立于硬件設(shè)備之外的、具有較高可移植性的應(yīng)用程序。DDK提供了完整的驅(qū)動程序參考集,這些參考集包括常用的硬件配置和API集,能夠幫助開發(fā)者快速開發(fā)驅(qū)動程序。

  本文開發(fā)了具有圖形界面的VxWorks啟動型內(nèi)核模式應(yīng)用程序。VxWorks啟動型內(nèi)核模式應(yīng)用程序代碼是VxWorks映像文件的一部分,VxWorks系統(tǒng)啟動后不需要單獨下載。當(dāng)映像編譯和鏈接風(fēng)河媒體庫時,應(yīng)用程序代碼也會自動鏈接到風(fēng)河媒體庫。由于只有內(nèi)核和應(yīng)用程序所需要的風(fēng)河媒體庫才會被鏈接到內(nèi)核中,VxWorks內(nèi)核的尺寸較小。該類型的應(yīng)用程序優(yōu)點是VxWorks映像所需內(nèi)存空間較小和映像尺寸較小,應(yīng)用程序在VxWorks啟動后可以自動執(zhí)行。

  所開發(fā)的圖形應(yīng)用程序能夠繪制不同顏色和不同粗細的實線和虛線、多邊形、圓形和扇形等基本圖形,如圖3所示。在調(diào)試圖形應(yīng)用程序時,可以使用Simics強大的正向和回溯執(zhí)行功能,逐步顯示圖形的繪制過程。

003.jpg

7 總結(jié)

  本文論述了在風(fēng)河Simics全系統(tǒng)仿真環(huán)境下進行VxWorks 6.9嵌入式操作系統(tǒng)的bootrom開發(fā)、VxWorks操作系統(tǒng)的定制、設(shè)備驅(qū)動和應(yīng)用程序的開發(fā)方法,探究出了利用Simics全系統(tǒng)仿真環(huán)境協(xié)助開發(fā)者進行嵌入式操作系統(tǒng)底層軟件、中間層軟件和上層應(yīng)用軟件開發(fā)的新方法。

  參考文獻

  [1] Wind River.Wind River Simics getting started 4.4[Z].2012.

  [2] Wind River.WindPO_Simics_0411_cn[Z].2011.

  [3] Wind River.Wind River Simics Eclipse user′s guide[Z].2014:5-13.

  [4] Wind River.Wind River推出功能更強大的全系統(tǒng)仿真工具Simics 4.6[Z].2011.

  [5] Wind River. Wind River Simics[Z].2012.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。