色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何在Nios II系統(tǒng)運(yùn)行uClinux操作系統(tǒng)

          如何在Nios II系統(tǒng)運(yùn)行uClinux操作系統(tǒng)

          作者: 時(shí)間:2025-01-22 來源:EEPW編譯 收藏

          通過本實(shí)驗(yàn)了解如何建立復(fù)雜的NIOS II,如何在系統(tǒng)運(yùn)行,以及在環(huán)境上開發(fā)簡單用戶應(yīng)用程序。

          本文引用地址:http://cafeforensic.com/article/202501/466539.htm

          本實(shí)驗(yàn)要求利用SOPC建立一復(fù)雜的NIOS II,通過NIOS II IDE配置,實(shí)現(xiàn)在uClinux在NIOS II上的運(yùn)行。

          2.1 NiosⅡ硬件設(shè)置

          1. 工程建立:首先在Quartus II新建一個(gè)名為uclinux的工程,工程建立之后在工具欄中點(diǎn)擊圖標(biāo),出現(xiàn)SOPC Builder對話框。在System Name對話框里設(shè)置Nios系統(tǒng)名nios_cpu,HDL語言選擇,如下圖(圖22-1)所示。圖22-1  SOPC Builder對話框

          圖22-1 SOPC Builder對話框

          1. 系統(tǒng)設(shè)置:點(diǎn)擊【File】→【New Board Description】,出現(xiàn)如下對話框,對目標(biāo)板進(jìn)行編輯。在Netlist選項(xiàng)中將Device Family定義為Cyclone II,如下圖(圖22-2)所示。圖22-2 目標(biāo)板編輯

            圖22-2 目標(biāo)板編輯框

          在Flash Memory對話框中對點(diǎn)擊【New Flash Memory】,將Device命名為u10(這個(gè)名字是任意自取的,但一定要有),如下圖所示。圖22-3 Flash Memory設(shè)置

          圖22-3 Flash Memory設(shè)置

          在Files選項(xiàng)里定義Board Description Name為de4(該名字可以任意自取),然后點(diǎn)擊Finish,如圖22-4所示。圖22-4 目標(biāo)板名字設(shè)置

          圖22-4 目標(biāo)板名字設(shè)置

          1. 時(shí)鐘設(shè)置:在對目標(biāo)板設(shè)置完畢后,在Target設(shè)置欄的下拉菜單中會出現(xiàn)de4選項(xiàng),選擇de4。在clock設(shè)置欄中,添加兩個(gè)External時(shí)鐘clk和clk_50,分別是100MHz和50MHz。圖22-5 時(shí)鐘設(shè)置

            圖22-5 時(shí)鐘設(shè)置

          2. SOPC組建添加:

          系統(tǒng)中缺省沒有網(wǎng)卡和SRAM組件,所以要將光盤中的DM9000A(網(wǎng)卡)和SRAM16Bit512K(SRAM)兩個(gè)文件夾添加到uClinux工程文件夾中,這樣就會出現(xiàn)網(wǎng)卡和SRAM組件。

          將Avalon Components中的選項(xiàng)中組建添加到自己的工程中,具體方法是將相關(guān)的組建拖進(jìn)右邊的對話框中,如圖22 6所示。主要有 Processor,Bridges中的Avalon Tristate Bridge,Communication中的Jtag UART和UART,Memory中的onchip_memory, SDRAM controller, Flash Memory,Other里面的Interval timer,PIO。

          圖22-6 NiosⅡ系統(tǒng)配置

          圖22-6 NiosⅡ系統(tǒng)配置

          1. SOPC組建設(shè)置:將組建添加完后需要對組建進(jìn)行設(shè)置,首先是Flash,雙擊Module Name中的cfiflash0,出現(xiàn)設(shè)置對話框,將Address Width設(shè)置為25bits,Data Width設(shè)置為8bits,如圖22 7所示。圖22-7 Flash設(shè)置

            圖22-7 Flash設(shè)置

          同樣的方法打開SDRAM設(shè)置框,按照圖22-8進(jìn)行設(shè)置。圖22-8 SDRAM設(shè)置

          圖22-8 SDRAM設(shè)置

          對PIO進(jìn)行設(shè)置,首先將它的Module Name改為led_pio。然后將位長改為8。

          1. 時(shí)鐘與中斷的設(shè)置

          對與上述組建的設(shè)置,除了SDRAM設(shè)置為clk_50外,其他的都設(shè)置為clk。按圖22 9所示的設(shè)置中斷優(yōu)先級。圖22-9 時(shí)鐘與中斷設(shè)置

          圖22-9 時(shí)鐘與中斷設(shè)置

          設(shè)置cfi_flash的Base地址為0;設(shè)置sdram的base地址為0x2000000,將這兩個(gè)地址固定,然后將它們的基地址固定,在基地址一欄中點(diǎn)右鍵,選擇Lock Base Address,如下圖(圖22-10)所示:圖22-10  鎖定基地址

          圖22-10 鎖定基地址

          然后點(diǎn)擊System下拉菜單的Auto-Assign Base Addresses,對其他外設(shè)自動分配地址。

          在SOPC Builder中選擇Next 到More “cpu_0” Settings標(biāo)簽欄,設(shè)置系統(tǒng)復(fù)位和啟動時(shí)運(yùn)行的地址,如圖22-11所示:

          圖22-11  設(shè)置啟動地址

          圖22-11 設(shè)置啟動地址

          至此一個(gè)SOPC系統(tǒng)就設(shè)置完畢了。

          點(diǎn)擊【Next】到System Generation,HDL選項(xiàng)上打鉤,這里我們不進(jìn)行仿真所以對取消Simulation,如圖22-12所示。點(diǎn)擊【Generate】,如果沒有報(bào)錯(cuò)說明系統(tǒng)生成正確。圖22-12 系統(tǒng)生成

          圖22-12 系統(tǒng)生成

          1. 時(shí)鐘設(shè)置:新建一個(gè)名為uclinux的原理圖文件,然后添加一個(gè)名為SDRAM_CLK的ALTPLL(鎖相環(huán)),如圖22-13所示。圖22-13 添加內(nèi)部鎖相環(huán)

            圖22-13 添加內(nèi)部鎖相環(huán)

          點(diǎn)擊【Next】,進(jìn)入設(shè)置界面(圖22-14),首先將Device family設(shè)置為CycloneⅡ,Device speed設(shè)置為8,輸入時(shí)鐘頻率設(shè)為50MHz。圖22-14 時(shí)鐘設(shè)置

          圖22-14 時(shí)鐘設(shè)置

          點(diǎn)擊【Next】,對第一個(gè)輸出時(shí)鐘進(jìn)行設(shè)置,第一個(gè)時(shí)鐘是SDRAM的時(shí)鐘,只需要將Clock phase shift設(shè)為-63,如圖22-15所示。點(diǎn)擊【Next】,將第二個(gè)時(shí)鐘設(shè)置為50MHz,無相位偏移。同樣的將第三個(gè)時(shí)鐘設(shè)置為100MHz無相位偏移。然后點(diǎn)擊【Finish】生成鎖相環(huán)。

          圖22-15 輸出時(shí)鐘設(shè)置

          圖22-15 輸出時(shí)鐘設(shè)置

          1. 原理圖文件設(shè)計(jì):將上述生成的鎖相環(huán)符號和nios_cpu符號添加到原理圖中,如圖22-16和圖22-17所示。

          圖22-16 時(shí)鐘連接

          圖22-16 時(shí)鐘連接

          圖22-17 原理圖設(shè)計(jì)

          圖22-17 原理圖設(shè)計(jì)

          在對所有管腳連接完,并分配好管腳位置后,對工程進(jìn)行編譯,至此SOPC系統(tǒng)的硬件部分設(shè)計(jì)完畢。

          2.2 軟件環(huán)境配置

          1. 軟件安裝

          在NiosⅡ上運(yùn)行uClinux需要安裝Microtronix uClinux。如果開發(fā)環(huán)境Quatars6.0+NiosⅡ6.0,應(yīng)該安裝版本1.4。如果是Quatars7.0+NiosⅡ7.0,則需要更高版本1.4.1,產(chǎn)品光盤中帶的是1.4.1版本。在安裝時(shí)要注意指明NiosⅡ的安裝路徑,如圖22-18所示:圖22-18 nios中Linux安裝

          圖22-18 nios中Linux安裝

          1. uclinux內(nèi)核編輯

          在安裝完畢后,啟動NiosⅡ IDE,選擇菜單File→Switch workspace,在里面指定前面所建立的NIOS核所在的路徑,這里假定為:c:uClinux下,如圖22-19所示。圖22-19 將工作目錄切換至NIOS核所在的目錄

          圖22-19 將工作目錄切換至NIOS核所在的目錄

          新建一個(gè)Linux Kernel Project(File→new→project…),如圖22-20所示。

          圖22-20 新建工程

          圖22-20 新建工程

          點(diǎn)擊【Next】在Project name中填入kernel,如圖22-21所示。圖22-21 工程名設(shè)置

          圖22-21 工程名設(shè)置

          點(diǎn)擊【Next】指定該工程對應(yīng)的SOPC系統(tǒng),點(diǎn)擊【Browse】在SOPC System的路徑找到.ptf文件(假定前面的NIOS系統(tǒng)存在了c:uClinux下),在Kernel Options欄中,upload Memory選擇cfi_flash,Execute Memory 選擇sdram,如下圖所示。

          圖22-22 SOPC System選擇

          圖22-22 SOPC System選擇

          點(diǎn)擊【Finish】,這時(shí)IDE的Navigator欄(一定要切到navigator欄)中,會出現(xiàn)剛才新建的kernel,點(diǎn)擊右鍵所建立的工程,選擇configure kernel(圖22-23)。圖22-23 configure kernel

          圖22-23 configure kernel

          這時(shí)會彈出Kernel的配置窗口(圖22-24)。

          圖22-24 配置窗口

          圖22-24 配置窗口

          這里我們需要對內(nèi)核進(jìn)行配置。進(jìn)入Device Driver→ATA/ATAPI/MFM/RLL support,點(diǎn)擊空格鍵或N,這時(shí)可以發(fā)現(xiàn)在<>內(nèi)沒有任何符號,如圖22-25所示,這樣在對內(nèi)核進(jìn)行編譯的時(shí)候不會對這個(gè)驅(qū)動程序進(jìn)行編譯。圖22-25 ATA/ATAPI/MFM/RLL驅(qū)動設(shè)置

          圖22-25 ATA/ATAPI/MFM/RLL驅(qū)動設(shè)置

          進(jìn)入Device Driver→Character Devices→Serial driver設(shè)置串口,選擇如圖22-26所示。圖22-26 串口設(shè)置

          圖22-26 串口設(shè)置

          這樣uclinux既可以支持串口控制臺也可以支持Jtag控制臺。

          進(jìn)入Processor type and features→CPU(NIOS2)→選擇NIOS2.

          進(jìn)入processor type and features→Platform→選擇Microtronix cyclone board support.

          進(jìn)入Networking Support→Network Device Support,進(jìn)入Ethernet<10 or 100MHz>Davicom DM9000。其他各項(xiàng)都采樣默認(rèn)設(shè)置project。

          注意:如果工程中用到網(wǎng)卡需要將網(wǎng)卡的驅(qū)動程序相關(guān)宏定義進(jìn)行修改,程序路徑為:

          NiosⅡ路徑(假設(shè)Quartus和NIos安裝在c盤下) c:Altera70nios2edsbin eclipsepluginscom.microtronix.nios2linux.kernel1.4.1 linux-2.6.xdriversnetdm9000x.c。然后打開工作目錄uClinux/kernel/buid/include中的niossystem.h文件,可以看到nadm9000a0,nadm9000a0_irq這兩個(gè)宏。在dm9000x.c中搜索以下兩行:

           #define DM9000_MIN_IO       (na_dm9000)static u8 irqline     = na_dm9000_irq;

          將第一行修改為:#define DM9000MINIO (nadm9000a0)

          將第二行修改為:static u8 irqline = nadm9000a0_irq;

          在這里修改的原因是:要使得dm9000x.c中的變量要和nios_system.h中定義的變量相同,否則編譯不能通過。

          在設(shè)置完后選擇保存,然后build內(nèi)核(圖22-27)。圖22-27 編譯內(nèi)核

          圖22-27 編譯內(nèi)核

          1. uclinux文件系統(tǒng)建立 在File→new→project…對話框中選擇linux filesystem project, 和建立uClinux 內(nèi)核工程一樣,在SOPC Builder System欄,選擇剛才我們在建立uClinux_kernel工程時(shí)選擇的SOPC件系統(tǒng)(圖22-28)。

          圖22-28 建立文件系統(tǒng)設(shè)置

          圖22-28 建立文件系統(tǒng)設(shè)置

          工程完成后在Navigator欄中欄下把targetetc目錄下inittab文件打開,將ttys1下前面的“#”去掉,將串口打開,如圖22-29。然后編譯(圖22-30)。

          圖22-29 建立文件系統(tǒng)

          圖22-29 建立文件系統(tǒng)

          圖22-30 編譯內(nèi)核

          圖22-30 編譯內(nèi)核

          將工程下載到flash中,點(diǎn)擊菜單Tools→lash programmer,出現(xiàn)(圖22-31):

          圖22-31 Flash programmer

          圖22-31 Flash programmer

          點(diǎn)擊左上角第一個(gè)New lauch configuration ,出現(xiàn)(圖 22-33):

          圖22-32 新建下載配置

          圖22-32 新建下載配置

          把program software project into flash memory中的勾去掉。 在Target Hardware中選擇SOPC系統(tǒng)的路徑(圖22-33)。圖22-33 設(shè)置SOPC的路徑

          圖22-33 設(shè)置SOPC的路徑

          Flash Program 有三種下載方式,在這里選擇Program a file into flash memory,首先下載linux內(nèi)核,路徑為:內(nèi)核工程路徑c:uclinuxkernelbuildvmlinux.bin,offset為0x0,然后點(diǎn)擊Program flash進(jìn)行下載。

          注意:在這里的選項(xiàng)可能是灰的,要求一定要把JTAG下載線連接到USB口上。圖22-34 kernel下載參數(shù)

          圖22-34 kernel下載參數(shù)

          然后下載文件系統(tǒng),路徑為:文件系統(tǒng)工程路徑c:uclinuxfsromfs.bin,offset為 0x200000。圖22-35 kernel下載參數(shù)

          圖22-35 kernel下載參數(shù)

          1. 啟動uCinux 進(jìn)入NiosⅡ command shell(程序→Altera→NIOS II EDS→NiosⅡ command shell),輸入nios2-terminal命令(這時(shí)先不要回車執(zhí)行),在Quartus II中下載Nios內(nèi)核到FPGA,然后馬上回車執(zhí)行命令,這時(shí)系統(tǒng)啟動,會出現(xiàn)如圖22-36的畫面。圖22-36 系統(tǒng)啟動

            圖22-36 系統(tǒng)啟動

          這時(shí)在login后面輸入root,Password后面輸入uClinux。這時(shí)linux就在內(nèi)核上運(yùn)行起來了。

          也是將串口作為終端控制臺來連接。

          i. 將串口連接至計(jì)算機(jī)。

          ii. 打開超級終端,按以下參數(shù)設(shè)置(圖 2237):

          波特率: 115200 波特/秒

          數(shù)據(jù)位: 8位

          停止位: 1位

          奇偶校驗(yàn): 無

          流控: 無圖22-37 串口設(shè)置

          圖22-37 串口設(shè)置

          在Quartus中將NIOS下載到FPGA中,超級終端的顯示如圖 22-38所示。圖22-38 串口顯示

          圖22-38 串口顯示

          2.3 建立uClinux應(yīng)用程序

          1. 點(diǎn)擊【File】→【New】→【Projects…】→【Linux application project】,新建一個(gè)名為Hello的工程。 2. Navigator欄中右鍵選中新建的工程Hello,點(diǎn)擊【New】→【Source File】,如圖 22 39所示。在File Name欄里輸入文件名Hello.c。圖22-39 新建源文件

          圖22-39 新建源文件

          1. 在編輯欄里輸入一個(gè)Hello World的C程序(圖22-40)。圖22-40 輸入源程序

            圖22-40 輸入源程序

          2. altera70nios2edsexamplessoftwarelinuxappssampleshello下的makefile文件復(fù)制到工程目錄下,并修改PRGJ_NAME=HelloDIR=.。如圖22-41所示。圖22-41 設(shè)置Makefile

            圖22-41 設(shè)置Makefile

          3. 然后在NiosⅡ C/C++ Project 欄下,在Hello工程上點(diǎn)擊右鍵,選擇Create make target,點(diǎn)擊OK。然后在Hello工程上點(diǎn)右鍵Build make target,選擇All并點(diǎn)擊Build進(jìn)行編譯(圖 22-42)。

          圖22-42 編譯程序

          圖22-42 編譯程序

          1. 這時(shí)會產(chǎn)生Hello.exe文件(圖22-43)。圖22-43 生成的Hello.exe

            圖22-43 生成的Hello.exe

          2. 將生成的Hello.exe文件復(fù)制到文件系統(tǒng)的home目錄下(圖22-44),編譯后將新的文件系統(tǒng)重新下載到目標(biāo)板上。圖22-44 拷貝到文件系統(tǒng)的目錄下

            圖22-44 拷貝到文件系統(tǒng)的目錄下

          3. 登陸uClinux后,直接在命令行輸入Hello,在屏幕上打印出Hello World。如下圖所示。

          注意:在登陸uClinux后的默認(rèn)路徑是在/Home下,如果將應(yīng)用程序粘貼到了其他文件夾,需要切換路徑。



          1. 在啟動nios2-terminal之前,一定要重新下載Nios核否則可能登陸失敗。

          2. 若在啟動nios2-terminal后,提示有多個(gè)cable問題,nios2-terminal –cable命令檢查cable的狀態(tài),然后選擇一個(gè)正確的cable,如nios2-terminal –cable 2。

          3. 在建立SOPC系統(tǒng)中,選擇器件時(shí)其型號和大小應(yīng)該和實(shí)驗(yàn)板上的一致。

          4. 在上述SOPC系統(tǒng)中,定時(shí)器timer一定要有,否則會出錯(cuò)。

          5. 在添加Flash時(shí),一定要設(shè)定Referencd Designator(chip label),即不能是默認(rèn)的“none”,可以修改成任意別的字符,如“FL”。否則燒寫Flash 會出現(xiàn)錯(cuò)誤。

          6. 在編譯的時(shí)候,有些管腳是有特殊作用,但也可以當(dāng)普通I/O使用,不過需要按如下步驟設(shè)置:
            i.Step 1:Assignments → Device(圖22-45)。
            圖22-45 管腳設(shè)置(a)

            圖22-45 管腳設(shè)置(a)

            ii. Step 2:按下Device and Pin Options,選擇Dual-Purpose Pins(圖 22 46)。圖22-46 管腳設(shè)置(b)

            圖22-46 管腳設(shè)置(b)

            iii. Step 3:將nCEO改成Use as regular I/O(圖 22-47)。圖22-47 管腳設(shè)置(c)

            圖22-47 管腳設(shè)置?



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