日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

在 RK3399 上運行開源的 mali GPU 驅(qū)動

 西北望msm66g9f 2020-05-16

GPU

偶爾會聽到有嵌入式 Linux 玩家抱怨自己的開發(fā)板:圖形界面不夠流暢,拖動窗口有卡頓感。

造成這種情況一般由兩個原因:

  1. 開發(fā)板上主控 SOC 的性能比較弱,沒有帶 3D 圖形加速(即 GPU)功能,比如  i.MX6ULL

  2. 開發(fā)板上的 SOC 帶了 GPU,但是沒有用起來。

第一個原因基本是無解的,如果你選的 SOC上面沒有帶 GPU,唯一的辦法就是盡量去跑輕量級的圖形界面,如果想跑 Debian、Ubuntu 這種發(fā)行版上默認搭配的 Gnome 或者 KDE,這種沒有 GPU 支持,所有的圖像合成渲染都要通過 CPU 來運算,是很難跑流暢的。所以如果你對圖形顯示功能比較看重,在選開發(fā)板的時候一定要查閱與之搭配的主控 SOC 是否帶有 GPU。

也有很多人被卡在了第二個關(guān)卡,SOC 上搭配了強勁的 GPU、比如 RK3399,S912,他們都搭載了 Arm mali GPU,但是 mainline 內(nèi)核卻缺少相應的驅(qū)動支持 —— GPU 驅(qū)動一般分為兩部分:一小部分在 Linux 內(nèi)核中,另外一大部分在 userspace,在 usercapce 的部分向下操作內(nèi)核中的驅(qū)動,向上對應用層提供標準的 OpenGL 接口,這樣各種圖形顯示相關(guān)的應用才能通過標準的 OpenGL API 進行圖形渲染加速。

但是 mali GPU IP 提供商 Arm 公司只開放了內(nèi)核部分驅(qū)動,而且這部分驅(qū)動還沒有按照 linux kernel 的規(guī)范以 Drm 的框架去實現(xiàn),所以它無法被 linux mainline 接受,還有一個更重要的部分,usersapce 部分,Arm 沒有開源,只是以庫的形式提供給購買了 mali GPU 授權(quán)的 SOC 廠商,比如 Rockchip,Amlogic。而且這套代碼主要是為 Android 系統(tǒng)設(shè)計的,對 Debian、Ubuntu 這種系統(tǒng)的兼容性也不好。

看到這里,也許你就想罵 Arm 了,其實也不能完全怪他們,因為這并不是 Arm 獨創(chuàng)的玩法,其他的 GPU 供應商也都這樣玩,比如 Nvidia、Vivante、Imagination。大神 Linus 為這事還對 Nvidia 豎過中指呢,怒吼:“Nvidia,F(xiàn)*K you!”

面對這種狀況,很多人為了能夠利用 GPU 加速,就只能使用 SOC 原廠提供的內(nèi)核,和他們定制的系統(tǒng),這種內(nèi)核和系統(tǒng)一般都比較老。

如果想跑 mainline 的內(nèi)核,基本就沒法使用 GPU 加速了,這也是為什么我們目前看到的大部分開發(fā)板如果搭載了 mainline 內(nèi)核,基本都不會有 GPU 加速功能,或者直接就不開圖形顯示功能。

但是也有一部分黑客們不滿于這種封鎖,他們勇于探索,積極嘗試,逆向了 Arm 發(fā)布的二進制庫,然后重寫了針對 Arm mali gpu 的開源驅(qū)動,最終在 Linux 5.2 發(fā)布的時候合并到了 mainline 中:針對 Mali-400/Mali-450 的驅(qū)動叫做 lima,針對 Mali-T6xx / Mali-T7xx / Mali-T8xx GPU 和  GXX 系列的叫做 panfrost。Usersacpe 部分的開源庫叫做 mesa,對 mali gpu 的支持從 mesa 19.2 開始。

這篇文章主要講如何在運行 mainline linux kernel 的 RK3399 開發(fā)板上開啟  GPU 加速:RK3399 集成了 Mali-T860 GPU,所以我們可以利用 linux kernel 的 Panfrost 驅(qū)動 + userspace 的 mesa 來解鎖 3D 圖形加速功能。

