亚洲免费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一区二区| 爆乳无码AV国内| 日本免费三片在线播放| 国产精品一区二区三区在线蜜桃| 97午夜理论片影院在线播放| 中国一级毛片在线观看| 美女福利一区二区三区在线观看| 少妇又色又爽又高潮在线看| 狠狠躁夜夜躁人人躁婷婷视频| 杨幂AV污网站在线一区二区| 国产综合一区二区三区av| 人妻少妇精品视频一区二区三区l| 婷婷五月婷婷五月| 911精品国产91久久久久| 国产伦理自拍视频在线观看| 中文字幕人妻少妇伦伦| 亚洲av成人无码精品电影在线| 国产女精品| 久久久亚洲一区二区三区| 精品亚洲成a人在线观看 | 亚洲欧洲美洲无码精品va| av在线不卡一区二区| 免费网站看av片| 91免费播放日韩一区二天天综合福利电影| 国产成人精品一区二区日出白浆| 国产av在线观看久久| 国产欧美日韩综合精品二区| 高h视频在线免费观看| 国产高清人肉av在线一区二区| 久久久av波多野一区二区| 欧美激情五月| 日本在线观看一区二区三区视频| 国产av一区二区三区无码野战| 女人夜夜春高潮爽a∨片传媒| 国产精品国产三级国产三不| 久久99天堂av亚洲av| 国产成人一区二区三区影院动漫| 香蕉国产人午夜视频在线观看| 国产无卡视频在线观看| 欧美人做人爱a全程免费| 国产在线美女|