fpga嵌入linux系统,基于FPGA的Virtex-5板的PetaLinux嵌入式操作系统文件系统挂载流程...
今天總算完成了文件系統(tǒng)的加入,現(xiàn)在看來整個的工作過程少了一個懂linux代碼的指導,探索起來確實不易。總結下最近做的事情,條理才逐漸清楚了。
剛開始接到這個任務時是要在petalinux嵌入式操作系統(tǒng)中添加文件系統(tǒng),對于我這個概念很陌生,如果說用c語言來寫個FAT的文件系統(tǒng),自己定義結構體這個任務可能還簡單點。我對于嵌入式操作系統(tǒng)的內(nèi)核,linux代碼完全不懂,上手起來有點慢。頭腦里沒有總的框架,只能摸索著前進。
先說下具體工程結果,我們的工程是在Xilinx-V5的開發(fā)板上安裝嵌入式petalinux操作系統(tǒng),這個操作系統(tǒng)的是管理FPGA的,對于FPGA的控制由操作系統(tǒng)完成,我的任務是在操作系統(tǒng)上添加CF卡和相應的文件系統(tǒng)支持。之前我已經(jīng)完成了petalinux操作系統(tǒng)的移植,但是對于我們的任務還遠遠不夠,具體不夠在于:(1)對于文件系統(tǒng)的選取問題。(2)對于V5板的CF卡接口問題。(3)對于內(nèi)核配置的問題。
在思路上,對于第一點我走了彎路,最早選取的是JFFS2文件系統(tǒng),這是一種日志式的文件系統(tǒng),支持flash,由于CF卡的存儲結構是flash的一種,我認為理所當然選取這個文件系統(tǒng)。后來在生成petalinux操作系統(tǒng)時發(fā)現(xiàn)選擇jffs2作為根文件系統(tǒng)時會有錯誤,[subdir]error1,錯誤很長時間找不到原因。我放棄使用jffs2,改用內(nèi)核配置時的其他三種根文件系統(tǒng):cramfs,romfs,initramfs。這三種編譯出來的結果都是正常的沒有報錯。于是開始著手EDK中硬件支持的添加,以前跑通的操作系統(tǒng)不帶有CF卡,由于Xilinx的CF卡是由Systemace控制器管理的,我們在EDK中加入systemace的IP核就行了,運行沒錯的話會生成system.bit文件和download.bit文件。用impact將download.bit燒到FPGA中,這時如果電腦和FPGA連接了串口,會在串口顯示燒錄成功,再運行XMD將交叉編譯的petalinux操作系統(tǒng)的鏡像文件image.bin文件下載到DDR2的SRAM中。運行操作系統(tǒng),如果一切正常,會在超級終端上顯示登錄系統(tǒng)用戶名和密碼,用戶名是root,密碼在內(nèi)核配置時自己設定。到這步花了一周的時間,后來又出現(xiàn)了很多問題,原因在于我沒有弄清楚根文件系統(tǒng)和CF的文件系統(tǒng)區(qū)別。這些問題包括:(1)CF卡本身帶有一個FAT16的文件系統(tǒng),根文件系統(tǒng)是cramfs。cramfs是一種只讀的文件系統(tǒng),我試過其他兩種文件系統(tǒng),都是readonly的,如何對這個只讀的文件系統(tǒng)讀寫是個問題。(2)root
file system
改不了,怎么讓操作系統(tǒng)識別CF卡。(3)如何控制操作系統(tǒng)對CF的讀寫操作,怎么掛載CF卡的文件系統(tǒng)。一開始準備用混合文件系統(tǒng)的方式,但是精簡的petalinux操作系統(tǒng)缺少很多命令,只好想別的方法。幸好發(fā)現(xiàn)了在根文件系統(tǒng)的/dev目錄下有xsysacea文件:xsysacea到xsysacea15。于是重新編譯了個內(nèi)核,將filesystem
application里的功能全部選上,mount了下,提示說不支持這種文件系統(tǒng)。于是用mke2fs命令重新格式化了CF卡,使之成為ext2的文件系統(tǒng),再mount下,發(fā)現(xiàn)成功了。至此總算完成了CF卡的文件系統(tǒng)掛載。具體工作流程如下:
一、EDK工程創(chuàng)建,生成BSP。
這個沒什么變化,參照上一篇博客內(nèi)容,在BSB中要加上systemace,其他的修改和上面一樣。具體內(nèi)容是:
1.1?搭建microblaze硬件平臺
硬件平臺的搭建如下:(1)首先打開XPS?10.1,新建BSB工程,共三個選項,由于我們此次是新建一個MicroBlaze?硬件平臺,所以選中BaseSystem?Builder?Wizard,點擊OK,進入硬件平臺搭建向導。(2)在彈出的對話框中,點擊browse,選擇一個目標磁盤并建立一個自己的工程文件夾,雙擊進入自己的工程文件夾后,點擊保存,系統(tǒng)會自動為此項目命名為system。點擊OK,進入BSB?歡迎對話框。(3)在歡迎對話框內(nèi),選擇I?would?like?to?create?a?new?design,點擊next。(4)進入開發(fā)板選擇對話框后,進行如下的系統(tǒng)配置:Board?Vendor:?XilinxBoard?Name:XUPV5-LX110T?Evaluation?PlatformBoard?Revision:A點擊next。
(4)進入處理器選擇對話框,由于virtex-5只支持軟核MicroBlaze,所以默認即可。在對話框中還可以看到MicroBlaze?系統(tǒng)的一些參數(shù),比如封裝類型,速度等。點擊next。(5)進入MicroBlaze?配置對話框?,MicroBlaze處理器總線時鐘頻率選擇為125MHz。其中參考時鐘由開發(fā)板上的時鐘源提供,用來產(chǎn)生總線和處理器的頻率,根據(jù)開發(fā)板的不同而不同。Debug?I/F?選擇on-chipH/W?debug?module,Local?memory?選擇64KB。Cache?setup?選擇Enable。點擊next。(6)進入I/O?端口配置對話框。I/O?設備選擇RS232_Uart_1,不選RS232_Uart_2和LEDs_8Bit。波特率選擇115200,并且打開中斷,其他選項默認即可。可以看到窗口的右側有Data?sheet,可以點擊進入看到關于每個外設的data?sheet,點擊next。第二個對話框全部取消,點擊next。全部需要,使用DMA,使用中斷,點擊next。DDR2_SDRAM和SysACE_CompactFlash都要,使用中斷,點擊next。(7)由于此次遠程控制中使用了操作系統(tǒng),所以需要添加定時器,點擊AddPeripherals,在彈出的對話框中選擇xps_timer_1,timer?mode?選擇one?timer?is?present,使用中斷,點擊next。(8)進入cache?配置對話框。由于在系統(tǒng)構建之初,我們已經(jīng)選擇了對外部存儲器進行cache?緩存,所以在這里我們需要對其大小進行設置,數(shù)據(jù)Cache?與指令Cache都選擇64KB,并且勾選DDR2_SDRAM對應的ICache?與DCache。點擊next。(9)全部點擊next,直到Finish。
1.2在EDK?中配置項目軟件環(huán)境
由于此次實驗中,我們需要在MicroBlaze?處理器上需要運行petalinux,所以首先要把petalinux?的配置文件petalinux_v1_00_d?文件夾拷貝到/EDK/sw/lib/bsp/文件夾下。否則后續(xù)的配置工作將會遇到很大問題。步驟如下:(1)啟動EDK,打開剛才搭建的MicroBlaze?硬件系統(tǒng)工作目錄文件夾下的system.xmp?文件。(2)在打開MicroBlaze?系統(tǒng)文件后,可以在EDK?開發(fā)環(huán)境中看到相關系統(tǒng)信息,如下圖所示。首先我們切換到Bus?interface,看到MicroBlaze?系統(tǒng)中各個模塊與總線的連接情況。(3)這里,我們需要對此系統(tǒng)做出如下修改。把窗口切換到port,點開debugmodule,點開interrupt?中的net?選項,選擇debug?module?interrupt。接著點開port?選項中的opb_inct_0,雙擊L?to?H。我們需要把debug?module?interrupt?加入到connected?interrupt?欄中,具體方法是選中debug?module?interrupt,點擊加號,debug?module?interrupt?會被加入到connected?interrupt?欄中。(4)接下來進行軟件平臺配置,點擊Software?菜單,啟動Software?Platform?Setting,系統(tǒng)會彈出軟件平臺的配置窗口,如圖所示,可以看到共有四個可配置項:Software?Platform,OS?and?Libraries,Drivers,Interrupt?Handle。右方的窗口為可配置選項的參數(shù)。(5)這里我們需要逐項進行相關配置。首先,我們對Software?Platform?進行配置,點擊Software?Platform,在窗口右側為可配置參數(shù),包括兩個子窗口,其一是processor?parameters,其中包括處理器。主頻信息,交叉編譯器等選項,其中,extra?compiler?flag?指定了在生成BSP?與庫的過程中,交叉編譯器所用的編譯標志,archiver?和compiler?分別指定了生成BSP?與庫所用的工具鏈。我們只需修改處理器的主頻信息即可,由于我們在進行系統(tǒng)搭建時選擇使用了125MHz,所以CORE_CLOCK_FREQ_Hz?項的Current?Value?改為125MHz,其他保持默認。在OS&Library?settings?子窗口中,打開OS?的下拉菜單,由于我們選擇使用的操作系統(tǒng)為petalinux,所以這里選擇petalinux。特別值得注意的是如果第一步?jīng)]有完成,那么在點開OS?的下拉菜單后,將沒有petalinux?選項,xmdstub的下拉菜單中選擇debug_module。(6)完成如上配置后,選中OS?and?Library?可配置選項,這里完成開發(fā)板對petalinux?的BSP?進行配置,lmb_memory下拉菜單中選擇dlmb_contrl,stdin,stdout都選擇rs232。(7)到此,EDK的環(huán)境配置完成,可以生成工程文件了,點擊Hardware下拉菜單,選擇Generate?Bitstream生成bit流文件,在Software下拉菜單中選擇Generate?Libraries?and?BSPs。生成的工程目錄如圖:
二、交叉編譯生成鏡像文件
基本工作流程和上篇博客的內(nèi)容差不多,主要需要增加的內(nèi)容有:(1)在Linux
Kernel v2.6.20-uc0 Configuration配置項中device
drivers->block devices->Xilinx
SystemACE support,保存退出。
(2)在Filesystem
Applications配置項中,選中EXT2下的mke2fs,保存退出。
(3)make dep ->make
all后如果沒有其他錯誤會在images文件夾下成功生成image.bin鏡像文件。
三、上板調(diào)試和CF文件系統(tǒng)掛載
打開超級終端,先將EDK的bit文件燒到FPGA中,program下,會在超級終端返回成功。運行XMD,dow命令將image.bin文件下載到DRAM中,本工程DRAM的開始地址是0x90000000,再con下讓操作系統(tǒng)運行起來。系統(tǒng)運行成功后,登錄系統(tǒng)根目錄,ls下會發(fā)現(xiàn)如下一些目錄:
cd /dev下,會發(fā)現(xiàn)有xsysacea的設備文件:
使用mke2fs /dev/xsysacea 命令將CF卡格式化為ext2文件系統(tǒng),成功后顯示如下:
再用mount /dev/xsysacea
/mnt命令掛載CF卡,提示沒有文件,使用touch命令創(chuàng)建一個txt文件,ls下發(fā)現(xiàn)已經(jīng)成功:
至此,文件系統(tǒng)的掛載完成。
總結
以上是生活随笔為你收集整理的fpga嵌入linux系统,基于FPGA的Virtex-5板的PetaLinux嵌入式操作系统文件系统挂载流程...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 11.9 leetcode打卡
- 下一篇: 为什么使用VO,DTO,BO