• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 消費電子 > 設計應用 > 基于nios和μClinux的嵌入式系統設計

    基于nios和μClinux的嵌入式系統設計

    ——
    作者: 時間:2007-12-14 來源: 收藏

      一般由嵌入式、外圍硬件設備、嵌入式以及用戶應用程序四部分組成,其發展主要體現在芯片技術的進步上,以及在芯片技術限制下的算法與軟件的進步上。

      隨著芯片制造技術的發展,的結構也隨之發生了重大變革,從基于到基于微控制器的嵌入式系統,繼而將可編程邏輯pld(programmable logic device)技術引入到嵌入式系統設計中,進而又發展到soc(system on chip),最終將pld與嵌入式處理器結合而成為sopc(system on programmable chip),使得sopc成為嵌入式系統設計的一個發展趨勢。

      本文采用sopc內嵌32位的軟核處理器,實現了一個uart串行口和以太網接口的轉換器(以下簡稱轉換器),并基于microtronix公司針對處理器移植的開發了應用程序.其系統結構如圖l所示。

      

    系統結構

      1 基于sopc的嵌入式硬件平臺構建

      不同于基于處理器或控制器及soc的嵌入式系統,基于sopc的嵌入式系統具有可配置的特點,不會包括任何專用外設,而是可根據需要靈活地在一片fpga中構造外設接口。

      基于sopc的嵌入式系統主要由1片核心芯片sopc和片外器件,以及一些相關的接口設備組成。本文所要實現的轉換器采用altera公司的cyclone芯片及外圍電路組成,其中外圍電路包括2片512 kb的sram、l片8mb的flash、uart電子轉換器和1片以太網控制器lan91c111。

      系統電路框圖如圖2所示。

      

    系統電路框圖

      sopc芯片內嵌軟核處理器。在sopc芯片中,除了cpu外,可配片上rom、內部定時器、uart串行口、sram、flash接口等系統部件。這些部件均以可編程邏輯部件的形式實現,芯片內部部件結構圖如圖3所示。cpu和所有部件通過avalon總線連接在一起。

    {{分頁}}

    芯片內部部件結構圖

      sopc芯片內系統模塊和avalon總線模塊均由sopcbuilder工具自動生成,利用qualtus ii集成開發環境可實現芯片內的邏輯設計及其引腳定義。經編譯生成后綴為.sof的硬件映像文件,通過byteblasterii線纜下載到目標板的cyclone芯片中,或將.sof文件轉換成.flash文件,下載到目標板的flash中。這樣就完成了轉換器的硬件設計。

      2 基于μclinux的sopc應用程序開發

      應用程序的開發可在硬件平臺上直接進行,但需了解所有硬件部件的細節,并編寫相應的驅動子程序,其軟件設計難度及工作量大,且可移植性差。基于嵌入式的應用程序,其所有的硬件細節均對用戶屏蔽。對硬件進行直接控制的底層驅動程序均封裝在內,通過設備驅動程序接口來完成,用戶只需在高層通過操作系統所提供的系統調用進行編程。μclinux是針對控制領域的嵌入式linux操作系統,適合如nios處理器等不具備內存管理單元(mmu)的/微控制器。基于操作系統進行開發,需將操作系統加載到硬件平臺中,μclinux可以以部件的形式集成到sopc系統中。

      2.1 加載μclinux系統的步驟

      將μclinux加載到sopc目標板上時需提供一個交叉編譯環境,硬件要求具有一個串口的pc工作站、基于nios處理器的sopc目標板和byteblastermv線纜等。軟件需求windowsntv4.0、windows2000或windowsxp、altera nios開發包ndk 3.0中所提供的nios gnupro工具、ahera nios開發包所提供的cygwin安裝,以及quartus ii可編程邏輯開發工具v2.2等。

      2.1.1 創建和裝載內核映像

      創建和裝載μclinux映像文件在linux developerbash環境下進行,首先需按下列步驟配置和構建內核。

      [linux developer]…μclinux/:cd linux

      [linux developer]…linux/:make xconfig

      [linux developer]…linux/:make clean

      [linux developer]…1inux/:make dep

      [linux developer]…linux/:make

      [linux developer]…μclinux/:make linux.flash

    {{分頁}}

      生成的linux.flash文件即為μclinux內核映像。當sopc目標板加電,片內rom中的germs監控程序運行后,在[linux developer]…μclinux/:下鍵入nios-runlinux.flash,即下載linux.flash文件到目標板上,完成內核映像的加載。

      2.1.2創建和裝載根文件系統

      除了裝載內核外,還需裝載根文件系統。采用romfs文件系統,這種文件系統相對于一般的ext2文件系統要求更少空間。

      在主機上linux的target目錄表示在μclinux下的根(root)目錄。當前的腳本和工具可將target目錄轉換成映像文件(romdisk.flash),按如下步驟創建:

      [linux developer]…μclinux/:make clean_target

      [linux developer]…μclinux/:make romfs

      然后鍵入以下命令:

      [linux developer]…μclinux/:nios

      -run romdisk.flash

      即將romdisk.flash文件下載到目標板上,完成μclinux的根文件系統的加載。

      2.1.3 加載應用程序

      用戶應用程序可通過target目錄加載到根文件系統中,可根據需要重建romdisk映像。應用程序在userland目錄下,編譯生成運行文件后拷貝到target目錄樹中,并根據target目錄的內容創建romdisk.flash文件。新建一個應用程序,首先打開一個linuxdeveloperbash窗,在userland目錄中創建一個目錄app,應用程序源文件存放在此目錄中,然后在userland/app/中建立一個makefile文件。

      makefile內容如下所示,其中appfile為應用程序名。

      stackslze="8192"

      include../../rules.mak

      all:appfile.relocbflt

      sources="appfile".c

      install:

      $(romfsinst)appfile.reloebfh

      $(romfsdir)/bin/appfile$(execsuffix)

      clean:

      rm-f *.[iods]core appfile appfile.*elf appfile.*bflt

    {{分頁}}

      運行make對應用程序進行編譯并修改userland/.eonfig和/userland/makefile文件。在userland/.config文件中,增加一行config_my_app=y,在userland/makefile文件中,增加dir_$(config_my_app)+=app,進入userland子目錄,運行make,即可將應用程序安裝到userland/bin中,并根據userland/.config文件中相應變量的指示將應用程序二進制拷貝到target目錄中。

      最后,鍵入以下命令重新構建romdisk映像文件(romdisk.flash),并下載到目標板上。

      [linux developer]…uclinux/:make clean_target

      [linux developer]…uclinux/:make romfs

      [linux developer]…uclinux/:nios-run romdisk.flash

      2.1.4 運行μclinux

      完成μclinux內核及文件系統的裝載后,即可運行μclinux。鍵入g800000(800000為啟動代碼地址,在sopc builder中設置),μclinux自動完成初始化過程,用戶輸入登錄用戶名nios,密碼μclinux,出現μclinux的提示符#,表示已進入μclinux運行環境。

      2.2 轉換器應用程序的實現

      轉換器應用系統主要完成網絡接口和串行接口間的數據傳輸,所傳輸的數據流如圖4所示。μclinux操作系統中提供了網絡驅動程序和串口驅動程序,并提供了多線程的支持。

      

    所傳輸的數據流
    {{分頁}}

      轉換器應用系統中的串口收發數據和網絡口收發數據是異步進行的,可分別作為一個任務來對待,任務間是并發的,因此可采用多線程程序設計技術來實現多任務間的并發執行,系統主程序流程圖如圖5所示。

      

    系統主程序流程圖

      在此應用系統中有4個任務,分別創建4個線程:網絡接收線程、網絡發送線程、串口接收線程和串口發送線程。這4個線程可并發執行.因網絡速度與串口速度存在著差異,需設置相應的緩沖區來對收發數據進行緩沖。在此應用系統中設置兩個環形緩沖區,如圖4所示,其中nctrv_uartsd_buf用于接收網絡數據,供存儲從網絡口接收的數據,然后串口從此緩沖區中取出數據發送。另一緩沖區uartrv_netsd_bur用于接收串口數據,然后網絡口取出此緩沖區中數據發送出去。

      線程間需實現相互通信和同步,共用緩沖區既要互斥執行又要同步執行,其操作遵循生產者和消費者模型。線程間的互斥操作采用互斥鎖(mu-tex)來實現。線程間的同步通過設置兩個指針來實現,一個是讀指針,另一個是寫指針,寫指針指向隊頭,初始化為0,讀指針指向隊尾,初始化為bufsize-1。當寫數據時,比較讀寫指針是否相等,相同則寫線程阻塞;不相等,則寫入數據,然后將寫指針加1。當讀數據時,讀指針加1,然后比較讀寫指針是否相等,相等則讀線程阻塞;不相等,則讀出數據。

    {{分頁}}

      網絡發送線程(流程圖如圖6所示)和串口接收線程(流程圖如圖7所示)間共用環形緩沖區uartrv_netsd_buf。串口發送線程和網絡接收線程共用環形緩沖區netrv_uartsd_buf。兩線程間的關系和處理類似網絡發送線程和串口接收線程。

      

    網絡發送線程
    {{分頁}}

      

    串口接收線程
    {{分頁}}

      3 系統測試

      完成轉換器的軟硬件設計后,按如圖8所示,連接系統進行轉換器數據的傳輸測試。在pc機a上運行串口收發程序,而在pc機b上運行以太網收發程序,經測試后數據傳輸無誤。

      

    系統測試連接圖


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 延庆县| 鱼台县| 南部县| 五家渠市| 从化市| 务川| 丰县| 宜宾市| 固镇县| 高尔夫| 云龙县| 奉贤区| 武隆县| 淮安市| 富顺县| 承德市| 沂源县| 彭泽县| 贡嘎县| 太保市| 界首市| 淳安县| 杭锦旗| 灵寿县| 禄丰县| 辉南县| 青冈县| 红安县| 合川市| 宾阳县| 内黄县| 和平区| 贵溪市| 北辰区| 深泽县| 新巴尔虎右旗| 邢台县| 霸州市| 罗源县| 茂名市| 仪陇县|