啟動 Panfrost GPU 驅(qū)動

  1. 在內(nèi)核里面啟用 Panfrost GPU 驅(qū)動

    默認編譯到內(nèi)核中或者以模塊的形式加載都可以。

    關(guān)于 mainline linux kernel 在 RK3399 上的適配可以參考:在 RK3399 上部署最新的 Linux 5.4 和 U-Boot v2020 .01 這篇文章。

    如果 Panfrost GPU 驅(qū)動正常加載,我們會看到類似下面的 Log:

    cat /proc/interrupts可以看到 Panfrost GPU 驅(qū)動注冊的中斷:

    gpu 和 job 都是 Panfrost GPU 驅(qū)動注冊的中斷。

    左邊的數(shù)字 112 和 2169 是當前產(chǎn)生的中斷的數(shù)量。

    這個比較重要,我們可以通過觀察是否有中斷產(chǎn)生來判斷 GPU 有沒有在工作。

  2. 安裝 weston

    weston 是負責對各種應用繪制的圖層進行合成的軟件框架,它是按照 Wayland 標準實現(xiàn)的,目標是替代在 Linux PC 端存在了很久的 X11,如果對 Android 圖形系統(tǒng)比較了解的話,它相當于 Android 中的 HWC。

    因為我在 RK3399 開發(fā)板上移植了 Debian 系統(tǒng),所以可以用 apt install 命令直接安裝,不用交叉編譯。

    apt install weston
  3. 安裝 Gnome

    Gnome 是 Linux 下一款大名鼎鼎的桌面環(huán)境,與 KDE 齊名,Ubuntu、Debian 、Fedora 等知名 Linux 發(fā)行版都以它為默認桌面。

    apt install gnome

    如果在安裝的過程中彈出了下面的選項,記得選 gdm3

  4. GDM 允許 root 登錄

    GDM 是 Gnome Display manager 的縮寫,提供 Gnome 環(huán)境下的登錄管理功能,默認禁止以 root 身份登錄,所以如果要想以 root 身份登錄桌面系統(tǒng),需要做如下修改:

    /etc/pam.d/gdm-password文件中屏蔽如下內(nèi)容:

    #auth   required       pam_succeed_if.so user != root quiet_success

    其實到這里,我們已經(jīng)可以在 RK3399 上使用 Debian 桌面系統(tǒng)了,但是你會發(fā)現(xiàn)并沒有那么流暢,因為 GPU 還沒有真正的使用起來,通過以下方法可以快速判斷 GPU 有沒有在工作:

    • cat /proc/interrupts查看 jpu 和 job 產(chǎn)生的中斷數(shù)量,如果 gpu 在工作,會頻繁產(chǎn)生中斷

    • 運行 top命令,觀察 cpu 利用率,如果 GPU 沒工作,所有的圖像渲染靠 CPU,CPU 占用率會高。

  5. 安裝依賴

    前面有講到,GPU 驅(qū)動分兩部分,一部分在內(nèi)核中,我們已經(jīng)啟動了,另外還有一個重要的部分在 userspace 中,對于 Panfrost GPU 驅(qū)動來說,它叫做 mesa。mesa 不能直接安裝,我們需要在 RK3399開發(fā)板上編譯。

    首先要安裝一些依賴庫:

    sudo apt install flex bison python3-mako libwayland-egl-backend-dev libxcb-dri3-dev libxcb-dri2-0-dev libxcb-glx0-dev libx11-xcb-dev libxcb-present-dev libxcb-sync-dev libxxf86vm-dev libxshmfence-dev libxrandr-dev libwayland-dev libxdamage-dev libxext-dev libxfixes-dev x11proto-dri2-dev x11proto-dri3-dev x11proto-present-dev x11proto-gl-dev x11proto-xf86vidmode-dev libexpat1-dev libudev-dev gettext  mesa-utils xutils-dev libpthread-stubs0-dev ninja-build bc python-pip flex bison cmake git valgrind llvm llvm-8-dev python3-pip  pkg-config zlib1g-dev wayland-protocols meson
  6. 編譯安裝 libdrm

    libdrm 是一個封裝了和 Linux Kernel DRM 驅(qū)動交互的 api 庫。

    git clone git://anongit.freedesktop.org/mesa/drm
    cd drm
    meson build --prefix=/usr
    ninja -C build
    sudo -E ninja -C build install
    cd ..
  7. 編譯安裝 mesa

    mesa 中實現(xiàn)了 Panfrost GPU 驅(qū)動的 userspace 部分,它向下操作內(nèi)核中的 GPU 驅(qū)動,向上提供標準的 opengl 接口供各種繪圖應用使用。

    git clone git://anongit.freedesktop.org/mesa/mesa
    cd mesa
    meson -Ddri-drivers= -Dvulkan-drivers= -Dgallium-drivers=panfrost,kmsro -Dlibunwind=false -Dprefix=/usr build/
    ninja -C build/
    sudo ninja -C build/ install
  8. 編譯安裝 SDL

    如果想運行一些模擬器之類的游戲,比如 supertuxkart 可能會用到這個庫。

    git clone https://github.com/SDL-mirror/SDL.git
    cd SDL
    mkdir build
    cd build
    cmake ../  
    make -j6
    sudo make install

到這里所有 GPU 相關(guān)的軟件都安裝完了,重啟系統(tǒng),登錄圖形桌面,就可以把 GPU 用起來了。

運行  Glmark2 測試

Glmark2 是一款比較出名的 GPU benchmark 測試程序,支持 OpenGL 2.0 和 OpenGL ES 2.0。在 Ubuntu 系統(tǒng)上可以直接通過 apt install命令安裝,在 Debian 系統(tǒng)上需要通過源碼編譯:

apt install libjpeg62-turbo-dev libpng-dev
 git clone https://github.com/glmark2/glmark2.git
 cd glmark2/
 ./waf configure --with-flavors=drm-gl,drm-glesv2,wayland-gl,wayland-glesv2
 ./waf
 ./waf install

運行 glmark2-es-wayland命令即可進行測試。

下面是我在 RK3399 Leez P710 開發(fā)板上測試的錄屏,可能會感覺不夠流暢,這是因為這個錄屏軟件是靠 CPU 進行軟編碼,嚴重拖累了整個系統(tǒng)的性能。

參考資料

《MaliGraphics》https://wiki./MaliGraphics

《ARM Mali GPU》https://en./ARM_Mali_GPU

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多