如何在Nios II系統運行uClinux操作系統
1. 實(shí)驗內容
通過(guò)本實(shí)驗了解如何建立復雜的NIOS II,如何在Nios II系統運行uClinux操作系統,以及在uClinux操作系統環(huán)境上開(kāi)發(fā)簡(jiǎn)單用戶(hù)應用程序。
本文引用地址:http://dyxdggzs.com/article/202501/466539.htm本實(shí)驗要求利用SOPC建立一復雜的NIOS II,通過(guò)NIOS II IDE配置uClinux,實(shí)現在uClinux在NIOS II上的運行。
2. 實(shí)驗步驟
2.1 NiosⅡ硬件設置
1. 工程建立:首先在Quartus II新建一個(gè)名為uclinux的工程,工程建立之后在工具欄中點(diǎn)擊圖標,出現SOPC Builder對話(huà)框。在System Name對話(huà)框里設置Nios系統名nios_cpu,HDL語(yǔ)言選擇Verilog,如下圖(圖22-1)所示。
圖22-1 SOPC Builder對話(huà)框
在Flash Memory對話(huà)框中對點(diǎn)擊【New Flash Memory】,將Device命名為u10(這個(gè)名字是任意自取的,但一定要有),如下圖所示。
圖22-3 Flash Memory設置
在Files選項里定義Board Description Name為de4(該名字可以任意自?。?,然后點(diǎn)擊Finish,如圖22-4所示。
圖22-4 目標板名字設置
系統中缺省沒(méi)有網(wǎng)卡和SRAM組件,所以要將光盤(pán)中的DM9000A(網(wǎng)卡)和SRAM16Bit512K(SRAM)兩個(gè)文件夾添加到uClinux工程文件夾中,這樣就會(huì )出現網(wǎng)卡和SRAM組件。
將Avalon Components中的選項中組建添加到自己的工程中,具體方法是將相關(guān)的組建拖進(jìn)右邊的對話(huà)框中,如圖22 6所示。主要有Nios II Processor,Bridges中的Avalon Tristate Bridge,Communication中的Jtag UART和UART,Memory中的onchip_memory, SDRAM controller, Flash Memory,Other里面的Interval timer,PIO。
圖22-6 NiosⅡ系統配置
同樣的方法打開(kāi)SDRAM設置框,按照圖22-8進(jìn)行設置。
圖22-8 SDRAM設置
對PIO進(jìn)行設置,首先將它的Module Name改為led_pio。然后將位長(cháng)改為8。
對與上述組建的設置,除了SDRAM設置為clk_50外,其他的都設置為clk。按圖22 9所示的設置中斷優(yōu)先級。
圖22-9 時(shí)鐘與中斷設置
設置cfi_flash的Base地址為0;設置sdram的base地址為0x2000000,將這兩個(gè)地址固定,然后將它們的基地址固定,在基地址一欄中點(diǎn)右鍵,選擇Lock Base Address,如下圖(圖22-10)所示:
圖22-10 鎖定基地址
然后點(diǎn)擊System下拉菜單的Auto-Assign Base Addresses,對其他外設自動(dòng)分配地址。
在SOPC Builder中選擇Next 到More “cpu_0” Settings標簽欄,設置系統復位和啟動(dòng)時(shí)運行的地址,如圖22-11所示:
圖22-11 設置啟動(dòng)地址
至此一個(gè)SOPC系統就設置完畢了。
點(diǎn)擊【Next】到System Generation,HDL選項上打鉤,這里我們不進(jìn)行仿真所以對取消Simulation,如圖22-12所示。點(diǎn)擊【Generate】,如果沒(méi)有報錯說(shuō)明系統生成正確。
圖22-12 系統生成
點(diǎn)擊【Next】,進(jìn)入設置界面(圖22-14),首先將Device family設置為CycloneⅡ,Device speed設置為8,輸入時(shí)鐘頻率設為50MHz。
圖22-14 時(shí)鐘設置
點(diǎn)擊【Next】,對第一個(gè)輸出時(shí)鐘進(jìn)行設置,第一個(gè)時(shí)鐘是SDRAM的時(shí)鐘,只需要將Clock phase shift設為-63,如圖22-15所示。點(diǎn)擊【Next】,將第二個(gè)時(shí)鐘設置為50MHz,無(wú)相位偏移。同樣的將第三個(gè)時(shí)鐘設置為100MHz無(wú)相位偏移。然后點(diǎn)擊【Finish】生成鎖相環(huán)。
圖22-15 輸出時(shí)鐘設置
圖22-16 時(shí)鐘連接
圖22-17 原理圖設計
在對所有管腳連接完,并分配好管腳位置后,對工程進(jìn)行編譯,至此SOPC系統的硬件部分設計完畢。
2.2 軟件環(huán)境配置
1. 軟件安裝
在NiosⅡ上運行uClinux需要安裝Microtronix uClinux。如果開(kāi)發(fā)環(huán)境Quatars6.0+NiosⅡ6.0,應該安裝版本1.4。如果是Quatars7.0+NiosⅡ7.0,則需要更高版本1.4.1,產(chǎn)品光盤(pán)中帶的是1.4.1版本。在安裝時(shí)要注意指明NiosⅡ的安裝路徑,如圖22-18所示:
圖22-18 nios中Linux安裝
在安裝完畢后,啟動(dòng)NiosⅡ IDE,選擇菜單File→Switch workspace,在里面指定前面所建立的NIOS核所在的路徑,這里假定為:c:uClinux下,如圖22-19所示。
圖22-19 將工作目錄切換至NIOS核所在的目錄
新建一個(gè)Linux Kernel Project(File→new→project…),如圖22-20所示。
圖22-20 新建工程
點(diǎn)擊【Next】在Project name中填入kernel,如圖22-21所示。
圖22-21 工程名設置
點(diǎn)擊【Next】指定該工程對應的SOPC系統,點(diǎn)擊【Browse】在SOPC System的路徑找到.ptf文件(假定前面的NIOS系統存在了c:uClinux下),在Kernel Options欄中,upload Memory選擇cfi_flash,Execute Memory 選擇sdram,如下圖所示。
圖22-22 SOPC System選擇
點(diǎn)擊【Finish】,這時(shí)IDE的Navigator欄(一定要切到navigator欄)中,會(huì )出現剛才新建的kernel,點(diǎn)擊右鍵所建立的工程,選擇configure kernel(圖22-23)。
圖22-23 configure kernel
這時(shí)會(huì )彈出Kernel的配置窗口(圖22-24)。
圖22-24 配置窗口
這里我們需要對內核進(jìn)行配置。進(jìn)入Device Driver→ATA/ATAPI/MFM/RLL support,點(diǎn)擊空格鍵或N,這時(shí)可以發(fā)現在<>內沒(méi)有任何符號,如圖22-25所示,這樣在對內核進(jìn)行編譯的時(shí)候不會(huì )對這個(gè)驅動(dòng)程序進(jìn)行編譯。
圖22-25 ATA/ATAPI/MFM/RLL驅動(dòng)設置
進(jìn)入Device Driver→Character Devices→Serial driver設置串口,選擇如圖22-26所示。
圖22-26 串口設置
這樣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。其他各項都采樣默認設置project。
注意:如果工程中用到網(wǎng)卡需要將網(wǎng)卡的驅動(dòng)程序相關(guān)宏定義進(jìn)行修改,程序路徑為:
NiosⅡ路徑(假設Quartus和NIos安裝在c盤(pán)下) c:Altera70nios2edsbin eclipsepluginscom.microtronix.nios2linux.kernel1.4.1 linux-2.6.xdriversnetdm9000x.c。然后打開(kāi)工作目錄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中定義的變量相同,否則編譯不能通過(guò)。
在設置完后選擇保存,然后build內核(圖22-27)。
圖22-27 編譯內核
圖22-28 建立文件系統設置
工程完成后在Navigator欄中欄下把targetetc目錄下inittab文件打開(kāi),將ttys1下前面的“#”去掉,將串口打開(kāi),如圖22-29。然后編譯(圖22-30)。
圖22-29 建立文件系統
圖22-30 編譯內核
將工程下載到flash中,點(diǎn)擊菜單Tools→lash programmer,出現(圖22-31):
圖22-31 Flash programmer
點(diǎn)擊左上角第一個(gè)New lauch configuration ,出現(圖 22-33):
圖22-32 新建下載配置
把program software project into flash memory中的勾去掉。 在Target Hardware中選擇SOPC系統的路徑(圖22-33)。
圖22-33 設置SOPC的路徑
Flash Program 有三種下載方式,在這里選擇Program a file into flash memory,首先下載linux內核,路徑為:內核工程路徑c:uclinuxkernelbuildvmlinux.bin,offset為0x0,然后點(diǎn)擊Program flash進(jìn)行下載。
注意:在這里的選項可能是灰的,要求一定要把JTAG下載線(xiàn)連接到USB口上。
圖22-34 kernel下載參數
然后下載文件系統,路徑為:文件系統工程路徑c:uclinuxfsromfs.bin,offset為 0x200000。
圖22-35 kernel下載參數
這時(shí)在login后面輸入root,Password后面輸入uClinux。這時(shí)linux就在內核上運行起來(lái)了。
也是將串口作為終端控制臺來(lái)連接。
i. 將串口連接至計算機。
ii. 打開(kāi)超級終端,按以下參數設置(圖 2237):
波特率: 115200 波特/秒
數據位: 8位
停止位: 1位
奇偶校驗: 無(wú)
流控: 無(wú)
圖22-37 串口設置
在Quartus中將NIOS下載到FPGA中,超級終端的顯示如圖 22-38所示。
圖22-38 串口顯示
2.3 建立uClinux應用程序
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-42 編譯程序
注意:在登陸uClinux后的默認路徑是在/Home下,如果將應用程序粘貼到了其他文件夾,需要切換路徑。
評論