馮剛 譚琦 董宇



摘? 要: 為了降低嵌入式軟件學習和開發中硬件資源的投入成本,提出以Proteus作為嵌入式target平臺,Ubutun Linux作為host平臺,構建嵌入式Linux軟件設計虛擬實驗室的步驟。以7段數碼的顯示為例演示了嵌入式Linux虛擬環境下進行嵌入式軟件開發的過程,獲得了較直觀的實驗結果。虛擬實驗室的建設有效地降低了嵌入式系統的開發成本,彌補了傳統實驗室的不足。
關鍵詞: Proteus; 嵌入式Linux軟件設計; 虛擬實驗室; 嵌入式系統
中圖分類號:TP391.9? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2020)10-56-04
Abstract: In order to reduce the cost of hardware resources in embedded software learning and development, the steps of constructing a virtual laboratory for embedded Linux software design with Proteus as the embedded target platform and Ubuntu Linux as the host platform are proposed. A 7-segment digital display is used as an example to demonstrate the process of co-designing software and hardware in an embedded Linux virtual environment, which obtains a more intuitive experiment result. The construction of virtual lab effectively reduces the development cost of embedded systems and makes up for the shortcomings of traditional laboratories.
Key words: Proteus; embedded Linux software design; virtual laboratory; embedded system
0 引言
隨著計算機技術的日益發展,嵌入式系統幾乎滲入到人類社會生活的各個方面。全國各大高等院校的電子、計算機、信息等專業均開設了嵌入式相關課程,并建立了相應的嵌入式實驗室。這些實驗室基本上采用成套的硬件設備來構建,不同的實驗室只能進行某一類課程的實驗,而且由于嵌入式硬件的多樣性以及資金的限制,無法建立一個適應各種需求的嵌入式實驗室。一些學校已購買了一定的嵌入式設備,但因為學生人數眾多、設備的損壞/老化等原因,使得嵌入式實踐過程成為一種驗證性的實驗過程[1-3]。
虛擬實驗室其基本思想是用軟件方法虛擬各種實際的元器件、虛擬必要的電子檢測設備如示波器等,即所有的實驗只需要一臺PC機和相應的軟件就可以設計完成[5-7]。因此,虛擬實驗室的出現較好地解決了目前嵌入式實踐課程中出現的問題,為嵌入式軟硬件教學提供了一個很好的平臺,豐富了實踐教學的手段,彌補了傳統實驗室的不足[4]。
本文針對嵌入式Linux軟件設計虛擬實驗室的建設進行了研究,提出了利用Proteus構建嵌入式Linux軟件設計的虛擬仿真平臺。通過該虛擬實驗室,可以充分利用Proteus提供的各種硬件設備,搭建一個仿真現實的實驗系統,進而在這個系統上完成整個基于Linux的嵌入式軟件開發過程。
1 虛擬實驗室的特點
由于嵌入式Linux軟件設計涉及到嵌入式系統軟硬件的多個方面,從嵌入式的引導程序Bootloader到Linux內核、根文件系統及應用程序的開發都需要有全面的認識,與傳統的嵌入式實驗室相比虛擬實驗室存在下述特點:
⑴ 成本低。虛擬實驗室其根本就是采用虛擬的設備來進行相關的嵌入式實驗,整個實驗過程均在軟件上仿真運行,當實驗設備和實驗環境發生變化時,只需要對虛擬環境中的相關設備和環境進行改變即可,可以從根本上解決實驗室建設經費短缺、實驗設備不斷損壞老化等問題。以嵌入式Linux軟件設計課程為例,由于Bootloader、Linux內核及根文件的移植是一個十分復雜又容易出錯的過程,往往要多次對實驗箱開發板的flash進行底層的燒寫,由于學生在實驗中的不當操作極易導致開發板的損壞,改用虛擬實驗環境就從根本上避免了這種問題,學生只需簡單將移植后的軟件裝入到虛擬的flash中就可以檢查移植的結果。
⑵ 實驗時間靈活。采用虛擬實驗室后,不再需要進行大班的嵌入式實踐教學,可以讓學生充分地利用課外時間,分散、靈活地完成實踐教學。過去的嵌入式實驗由于設備緊缺,常常是多個學生共用一套實驗設備,有些基礎差的同學根本沒有機會理解實驗內容,也無法完整地完成實驗過程,基本上是屬于走過場。通過虛擬嵌入式Linux環境,可以做到每個人獨立完成實驗要求,獨立考核,并促使學生在平時也可以動手進行實踐,充分調動了學生自主學習的積極性。
⑶ 方便靈活。實驗環境不再固定單一,可以根據實驗要求進行各種軟硬件設計,有利于創新創造人才的培養。傳統的嵌入式實驗都是在固定的開發箱上進行, 幾乎不能進行硬件電路上的創新改進,只能在已有的硬件平臺上進行實驗,而Proteus平臺提供的ARM仿真開發環境提供了極大的改進與擴展的空間,我們可以對除CPU以外的硬件電路進行設計修改,并根據修改后的硬件電路進行bootloader、Linux內核的相應修改,最后完成應用程序的設計,充分體現了嵌入式軟硬件協同設計的本質,對提高學生的學習水平,培養新工科提倡的人才提供了很好的實踐環境。
2 虛擬實驗室的構建
2.1 軟件環境
⑴ Proteus
Proteus軟件是英國Lab Center Electronics公司出版的EDA工具軟件,它不僅具有其他EDA工具軟件的仿真功能,還能仿真嵌入式CPU及外圍器件.其最具特色的地方在于:①互動的電路仿真;②仿真處理器及其外圍電路;③直接在基于原理圖的虛擬原型上編程,再配合顯示及輸出,能看到運行后輸入輸出的效果。選用Proteus作為嵌入式Linux交叉開發環境的target端,在Proteus環境設計嵌入式系統的硬件原理圖,并將host端生成的嵌入式軟件加載運行,觀察系統仿真運行結果。
⑵ Ubuntu
選用桌面Linux版本Ubuntu作為host端,在Ubuntu上安裝交叉編譯工具,如arm-linux-gcc/arm-elf-gcc、uboot源碼、ucLinux源碼等,為嵌入式系統開發建立好交叉開發環境。
2.2 實驗內容和實驗過程
⑴ 在Ubuntu Linux系統中安裝嵌入式開發環境:arm-linux-gcc/arm-elf-gcc、uclinux源碼、uboot源碼等。
⑵ 在Proteus上進行硬件電路的設計。
⑶ 在Ubuntu Linux進行嵌入式軟件開發,編寫嵌入式驅動程序與應用程序源碼。
⑷ 在Ubuntu Linux交叉編譯產生驅動程序的內核模塊及應用程序。
⑸ 在Proteus的仿真環境中加載并運行驅動程序模塊及應用軟件,觀察系統仿真運行的結果。
2.3 實例分析
下面以Linux下進行7段數碼管的顯示控制過程為例介紹驅動程序和應用程序開發的過程。
⑴ 安裝交叉編譯環境(過程略)。
⑵ 完成硬件電路設計,設計中包括對Proteus中的ARM for VSM進行輸入輸出接口P0-P31的設計以及7段數碼管的線路連接。最top層電路如圖1所示。
⑶ 編寫驅動程序c及應用程序,其關鍵c語言代碼如下:
//驅動程序中提供給應用程序的接口函數
static struct file_operations seg7_fops = {
owner:THIS_MODULE,
open:seg7_module_open,
ioctl:seg7_module_ioctl,
release:seg7_module_release,
};
//7段數碼管的驅動程序,接收應用程序的輸入,控制7段數碼的顯示
static int seg7_module_ioctl(struct inode *inode, struct
file *file, unsigned int cmd, unsigned long arg)
{
switch (cmd) {
//根據cmd顯示0~F的一個值
case 0:printk (KERN_INFO "Display 0\n");
P0=seg7_list[0];
break;
......
case 15:printk (KERN_INFO "Display F\n");
P0=seg7_list[15];
break;
default: return -EINVAL; }
return 0; }
static int seg7_module_init(void) { //注冊設備
int register_result=register_chrdev(seg7_major,
"seg7", &seg7_fops);
if (seg7_major==0) seg7_major=register_result;
printk(KERN_INFO "seg7: init OK?。躰");
P0=0x00;
return 0; }
static void seg7_module_cleanup(void) { //注銷設備
if (unregister_chrdev(seg7_major, "seg7"))
printk (KERN_ALERT "seg7 module unregister?。躰");
else
printk (KERN_ALERT "seg7 module unregister error?。躰");}
module_init(seg7_module_init); //內核模塊初始化函數
module_exit(seg7_module_cleanup); //內核模塊卸載函數
//頭文件seg7.h
#ifndef _SEG7_H_
#define _SEG7_H_
#define P0 *((volatile unsigned char *)0x80000080)
//對應的硬件接口地址
#define P1 *((volatile unsigned char *)0x80000084)
#define P2 *((volatile unsigned char *)0x80000088)
#define P3 *((volatile unsigned char *)0x80000090)
unsigned char seg7_list[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //數碼管的共陰極編碼值
#endif /* _SEG7_H_ */
應用程序測試代碼如下:
//test-seg7.c
#include
#include "seg7.h"
int main(void)
{ int fd;
int length,i,j;
fd=open("/dev/seg7", O_RDWR)
//調用驅動程序提供open函數
while(j<10) { //循環顯示10次
for(i=0,i<16,i++) {
ioctl(fd, i); //循環顯示0~F
sleep(1); }
j++ }
close(fd);
printf("Success?。躰");
return 0; }
⑷ 編譯連接生成內核模塊seg7-module及應用程序test-seg7(過程略)。
⑸ bootloader啟動并加載uclinux內核如圖2所示。
⑹ 在Proteus加載運行,運行結果如圖3所示。
3 結論
由此可見,基于Proteus進行嵌入式Linux虛擬仿真實驗室的構建是完全可行的。采用虛擬實驗室的方式,可以很好地解決傳統嵌入式實驗室設備老化折損等問題,降低了嵌入式系統開發的成本,同時也方便學生充分利用課余時間進行嵌入式系統的軟硬件設計,不受實驗室場地以及實驗箱硬件設計的限制,能夠充分調動學生自我學習積極性。在我院實際的教學與實踐應用中,取得了很好的教學效果,學生對嵌入式Linux軟件設計課程的滿意度評分達到了98.8%。不僅如此,使用虛擬仿真的方式,還可以在項目開發中進行快速原形設計,在虛擬開發成功之后進行實際制作,這樣可以大大節省開發成本、提高開發效率,具有極好的實用價值。
參考文獻(References):
[1] 曹穎.虛擬實驗室在儀器分析教學中的應用探討[J].實驗科學與技術,2015.13(2):36-37
[2] 沈珊瑚等.以學生為中心的嵌入式系統原理與設計實踐課程教學探索[J].計算機教育,2019.7:159-162
[3] 趙繼忠等.基于Proteus的工頻參數測量儀的設計[J].自動化與儀器儀表,2019.2:84-87
[4] 江維等.基于PROTEUS和MDK的嵌入式虛擬實驗室構建[J].武漢紡織大學學報,2018.31(5):22-25
[5] Elena V.Morozova etc. The Laboratory Stand Simulation for Programming Microprocessor Devices[C].IEEE Conference of Russian Young Researchers in Electrical and Electronic Engineering,2019:125-128
[6] Sohaib Aslam etc.Development of a Software Based PIC24F Series Microcontroller Educational Trainer[C]. International Conference on Engineering and Emerging Technologies (ICEET),2019.
[7] Sandeep Sasidharan etc. Design and Simulation of Microcontroller based Power factor correction converter[C].Electronic Converter for Nuclear Research Application 2018 International CET Conference on Control, Communication, and Computing (IC4),2018:95-100