馮剛 譚琦 董宇
摘? 要: 為了降低嵌入式軟件學習和開發(fā)中硬件資源的投入成本,提出以Proteus作為嵌入式target平臺,Ubutun Linux作為host平臺,構(gòu)建嵌入式Linux軟件設計虛擬實驗室的步驟。以7段數(shù)碼的顯示為例演示了嵌入式Linux虛擬環(huán)境下進行嵌入式軟件開發(fā)的過程,獲得了較直觀的實驗結(jié)果。虛擬實驗室的建設有效地降低了嵌入式系統(tǒng)的開發(fā)成本,彌補了傳統(tǒng)實驗室的不足。
關(guān)鍵詞: Proteus; 嵌入式Linux軟件設計; 虛擬實驗室; 嵌入式系統(tǒng)
中圖分類號: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 引言
隨著計算機技術(shù)的日益發(fā)展,嵌入式系統(tǒng)幾乎滲入到人類社會生活的各個方面。全國各大高等院校的電子、計算機、信息等專業(yè)均開設了嵌入式相關(guān)課程,并建立了相應的嵌入式實驗室。這些實驗室基本上采用成套的硬件設備來構(gòu)建,不同的實驗室只能進行某一類課程的實驗,而且由于嵌入式硬件的多樣性以及資金的限制,無法建立一個適應各種需求的嵌入式實驗室。一些學校已購買了一定的嵌入式設備,但因為學生人數(shù)眾多、設備的損壞/老化等原因,使得嵌入式實踐過程成為一種驗證性的實驗過程[1-3]。
虛擬實驗室其基本思想是用軟件方法虛擬各種實際的元器件、虛擬必要的電子檢測設備如示波器等,即所有的實驗只需要一臺PC機和相應的軟件就可以設計完成[5-7]。因此,虛擬實驗室的出現(xiàn)較好地解決了目前嵌入式實踐課程中出現(xiàn)的問題,為嵌入式軟硬件教學提供了一個很好的平臺,豐富了實踐教學的手段,彌補了傳統(tǒng)實驗室的不足[4]。
本文針對嵌入式Linux軟件設計虛擬實驗室的建設進行了研究,提出了利用Proteus構(gòu)建嵌入式Linux軟件設計的虛擬仿真平臺。通過該虛擬實驗室,可以充分利用Proteus提供的各種硬件設備,搭建一個仿真現(xiàn)實的實驗系統(tǒng),進而在這個系統(tǒng)上完成整個基于Linux的嵌入式軟件開發(fā)過程。
1 虛擬實驗室的特點
由于嵌入式Linux軟件設計涉及到嵌入式系統(tǒng)軟硬件的多個方面,從嵌入式的引導程序Bootloader到Linux內(nèi)核、根文件系統(tǒng)及應用程序的開發(fā)都需要有全面的認識,與傳統(tǒng)的嵌入式實驗室相比虛擬實驗室存在下述特點:
⑴ 成本低。虛擬實驗室其根本就是采用虛擬的設備來進行相關(guān)的嵌入式實驗,整個實驗過程均在軟件上仿真運行,當實驗設備和實驗環(huán)境發(fā)生變化時,只需要對虛擬環(huán)境中的相關(guān)設備和環(huán)境進行改變即可,可以從根本上解決實驗室建設經(jīng)費短缺、實驗設備不斷損壞老化等問題。以嵌入式Linux軟件設計課程為例,由于Bootloader、Linux內(nèi)核及根文件的移植是一個十分復雜又容易出錯的過程,往往要多次對實驗箱開發(fā)板的flash進行底層的燒寫,由于學生在實驗中的不當操作極易導致開發(fā)板的損壞,改用虛擬實驗環(huán)境就從根本上避免了這種問題,學生只需簡單將移植后的軟件裝入到虛擬的flash中就可以檢查移植的結(jié)果。
⑵ 實驗時間靈活。采用虛擬實驗室后,不再需要進行大班的嵌入式實踐教學,可以讓學生充分地利用課外時間,分散、靈活地完成實踐教學。過去的嵌入式實驗由于設備緊缺,常常是多個學生共用一套實驗設備,有些基礎差的同學根本沒有機會理解實驗內(nèi)容,也無法完整地完成實驗過程,基本上是屬于走過場。通過虛擬嵌入式Linux環(huán)境,可以做到每個人獨立完成實驗要求,獨立考核,并促使學生在平時也可以動手進行實踐,充分調(diào)動了學生自主學習的積極性。
⑶ 方便靈活。實驗環(huán)境不再固定單一,可以根據(jù)實驗要求進行各種軟硬件設計,有利于創(chuàng)新創(chuàng)造人才的培養(yǎng)。傳統(tǒng)的嵌入式實驗都是在固定的開發(fā)箱上進行, 幾乎不能進行硬件電路上的創(chuàng)新改進,只能在已有的硬件平臺上進行實驗,而Proteus平臺提供的ARM仿真開發(fā)環(huán)境提供了極大的改進與擴展的空間,我們可以對除CPU以外的硬件電路進行設計修改,并根據(jù)修改后的硬件電路進行bootloader、Linux內(nèi)核的相應修改,最后完成應用程序的設計,充分體現(xiàn)了嵌入式軟硬件協(xié)同設計的本質(zhì),對提高學生的學習水平,培養(yǎng)新工科提倡的人才提供了很好的實踐環(huán)境。
2 虛擬實驗室的構(gòu)建
2.1 軟件環(huán)境
⑴ Proteus
Proteus軟件是英國Lab Center Electronics公司出版的EDA工具軟件,它不僅具有其他EDA工具軟件的仿真功能,還能仿真嵌入式CPU及外圍器件.其最具特色的地方在于:①互動的電路仿真;②仿真處理器及其外圍電路;③直接在基于原理圖的虛擬原型上編程,再配合顯示及輸出,能看到運行后輸入輸出的效果。選用Proteus作為嵌入式Linux交叉開發(fā)環(huán)境的target端,在Proteus環(huán)境設計嵌入式系統(tǒng)的硬件原理圖,并將host端生成的嵌入式軟件加載運行,觀察系統(tǒng)仿真運行結(jié)果。
⑵ Ubuntu
選用桌面Linux版本Ubuntu作為host端,在Ubuntu上安裝交叉編譯工具,如arm-linux-gcc/arm-elf-gcc、uboot源碼、ucLinux源碼等,為嵌入式系統(tǒng)開發(fā)建立好交叉開發(fā)環(huán)境。
2.2 實驗內(nèi)容和實驗過程
⑴ 在Ubuntu Linux系統(tǒng)中安裝嵌入式開發(fā)環(huán)境:arm-linux-gcc/arm-elf-gcc、uclinux源碼、uboot源碼等。
⑵ 在Proteus上進行硬件電路的設計。
⑶ 在Ubuntu Linux進行嵌入式軟件開發(fā),編寫嵌入式驅(qū)動程序與應用程序源碼。
⑷ 在Ubuntu Linux交叉編譯產(chǎn)生驅(qū)動程序的內(nèi)核模塊及應用程序。
⑸ 在Proteus的仿真環(huán)境中加載并運行驅(qū)動程序模塊及應用軟件,觀察系統(tǒng)仿真運行的結(jié)果。
2.3 實例分析
下面以Linux下進行7段數(shù)碼管的顯示控制過程為例介紹驅(qū)動程序和應用程序開發(fā)的過程。
⑴ 安裝交叉編譯環(huán)境(過程略)。
⑵ 完成硬件電路設計,設計中包括對Proteus中的ARM for VSM進行輸入輸出接口P0-P31的設計以及7段數(shù)碼管的線路連接。最top層電路如圖1所示。
⑶ 編寫驅(qū)動程序c及應用程序,其關(guān)鍵c語言代碼如下:
//驅(qū)動程序中提供給應用程序的接口函數(shù)
static struct file_operations seg7_fops = {
owner:THIS_MODULE,
open:seg7_module_open,
ioctl:seg7_module_ioctl,
release:seg7_module_release,
};
//7段數(shù)碼管的驅(qū)動程序,接收應用程序的輸入,控制7段數(shù)碼的顯示
static int seg7_module_ioctl(struct inode *inode, struct
file *file, unsigned int cmd, unsigned long arg)
{
switch (cmd) {
//根據(jù)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!\n");
else
printk (KERN_ALERT "seg7 module unregister error?。躰");}
module_init(seg7_module_init); //內(nèi)核模塊初始化函數(shù)
module_exit(seg7_module_cleanup); //內(nèi)核模塊卸載函數(shù)
//頭文件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}; //數(shù)碼管的共陰極編碼值
#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)
//調(diào)用驅(qū)動程序提供open函數(shù)
while(j<10) { //循環(huán)顯示10次
for(i=0,i<16,i++) {
ioctl(fd, i); //循環(huán)顯示0~F
sleep(1); }
j++ }
close(fd);
printf("Success!\n");
return 0; }
⑷ 編譯連接生成內(nèi)核模塊seg7-module及應用程序test-seg7(過程略)。
⑸ bootloader啟動并加載uclinux內(nèi)核如圖2所示。
⑹ 在Proteus加載運行,運行結(jié)果如圖3所示。
3 結(jié)論
由此可見,基于Proteus進行嵌入式Linux虛擬仿真實驗室的構(gòu)建是完全可行的。采用虛擬實驗室的方式,可以很好地解決傳統(tǒng)嵌入式實驗室設備老化折損等問題,降低了嵌入式系統(tǒng)開發(fā)的成本,同時也方便學生充分利用課余時間進行嵌入式系統(tǒng)的軟硬件設計,不受實驗室場地以及實驗箱硬件設計的限制,能夠充分調(diào)動學生自我學習積極性。在我院實際的教學與實踐應用中,取得了很好的教學效果,學生對嵌入式Linux軟件設計課程的滿意度評分達到了98.8%。不僅如此,使用虛擬仿真的方式,還可以在項目開發(fā)中進行快速原形設計,在虛擬開發(fā)成功之后進行實際制作,這樣可以大大節(jié)省開發(fā)成本、提高開發(fā)效率,具有極好的實用價值。
參考文獻(References):
[1] 曹穎.虛擬實驗室在儀器分析教學中的應用探討[J].實驗科學與技術(shù),2015.13(2):36-37
[2] 沈珊瑚等.以學生為中心的嵌入式系統(tǒng)原理與設計實踐課程教學探索[J].計算機教育,2019.7:159-162
[3] 趙繼忠等.基于Proteus的工頻參數(shù)測量儀的設計[J].自動化與儀器儀表,2019.2:84-87
[4] 江維等.基于PROTEUS和MDK的嵌入式虛擬實驗室構(gòu)建[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