亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于異構多核SoC的圖形用戶界面的構建方法

        2015-06-23 13:55:39王亞剛焦繼業(yè)
        西安郵電大學學報 2015年1期
        關鍵詞:圖形用戶界面內核寄存器

        王亞剛, 馬 超, 焦繼業(yè)

        (西安郵電大學 計算機學院, 陜西 西安 710121)

        基于異構多核SoC的圖形用戶界面的構建方法

        王亞剛, 馬 超, 焦繼業(yè)

        (西安郵電大學 計算機學院, 陜西 西安 710121)

        針對異構多核片上系統的FPGA原型沒有可供交互的圖形用戶界面問題,提出一種圖形用戶界面的構建方法。該方法根據系統中顯示控制器的工作原理和硬件特點,開發(fā)Linux操作系統內核層的Framebuffer驅動程序,借助MiniGUI的fbcon圖形引擎進行MiniGUI移植,從而為系統構建了圖形用戶界面。測試結果表明,所構建的圖形用戶界面能夠為系統提供良好的人機交互接口。

        片上系統;Linux;幀緩沖;MiniGUI;圖形用戶界面

        圖形用戶界面(Graphical User Interface,GUI)作為嵌入式系統的人機交互接口,是嵌入式系統設計和開發(fā)的重要內容。常見的幾種主流的嵌入式GUI有WinCE, OpenGUI, Qt/Embedded, MiniGUI等[1]。針對較為普遍的開發(fā)板和特定的操作系統(如S3C44B0和uClinux)構建圖形用戶界面的技術已經十分成熟[2-3],有的開發(fā)板甚至已經自帶了GUI系統。而對于一個新設計開發(fā)的硬件平臺,構建圖形用戶界面不僅需要從應用層解決移植問題,還必須從操作系統驅動層為移植提供底層支持。

        針對異構多核現場可編程門陣列(Field Programmable Gate Array, FPGA)硬件原型片上系統(System on Chip, SoC)沒有圖形用戶界面來進行系統測試和效果展示的問題,本文擬從系統底層驅動到應用層,通過Linux幀緩沖驅動和移植MiniGUI視窗系統,構建圖形用戶界面。

        1 SoC系統概述

        異構多核SoC圖形處理器采用CPU+GPU(Graphics Processing Unit)架構,其中CPU采用支持SPARC V8的LEON3處理器[4],GPU支持OpenGL 1.3(Open Graphics Library 1.3)標準,可編程處理器包含9級圖形流水渲染管線,采用自定制的32位精簡指令集(Reduced Instruction Set Computer,RISC)[5]。在圖形應用程序的處理過程中,GPU負責3D圖形加速,CPU處理一些簡單的2D圖形計算,高級視頻圖形陣列(Super Video Graphics Array,SVGA)顯示控制器負責顯示Framebuffer中的像素。

        SoC圖形用戶界面的軟硬件總體關系如圖1所示?;诋悩嫸嗪薙oC圖形處理器的FPGA原型和移植的Linux操作系統,開發(fā)了針對于此SoC的顯示控制器GRLIB SVGA的內核Framebuffer驅動,借助于MiniGUI的fbcon圖形引擎將MiniGUI移植到此硬件平臺。

        圖1 異構多核SoC GUI構建關系

        2 Linux幀緩沖驅動

        幀緩沖驅動是Linux內核為用戶程序提供的操作顯示設備和管理顯示內存的統一接口,它為用戶程序屏蔽了不同顯示硬件的差異[6]。實現此平臺的GRLIB SVGA顯示控制器的Framebuffer驅動,有兩個關鍵步驟:SVGA顯控寄存器的I/O內存映射及配置和顯存的分配。

        2.1 SVGA寄存器I/O映射

        在使用內存管理單元(Memory Management Unit,MMU)的情況下,CPU只能處理虛擬地址,所以在驅動中首先要將硬件寄存器的物理地址映射到內核虛擬地址空間[7]。

        SVGA顯控作為一個高級外部設備總線(Advanced Peripheral Bus,APB)從設備掛接到系統的APB總線上。APB總線支持Plug&Play功能,所有的已掛接的APB從設備的Plug&Play配置信息保存在一塊只讀的總線地址空間0xFF000~0xFFFFF,大小為4 KB,每個APB從設備的配置記錄占2個字長[8],圖2是APB總線Plug&Play(PnP)配置字格式。在Framebuffer驅動中通過調用內核高級微控制器總線體系(Advanced Microcontroller Bus Architecture,AMBA)PnP驅動提供的接口amba_get_free_apbslv_devices將配置信息解析保存到描述APB從設備的結構。其結構體代碼如下。

        typedef struct amba_apb_device {

        unsigned int start, irq, bus_id;

        amba_confarea_type *bus;

        } amba_apb_device;

        其中第一個字段start保存的是從SVGA配置字解析的控制寄存器的起始物理地址。

        圖2 APB PnP配置字格式

        通過內核函數ioremap[9]將寄存器映射,得到配置字和映射的代碼如下。

        unsigned int REG_BASE;

        amba_apb_device devi[1];

        amba_get_free_apbslv_devices(

        VENDOR_GAISLER,GAISLER_SVGA,devi,1);

        REG_BASE = (unsigned int)devi[0].start;

        par->regs=(LEON3_GRVGA_Regs_Map*)

        ioremap(REG_BASE,sizeof(LEON3_GRVGA_Regs_Map));

        結構體LEON3_GRVGA_Regs_Map包括了SVGA顯控的總共11個寄存器[10],它們分別用來設置顯控的狀態(tài)、水平垂直分辨率、上下左右掃描空白時間、水平垂直同步時間、Framebuffer內存起始物理地址、4個時鐘向量、顏色查找表地址(使用偽彩色)。

        寄存器映射完成后,把結構fb_var_screeninfo的對應的時序參數寫到寄存器的虛擬地址,xres和yres分別是顯示的水平垂直分辨率,其它參數在屏幕上是不可見的[11]。

        2.2 顯存的申請分配

        顯控的寄存器映射并初始化后,驅動要完成的另一個關鍵步驟就是為系統申請顯示內存,也就是幀緩沖所指的系統內存緩沖區(qū)。為了使驅動有更大的靈活性,SVGA Framebuffer驅動支持兩種申請顯存的方式:一種是通過內核命令行參數指定一個專門的Framebuffer起始地址;另一種是驅動模塊加載時由內核動態(tài)向系統申請一塊幀緩沖區(qū),并將這塊內存的物理地址寫入顯控的Framebuffer位置寄存器。幀緩沖區(qū)大小是由命令行參數或驅動所選擇的默認水平垂直分辨率和位深的乘積決定的。

        在內核命令行參數不指定使用自定義幀緩沖起始地址的情況下,驅動默認使用第二種方法申請顯存。申請顯存并將所申請的物理地址保存的代碼如下。

        virtual_start=(unsigned long)__ get_free_pages(GFP_ATOMIC|GFP_DMA,get_order(mem_size));

        physical_start=__ pa(virtual_start);

        par->regs->fb_pos=physical_start;

        3 MiniGUI的移植

        完成操作系統內核層的Framebuffer驅動后,構建圖形用戶界面的最后一步工作就是移植MiniGUI。移植的主要工作是分析MiniGUI的軟件結構和模塊間關系,找到其與底層驅動的接口,并根據異構多核SoC所支持的顯示模式適當配置MiniGUI的圖形引擎。

        3.1 MiniGUI

        MiniGUI是面向實時嵌入式系統的輕量級圖形用戶界面支持系統[12],基于MiniGUI可以開發(fā)各種窗口應用程序。

        在MiniGUI的軟件體系結構中,引入了圖形抽象層(Graphics Abstract Layer, GAL)和輸入抽象層(Input Abstract Layer, IAL)的概念[13]。GAL和IAL屏蔽了不同硬件的差異性,為上層提供統一接口,使得MiniGUI更加具有可移植性。前面已經實現了基于SVGA的Framebuffer驅動,這樣就可以直接利用MiniGUI GAL層提供的支持Framebuffer的fbcon引擎將MiniGUI移植到目標系統。

        3.2 移植過程

        移植MiniGUI的主要工作就是在宿主機搭建交叉編譯環(huán)境,配置并編譯核心庫libminigui-gpl-3.0.12,MiniGUI資源庫minigui-res-be-3.0.12,MiniGUI圖形桌面環(huán)境(MiniGUI Demonstration Environment,MDE)mg-samples-3.0.12,還有輔助庫包括zlib-1.2.6、libpng-1.2.37、freetype-2.3.9、libmgplus-1.2.4,最后將編譯好的位于宿主機/usr/local/minigui下的3個目錄中的相關資源etc、lib、share拷貝到目標機文件系統相應的目錄下。

        宿主機的操作系統環(huán)境是CentOS 6.1。由于SoC的CPU LEON3是SPARC指令集體系,所以交叉編譯工具是sparc-linux-3.4.4。將交叉編譯工具解壓到目錄/opt下,并修改用戶HOME目錄下環(huán)境變量配置文件,添加交叉編譯工具的路徑到PATH,如

        export PATH=$PATH:/opt/sparc-linux-3.4.4/bin

        各個庫的編譯配置基本上是類似的,以MiniGUI核心庫的配置為例,Makefile變量設置如下。

        CC=sparc-linux-gcc

        CFLAGS=-I/usr/local/minigui/include

        LIBS=-L/usr/local/minigui/lib./configure

        --prefix=/usr/local/minigui

        --build=i386-linux

        --host=sparc-linux

        --target=sparc-linux

        --with-osname=linux

        --with-style=classic

        --with-targetname=fbcon

        --enable-autoial

        --enable-procs

        編譯完成后,會在宿主機的/usr/local/minigui目錄下生成3個目錄lib、share、etc,lib下保存的主要是所生成的動態(tài)庫以及其符號鏈接文件;share下是字體、圖標、logo圖片等資源文件;etc下有一個配置文件MiniGUI.cfg,MiniGUI應用程序在執(zhí)行main函數前會調用MiniGUI核心初始化函數,InitGUI根據從MiniGUI.cfg讀取的配置信息來初始化MiniGUI中的各個模塊。為了使MiniGUI與Framebuffer驅動支持的分辨率,顏色深度等參數相一致,需要修改MiniGUI.cfg配置

        [system]

        gal_engine=fbcon

        defaultmode=640x480-32bpp

        [fbcon]

        defaultmode=640x480-32bpp

        將以上3個目錄的內容拷貝到目標機文件系統相應目錄下,所移植的MiniGUI就成功安裝到了目標系統。

        4 測試結果及分析

        在MiniGUI 3.0的源碼包中提供一個簡單的圖形桌面環(huán)境mg-samples-3.0.12 MDE。它為用戶提供一個運行應用程序的圖形接口,并且允許用戶通過配置文件mginit.rc添加自己的應用程序,它的格式為

        [taskbar]

        nr=3

        autostart=0

        logo=res/xiyou_logo.png

        [app0]

        path=../minesweeper/

        name=minesweeper

        icon=res/mines.gif

        ...

        將MDE的入口程序mginit添加到目標系統的開機自動啟動項腳本/etc/init.d/rcS,系統啟動時mginit會解析mginit.rc文件內容,利用系統調用fork為每個被雙擊運行的程序創(chuàng)建一個新的進程。用戶可以根據需要在存儲容量允許的條件下添加任意個2D MiniGUI和3D OpenGL Demos。

        將編譯好的MiniGUI核心庫及輔助庫,資源文件以及MDE、應用程序添加到文件系統中,重新生成操作系統的鏡像文件,由上位機下載到FPGA開發(fā)板的內存中,操作系統啟動時,mginit由啟動腳本自動運行。圖3是MDE運行時的桌面,桌面背景圖片是Stanford Bunny,桌面上還有數個可運行的2D、3D應用程序。

        圖3 MiniGUI運行后的桌面效果

        圖4是雙擊桌面上的應用程序圖標啟動的掃雷、推箱子等2D小游戲。

        圖4 基于MiniGUI的小游戲示例

        經過MiniGUI 2D應用程序和OpenGL 3D程序測試,MiniGUI的輸入子系統鍵盤鼠標工作正常,圖形輸出平滑流暢,顏色鮮明,系統整體運行穩(wěn)定,達到了人機交互的目的,展示了異構多核SoC圖形處理器的處理能力。

        5 結束語

        通過從系統底層Framebuffer驅動開發(fā)到應用層MiniGUI移植,構建了異構多核SoC圖形處理器FPGA系統的圖形用戶界面,系統完整地描述了基于一個新硬件平臺構建圖形用戶界面的方法。運行結果表明,所構建的GUI系統可滿足系統的人機交互和應用演示的需求。

        [1] 詹瑾瑜,熊光澤,孫明. 一種嵌入式GUI軟件結構實現方案[J]. 電子科技大學學報,2003,32(1):89-93.

        [2] 魏凱斌,汪志農,張少剛. 基于uCLinux系統的圖形界面研究與實現[J]. 微計算機信息, 2007,23(11-2):83-85.

        [3] 李戰(zhàn)明,龔思遠,陳若珠. 基于uClinux系統MiniGUI的移植研究[J]. 微計算機信息,2007,23(4-2):46-48.

        [4] AeroflexGaisler.LEON/GRLIB Configuration and Development Guide[EB/OL]. (2014-04-16)[2014-06-01].http://gaisler.com/products/grlib/guide.pdf.

        [5] 朱豪杰,韓俊剛,鄧軍勇,等. GPU命令處理器的存儲管理單元設計[J]. 西安郵電大學學報,2013,18(1):78-81.

        [6] 田磊. Linux體系結構及嵌入式Linux的移植與應用[J]. 西安郵電學院學報,2009,14(3):102-105.

        [7] 宋寶華,何昭然,史海濱,等. 精通 Linux 設備驅動程序開發(fā)[M]. 北京:人民郵電出版社,2010:249-254.

        [8] Daniel Hellstrom. SnapGear Linux for LEON[EB/OL]. (2012-08-15)[2014-06-01]. http://www.gaisler.com/anonftp/linux/linux-2.6/snapgear/snapgear-manual-1.0.37.pdf.

        [9] Corbet J, Rubini A, Hartman G K. Linux設備驅動程序:影印版[M].南京:東南大學出版社,2005:249-251.

        [10] AeroflexGaisler.GRLIB IP Library User’s Manual[EB/OL].(2014-04-16)[2014-06-01]. http://gaisler.com/products/grlib/grlib.pdf.

        [11] 宋寶華. Linux 設備驅動開發(fā)詳解[M]. 北京:人民郵電出版社, 2008:480-499.

        [12] 魏永明. 嵌入式軟件開發(fā)及 C 語言實現: MiniGUI 剖析[M]. 北京:電子工業(yè)出版社, 2008:37-45.

        [13] Beijing Feynman Software Technology Co.,Ltd..Datasheet for MiniGUI V3.0.x[EB/OL]. (2008-10-13)[2014-06-01]. http://www.minigui.org/docs/minigui-datasheet-3.0e.pdf.

        [責任編輯:祝劍]

        A method of building GUI based on heterogeneous multi-processor SoC

        WANG Yagang, MA Chao, JIAO Jiye

        (School of Computer Science and Technology, Xi’an University of Posts and Telecommunications, Xi’an 710121,China)

        Due to the nonexistence of GUI (Graphical User Interface) on the heterogeneous multi-processor SoC (System on Chip) FPGA prototype system, according to the principle and specific hardware of the display controller used in this system, a Framebuffer driver is developed in order that Mini GUI could be ported for the purpose to build GUI for this SoC. The test and interactive results show that the GUI can provide friendly interactive interface for the system.

        SoC, Linux, framebuffer, MiniGUI, GUI

        2014-08-29

        國家自然科學重點基金資助項目(61136002);陜西省教育廳科學研究計劃資助項目(14JK1674)

        王亞剛(1972-),男,博士,副教授,從事計算機系統結構、并行編譯技術研究。E-mail: lazy_linux@126.com 馬超(1988-),男,碩士研究生,研究方向為計算機軟件與理論。E-mail: onion_0709@yahoo.com

        10.13682/j.issn.2095-6533.2015.01.012

        TP316.2

        A

        2095-6533(2015)01-0060-04

        猜你喜歡
        圖形用戶界面內核寄存器
        萬物皆可IP的時代,我們當夯實的IP內核是什么?
        現代裝飾(2022年4期)2022-08-31 01:41:24
        強化『高新』內核 打造農業(yè)『硅谷』
        Lite寄存器模型的設計與實現
        計算機應用(2020年5期)2020-06-07 07:06:44
        圖形用戶界面外觀設計專利保護問題探析——以“奇虎訴江民案”為例
        基于嵌入式Linux內核的自恢復設計
        Linux內核mmap保護機制研究
        淺談圖形用戶界面(GUI)技術專利現狀
        電子測試(2018年9期)2018-06-26 06:46:34
        分簇結構向量寄存器分配策略研究*
        圖形用戶界面法律保護問題與對策
        高速數模轉換器AD9779/AD9788的應用
        最新国产乱视频伦在线| 丰满大爆乳波霸奶| 亚洲中文字幕久在线| 在线综合网| 三级黄色片一区二区三区 | 日本一二三区在线观看视频| 少妇av射精精品蜜桃专区| 日韩在线看片免费人成视频| 色中文字幕视频在线观看| 亚洲国产中文字幕在线视频综合| 亚洲熟妇无码一区二区三区导航 | 亚洲成熟中老妇女视频| 小说区激情另类春色| 无码三级在线看中文字幕完整版| mm在线精品视频| 少妇人妻精品久久888| 三a级做爰片免费观看| 欧美日韩亚洲精品瑜伽裤| 中文字幕精品永久在线| 国产精品美女久久久网站三级| 欧美黑人xxxx又粗又长| 国产精品一区二区久久乐下载| 五十路在线中文字幕在线中文字幕 | 亚洲AV肉丝网站一区二区无码 | 国产日产久久高清ww| 日本japanese丰满多毛| 久久久久久久妓女精品免费影院 | 亚洲精品国产精品乱码视色| 黄网站欧美内射| 精品欧美久久99久久久另类专区| 午夜视频一区二区在线观看| 97人人模人人爽人人喊网| 国产做无码视频在线观看浪潮| 伊人不卡中文字幕在线一区二区| 丝袜美腿亚洲第一免费| 黑人巨大无码中文字幕无码| 日韩精品成人无码AV片| 91精品人妻一区二区三区水蜜桃| 内射欧美老妇wbb| 亚洲天堂中文| 久久成人永久婷婷99精品|