1. 訪問DDR3
我們使用名為DDR3-test.c的PetaLinux應用訪問DDR3存儲器。該應用經過精心設計,可向DDR存儲器位置寫入數據并從這里讀取數據。DDR3是雙列直插式存儲器模塊,可提供用于存儲用戶代碼和數據的SDRAM。如上文所述,用戶需要知道DDR存儲器的開始地址和結束地址,分別是0xC0000000和0xC7FFFFFF。存儲器的容量為512兆字節。Linux內核駐留在DDR存儲器的初始存儲器位置。因此需要選擇DDR3存儲器的寫入位置,以避免破壞Linux內核。我們使用以下命令向DDR3存儲器寫入數據:
#DDR3-test –g 0xc7000000 –o 15
其中DDR3-test是應用名稱、-g是DDR3存儲器的物理地址、-o是輸出、15是準備在0xc7000000位置寫入DDR3存儲器的值。為測試該值是否能寫入預計的位置,我們使用以下命令從DDR3存儲器讀取數據:
#DDR3-test –g 0xc7000000 –i
圖7:通過QEMU運行PetaLinux
該應用旨在控制8位離散輸出,可通過將板載LED連接至GPIO進行測試。
值15顯示在終端上,這說明DDR3存儲器讀寫操作正在成功進行。
2. 使用/dev/mem訪問GPIO
對于接下來的應用測試,我們使用名為gpio-dev-mem-test.c的PetaLinux應用訪問了通用I/O(GPIO)。該應用的設計目的是控制8位離散輸出并通過將板載LED連接至GPIO來測試該輸出。要從用戶空間訪問任何設備,就要先打開/dev/mem,然后使用mmap()將設備映射至存儲器。我們所使用LED GPIO的開始地址和結束地址分別是0x40000000 和0x4fffffff。
GPIO外設具有兩個寄存器:數據寄存器(GPIO_DATA)和方向寄存器(GPIO_TRI_OFFSET)。為了讀取GPIO的狀態,我們將方向位設置為1(即GPIO_TRI_OFFSET=1)并且從數據寄存器讀取數據。為了將數據寫入到GPIO,我們設置方向位為0并寫入值到數據寄存器。在PetaLinux終端上使用下列命令將數據寫入到GPIO:
#gpio-dev-mem-test –g 0x40000000 –o 255
其中gpio-dev-mem-test為應用名稱,-g為GPIO物理地址,-o為輸出,255為從GPIO(連接到LED)發送的值。LED按編寫的程序點亮時,測試的結果就得到了驗證。
3. 使用UIO訪問GPIO
訪問GPIO的另一個途徑是通過用戶空間輸入/輸出。我們通過UIO,使用名為gpio-uio-test.c的PetaLinux應用訪問了GPIO。該應用旨在控制8位離散輸出,可通過將板載LED連接至GPIO進行測試。UIO設備在文件系統中表現為/dev/uioX。為通過UIO訪問GPIO,我們打開了/dev/uioX或sys/class/ui0,然后使用了mmap()調用。我們配置了內核使之支持UIO,并在內核中啟用了UIO框架。隨后我們使用名為“Compatibility”的參數,根據UIO設備(而非標準GPIO設備)對LED的GPIO控制方式進行了設置。此外,我們還將
設備的標簽從 gpio@40000000修改成了leds@40000000。
然后我們重新構建了PetaLinux,并使用UIO測試了GPIO訪問。我們使用以下命令,獲得了所加載UIO模塊的詳細信息:
# ls /sys/class/uio/ uio0 uio1 uio2
UIO的名稱和地址可在/sys/class/uio/uioX下找到。我們使用以下命令通過UIO驅動程序訪問了GPIO LED:
# cd “/sys/class/uio/uioX
# gpio-uio-test -d /dev/uio1 -o 255
其中gpio-uio-test為應用名稱、-d為設備路徑、-o為輸出、255為通過UIO傳遞給GPIO的值。使用以上命令,LED按寫入到GPIO線路上的數據點亮,驗證了該結果。
4. 文件傳輸應用
最后一項測試,我們將文件從服務器傳輸到了客戶端,這里的服務器是主機PC,客戶端是KC705電路板。在這項測試中,我們使用以太網線纜連接服務器和客戶端,并使用了小型文件傳輸協議(TFTP)。這種協議因簡單而出名,通常用于自動傳輸配置文件或引導文件。為測試使用TFTP從服務器向客戶端傳輸文件的情況,我們在/tftpboot位置為服務器PC創建了一個名為test的文件。我們使用以下命令在文件中寫入了“世界,你好”并查看了該文件中的內容(如圖8所示):
@ echo “Hello World” 》 /tftpboot/test
@ more /tftpboot/test
圖8:在服務器中創建文件的快照
圖9:在客戶端接收文件的快照
圖10:從客戶端到服務器傳輸文件的快照
圖11:在服務器中接收文件的快照
為從服務器接收該文件,我們在以客戶端方式運行在KC705電路板上的PetaLinux終端窗口中輸入以下獲取命令(-g):
# tftp -r test -g 192.168.25.68
# ls –a
在客戶端中創建了一個名為“test”的新文件(如圖9所示)。我們可以使用更多內容命令查看該文件的內容,如圖9所示:
同樣,如果要從客戶端向服務器傳輸文件,可先在客戶端機器上創建一個名為test1的文件,其內容為“PetaLinux OS”。然后在運行在客戶端上的PetaLinux終端中使用以下“放置”命令(-p),便可將該文件從客戶端傳輸至服務器,如圖10所示:
# tftp -r test1 -p 192.168.25.68
可在服務器中創建一個空白文件test1,其內容可在文件傳輸工作完成后讀取。該內容可圖11所示方法進行驗證。
在FPGA上實現嵌入式系統和運行PetaLinux,操作起來非常簡單直觀。接下來,我們計劃使用遠程編程實現設計,即引導文件通過以太網傳輸,客戶端能夠運行新應用。
評論
查看更多