時間過得真快,從2010年在開源社區上開始搞圖形驅動,整整過去了12年之久,開源圖形驅動的架構并沒有特別大的變化,唯一的一大變化就是我在2016年從一家美國公司(AMD)加入到了華為,真正可以為國人作業系統貢獻一些自己的綿薄之力,
圖形之于我即是一日三餐一般,從07年參加作業到現在,并未間斷,是興趣索然,從底層GPU硬體、圖形驅動、作業系統、Benchmark以及游戲等3D大型應用,都留過自己的印記,但是真正夠得上挑戰的還是圖形驅動,因為它需要很深的軟硬體基礎:它需要你懂GPU的作業原理、需要懂作業系統、編譯原理、基本編程語言(C)、需要圖形2D/3D編程語言(OpenGL、Vulkan、Xlib等)、需要你懂得設計benchmark、需要你做工具、需要你做性能分析,而這些都僅僅是入門的東西,還需要你啃無數的datasheet、register檔案,進入痛苦的代碼除錯,
但是當你看到顯示幕被點亮的一瞬間,或者是glxgears這樣的3D簡單demo運行起來,或者是性能通過ISA優化得到翻倍的時候,一切都覺得很神奇,因為這就是圖形所帶給你的“所見即所得”的快樂,
過去在AMD曾經作業的近9個年頭,曾經有幸和Alex Deucher(開源圖形驅動的頂級牛人)共同學習和作業長達7-8年,這個美國人教會了我很多圖形的知識,同時也無私地帶領我進入到這片未知領域,非常感謝他,至少,在國內,還沒有這樣的人長時間從事圖形驅動的開發,確切講,是沒有機會從事,
歷史的東西,我們不再贅述,讓我們回到2022年的1月3日,新的一年我決定要做一件事情,一件融合我過去和未來的大事件,
OpenHarmony,一個基于全場景萬物互聯的智能終端作業系統(OpenHarmony官網)應運而生,至于它的歷史和當前狀態在這里不做贅述,大家可以點擊上面的鏈接去查看,
在最新的3.1 Beta版本,更新了很多圖形的patch,尤其是RenderService的匯入,會讓OpenHarmony在富設備的表現上一個新的臺階,但是這樣強大的開源作業系統,卻有一個巨大的隱患,就是圖形驅動的支持,我在上周南京參加了潤和組織的Dev-Board會議,在會上我看到了很多這樣的會面:
非常刺眼的幾個大字“無法使用GPU渲染加速”,目前在諸多芯片和開發板上都是存在的,比如樹莓派3B、STM32MP1等,即使是當前已經支持閉源驅動的板子(如RK3568),閉源驅動支持也都還不進入人意,且速度非常緩慢,這件事情,我在過去AMD的日子里是經歷過的,AMD曾經有兩套驅動(開源&閉源),公司內部也曾經就是否提供開源驅動也爭論過,但是最侄訓是選擇了開放,當從今天往回看的時候,可以看到這是一個非常聰明的決定,因為它帶動了整個A卡的普及,
而反觀我們當前的現狀,在移動終端,圖形驅動別說開源,就是檔案也了了,而OpenHarmony這樣一個開源圖形作業系統,怎能沒有開源圖形驅動的支持?!
我和社區Leo討論過幾次,最終決定出手做這個事情,這件事情的意義和價值留給后人去評判,讓我們回歸技術,
首先,開源Linux圖形驅動架構如下:

這個圖是以AMD的Radeon驅動為基礎而畫,可以簡單的把這個圖分成2D和3D兩個部分,2D的部分是通過Xserver接受X的API繪制指令,然后通過DDX的Radeon驅動并呼叫到libdrm,然后再通過IOCTL訪問到kernel的驅動,并執行;而3D的部分主要是通過Mesa,把OpenGL/Vulkan指令進行翻譯(類似高級語言->低級語言的轉換),然后通過IOCTL呼叫到Kernel的驅動,
而當年,我曾經干了一件可以吹一輩子的事兒,就是把Linux的圖形驅動移植到了WinCE上,這是我當時的架構圖:

這個動作耗費我將近2年的時間,但是學到了無數的圖形領域的知識,
其實,這一套開源圖形驅動框架到今天改動也非常少,其中雖然做過一些用戶態和內核態驅動的調整,但是最終趨于穩定,而對于移動終端(我們以手機為例),當前主要的GPU廠商主要是ARM、Qualcomm、Apple、Nvidia等廠商,無一例外的是這些廠商目前都是閉源的圖形驅動,就這件事情,Linxu Torvalds曾經在一次視頻中嚴重鄙視了一把Nvidia:

我們今年先說說Mali,Mali GPU在業界的影響力可以說是巨大的,雖然它的GPU一直都比較挫,但是無奈可選擇的余地太小,但即使如此,它的GPU驅動居然這么多年,依然還是閉源,雖然說kernel層是開源的,但是真正有價值的user層的驅動卻是不開源,我其實想做一樣的Torvalds的手勢,
但是,沒關系,這個世界上從來不缺少救世主,在2021年的9月份,一份訊息轟動了業界:

Mesa Panfrost已經通過了Mali G52的OpenGL ES Khronos的兼容性測驗,并且Panfrost已經可以成為商用的驅動了,這個訊息無疑是振奮的,另外Alyssa也獲得了自由軟體基金會 2021 年杰出新自由軟體貢獻者獎(Outstanding New Free Software Contributor):

關于Alyssa,我后面還會寫一些文章來介紹,
而重點搞定OpenHarmony上的開源圖形驅動,有幾個動作需要去做,第一個就是kernel,當前OH上一個好訊息是大家已經都開始使用最新的5.10的kernel,所以,通過make ARCH=arm64 menuconfig可以配置kernel driver:

然后交叉編譯kernel,make ARCH=arm64 CROSS_COMPILE=“aarch64-linux-gnu-”,得到kernel驅動panfrost.ko:

下一步是mesa,我們checkout到21.3的分支:

安裝一系列的安裝包后,執行命令:meson . build/ -Ddri-drivers= -Dvulkan-drivers= -Dgallium-drivers=panfrost -Dllvm=disabled,編譯結果:

得到panfrost_dri.so,
當然有了這個ko和so,下一步就是把對應的kernel替換掉原來開發板里面的老的內核,我們后面文章待續…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/403966.html
標籤:其他
上一篇:精講Linux-行程信號
下一篇:【初階】帶你看懂二叉樹(附圖解)
