吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何添加樹莓派單板到編譯框架

OpenHarmony技術(shù)社區(qū) ? 來源:HarmonyOS技術(shù)社區(qū) ? 作者:HarmonyOS技術(shù)社區(qū) ? 2022-01-04 14:44 ? 次閱讀

之前在樹莓派 4b 上點亮了 OHOS3.0,不過內(nèi)核是用 tftp 拉取的,根文件系統(tǒng)掛在了 NFS 上,拔了網(wǎng)線就無法啟動。

當(dāng)然這么操作只是為了方便調(diào)試,而最終需要的是一個可以燒錄到 TF 卡上的 img 鏡像文件。

這就需要將所有調(diào)試好的內(nèi)容添加到 OHOS3.0 的編譯框架,本以為是很簡單的事情,好家伙,整了這么久,感覺添加編譯框架比移植本身更復(fù)雜。

于是我整理了添加樹莓派單板到編譯框架的內(nèi)容,希望對各位有所幫助,為大家避坑。

添加編譯配置文件和 gn

①添加 RPI4B.json

主要參考 hisilicon build 組件倉:

https://gitee.com/openharmony/device_hisilicon_build

添加一個 products 編譯組件,這個組件是在產(chǎn)品配置文件中指定的。比如:

productdefinecommonproductsRPI4B.json
其他部分參考 Hi3516,但是其中 2 條,指定單板組件路徑,并添加組件。如果刪除這兩條,將不能編譯內(nèi)核,只生成 OHOS 的文件系統(tǒng)。
.....
"product_build_path":"device/raspberrypi/build",
"parts":{
......
"raspberrypi_products:raspberrypi_products":{},
......
}

②添加ohos.build

接下來在 device 目錄下,新建一個 raspberrypi 編譯組件文件夾,并添加 ohos.build 文件。和前面產(chǎn)品配置文件中的設(shè)置對應(yīng)起來了。

device aspberrypiuildohos.build:

{
"subsystem":"raspberrypi_products",
"parts":{
"raspberrypi_products":{
"module_list":[
"http://device/raspberrypi/build:products_group"
]
}
}
}

新建 device aspberrypiuildBUILD.gn 當(dāng)然每個廠家不可能只有 1 個板子,如果有其他單板就在這里指定,比如樹莓派 2B、3B 等。

import("http://build/ohos.gni")

device_type="rpi4b"
group("products_group"){
deps+=[
"http://device/raspberrypi/rpi4b:rpi4b_group"
]
}

既然前面指定了 rpi4b 的編譯配置組件,那么就在 device aspberrypi 新建一個 rpi4b 的目錄,可以參考 hi3516dv300 build 組件:

https://gitee.com/openharmony/device_hisilicon_hi3516dv300

device aspberrypi pi4bBUILD.gn:

import("http://build/ohos.gni")

print("rpi4b_groupin")
group("rpi4b_group"){
deps=[
"build/rootfs:init_configs",
"http://kernel/linux/build:linux_kernel"
]
}

至此一個 rpi4b build 組件就添加到 OHOS3.0 的編譯框架了,之后相關(guān)內(nèi)容添加到這個文件夾下就可以了。

樹莓派內(nèi)核相關(guān)

接下來分析下目前移植了樹莓派 4B 的哪些內(nèi)容,如何將這些內(nèi)容編譯進 OHOS3.0。

①raspberrypi 內(nèi)核補丁文件

關(guān)于補丁可以參考 Patch 組件:

https://gitee.com/openharmony/kernel_linux_patches

可以得知內(nèi)核編譯由 kernel.mk 來執(zhí)行。

kernellinuxuildkernel.mk:

DEVICE_PATCH_DIR:=$(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}/$(DEVICE_NAME)_patch
DEVICE_PATCH_FILE:=$(DEVICE_PATCH_DIR)/$(DEVICE_NAME).patch
......
$(KERNEL_IMAGE_FILE):
$(hide)echo"buildkernel..."
$(hide)rm-rf$(KERNEL_SRC_TMP_PATH);mkdir-p$(KERNEL_SRC_TMP_PATH);cp-arfL$(KERNEL_SRC_PATH)/*$(KERNEL_SRC_TMP_PATH)/
$(hide)cd$(KERNEL_SRC_TMP_PATH)&&patch-p1

所以補丁文件需要放到正確的路徑下,以正確的名字命名就可以 patch 到內(nèi)核。

hdf.patch 補丁文件,現(xiàn)在還沒有移植 HDF 相關(guān)內(nèi)容,所以可以先使用 Hi3516 的 rpi4b.patch 補丁文件,使用樹莓派的官方鏡像:

https://github.com/raspberrypi/linux

kernellinuxpatcheslinux-5.10rpi4b_patchhdf.patch
kernellinuxpatcheslinux-5.10rpi4b_patchrpi4b.patch

②內(nèi)核編譯配置文件

kernellinuxconfiglinux-5.10archarmconfigsrpi4b_standard_defconfig

內(nèi)核配置文件目前已知的需要開啟下面內(nèi)容,但是肯定不止這些,以后會繼續(xù)更新:

~/ohos/kernel/linux/config/linux-5.10/arch/arm/configs/rpi4b_standard_defconfig
#####################################################################################
>Securityoptions
>(32768)LowaddressspaceforLSMtoprotectfromuserallocation

[*]NSASELinuxSupport#(選中)
[*]NSASELinuxbootparameter#(選中)
[]NSASELinuxruntimedisable
[*]NSASELinuxDevelopmentSupport
[*]NSASELinuxAVCStatistics
(1)NSASELinuxcheckreqprotdefaultvalue#(設(shè)置為1)
(9)NSASELinuxsidtabhashtablesize
(256)NSASELinuxSIDtocontextstringtranslationcachesize
Firstlegacy'majorLSM'tobeinitialized(SELinux)--->#(選中)SELinux
OrderedlistofenabledLSMs#(填入:"lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,bpf")
#####################################################################################
>DeviceDrivers
>Android
[*]AndroidDrivers#(開啟)
[*]AndroidBinderIPCDriver#(開啟)
#####################################################################################
>DeviceDrivers
>Soundcardsupport
<*>AdvancedLinuxSoundArchitecture#(選中,直接編進內(nèi)核)
<*>ALSAforSoCaudiosupport#(選中,直接編進內(nèi)核)
>DeviceDrivers
>Graphicssupport
<*>DirectRenderingManager(XFree864.1.0andhigherDRIsupport)#(選中,直接編進內(nèi)核)
<*>BroadcomV3D3.xandnewer#(選中,直接編進內(nèi)核)
<*>BroadcomVC4Graphics#(選中,這個依賴前面的聲卡設(shè)置,不然是無法編入內(nèi)核的)
#####################################################################################
>DeviceDrivers
>Inputdevicesupport
>Touchscreens
<*>RaspberryPi'sfirmwarebasetouchscreensupport#(選中,直接編進內(nèi)核)

驅(qū)動適配

①顯示配置

Pi4 的 GPU 是 VideoCore VI 支持 OpenGL ES 3.2,而 Pi3 的 GPU 是 VideoCore IV 支持 OpenGL ES 2.0。

VideoCore IV 驅(qū)動程序是 VC4,VideoCore VI 驅(qū)動程序的 V3D。內(nèi)核已經(jīng)提供驅(qū)動,參考 rpi4b_standard_defconfig 將驅(qū)動直接編入到內(nèi)核。

同時需要在 config.txt 中開啟設(shè)置:

dtoverlay=vc4-fkms-v3d

OHOS 中修改 weston 的配置文件,指定顯示驅(qū)動。

systemetcweston.ini:

[output]
name=card0

②觸摸配置

具體思路就是先查找設(shè)備號,根據(jù)設(shè)備號找到驅(qū)動程序。

ls-l/sys/dev/char/|grepinput#查看input下的觸摸設(shè)備的主次設(shè)備號
cat/sys/dev/char/13:64/device/uevent#然后輸入主次設(shè)備號,查看設(shè)備的驅(qū)動程序
PRODUCT=19/0/0/0
NAME="raspberrypi-ts"
PROP=2
EV=b
KEY=4000000000000
ABS=26080003
MODALIAS=input:b0019v0000p0000e0000-e0,1,3,k14A,ra0,1,2F,35,36,39,mlsfw

前面內(nèi)核配置的時候 rpi4b_standard_defconfig 中已經(jīng)將觸摸驅(qū)動編入內(nèi)核,所以后面不需要在 init 加載模塊了,修改下 eudev 的配置文件即可。

third_partyeudev ules.d ouchscreen.rules:

ATTRS{name}=="raspberrypi-ts",ENV{ID_INPUT}="1",ENV{ID_INPUT_TOUCHSCREEN}="1"
ATTRS{name}=="VSoCkeyboard",ENV{ID_INPUT}="1",ENV{ID_INPUT_KEYBOARD}="1"
DRIVERS=="hid-multitouch",ENV{ID_INPUT}="1",ENV{ID_INPUT_TOUCHSCREEN}="1"

制作鏡像文件

①修改內(nèi)核編譯腳本

正常情況下內(nèi)核是由 uboot 進行引導(dǎo)的,而且 OHOS 默認(rèn)生成 uImage。

但是樹莓派自帶 BootLoader,雖然可以先用樹莓派自帶的 BootLoader 啟動 uboot,再用 uboot 加載 uImage,但是這樣會比較麻煩,而且會增加啟動時間。不過目前 zImage 是寫死在 kernel.mk 中的,沒辦法改下編譯腳本。

kernellinuxuildkernel.mk 將 uImage 改為 zImage modules dtbs:

$(hide)$(KERNEL_MAKE)-C$(KERNEL_SRC_TMP_PATH)ARCH=$(KERNEL_ARCH)$(KERNEL_CROSS_COMPILE)-j64zImage

kernellinuxuilduild_kernel.sh:

-cp${2}/kernel/src_tmp/${8}/arch/arm/boot/uImage${3}/uImage
+cp${2}/kernel/src_tmp/${8}/arch/arm/boot/zImage${3}/zImage

kernellinuxuildBUILD.gn:

-outputs=["$root_build_dir/packages/phone/images/uImage"]
+outputs=["$root_build_dir/packages/phone/images/zImage"]

kernellinuxuildkernel_module_build.sh:

-LINUX_KERNEL_UIMAGE_FILE=${LINUX_KERNEL_OUT}/arch/arm/boot/uImage
+LINUX_KERNEL_UIMAGE_FILE=${LINUX_KERNEL_OUT}/arch/arm/boot/zImage

這里內(nèi)核編譯會依賴 product_path="vendor/product_company/product

company/product_name"下的 hdf.hcs 文件,得先新建一個應(yīng)付下,不然會報下面這個錯誤。

ninja:error:‘…/…/vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs’,neededby‘gen/drivers/adapter/uhdf2/hcs/hdf_default.hcb’,missingandnoknownruletomakeit
新建:vendor/raspberrypi/RPI4B/hdf_config/uhdf/hdf.hcs
root{
module="default";
}

②制作樹莓派 boot 目錄

對于鏡像燒錄,Hi3516 會將 uImage、system.img、vendor.img 等鏡像燒寫到 emmc,但是樹莓派使用 TF 卡啟動,所以需要對 TF 卡進行分區(qū),然后復(fù)制對應(yīng)的內(nèi)容到各個分區(qū)。

首先制作樹莓派 boot 目錄,這個用來目錄存放樹莓派設(shè)備樹、config.txt、cmdline.txt、內(nèi)核鏡像等信息。

寫一個簡單的 mkboot.py 腳本來實現(xiàn)這個功能,位置在碼倉 rpi4bdevice aspberrypiimagesmkboot.py 將會生成 boot.img。

為了方便燒錄,需要將 boot.img、system.img、updater.img、vendor.img、userdata.img 合并成一個 rpi4b.img。

還是寫一個簡單的腳本來處理這個步驟 rpi4bdevice aspberrypiimagesmkboot.py。

不過有個問題,主分區(qū)只支持 4 個,所以 updater.img 暫時先不合并了,這個問題等以后再來處理。

最后將會得到一個 rpi4b.img 的鏡像文件,將這個文件燒錄到 SD 卡就可以了。

Linux:可以使用 dd 命令。windows:使用Win32 Disk Imager工具燒錄即可。

到這里總算是跑通了一個完整的添加新單板的流程,只不過目前只適配了顯示和觸摸。接下來打算嘗試 HDF 或者 distributed 部分。

原文標(biāo)題:添加樹莓派4B到OHOS3.0編譯框架

文章出處:【微信公眾號:HarmonyOS技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210394
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    661

    瀏覽量

    33041
  • 樹莓派
    +關(guān)注

    關(guān)注

    117

    文章

    1710

    瀏覽量

    105877

原文標(biāo)題:添加樹莓派4B到OHOS3.0編譯框架

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    實用樹莓Linux編譯指南,打工人必備!

    不友好,有沒有好的解決辦法? 今天來分享一下我的私藏干貨——樹莓Linux編譯編譯好之后,開發(fā)板只需插到樹莓派上連接電腦就可以直接用了,
    的頭像 發(fā)表于 12-17 16:19 ?976次閱讀
    實用<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>Linux<b class='flag-5'>編譯</b>指南,打工人必備!

    樹莓的MATLAB Server編譯安裝與LED控制

    執(zhí)行對應(yīng)的任務(wù)。因此不必少些matlab提供的鏡像文件,在現(xiàn)有的樹莓linux系統(tǒng)編譯安裝matlabd即可。首先需要安裝樹莓的user
    發(fā)表于 11-29 14:24

    樹莓MCC118

    on Top),用于市場上最流行的單板計算機樹莓(Raspberry Pi)HAT是種附加板,帶有40W GPIO(通用輸入/輸出)連接器,符合Raspberry PiHAT規(guī)范。MCC 118 HAT
    發(fā)表于 01-21 09:22

    樹莓裝機教程

    樹莓裝機教程樹莓裝機教程樹莓裝機教程樹莓
    發(fā)表于 11-25 10:14 ?52次下載

    樹莓gpio應(yīng)用

    樹莓現(xiàn)在越來越火,網(wǎng)上樹莓的資料也越來越多。樹莓源自英國,國外嵌入式開源領(lǐng)域具有良好的分享
    發(fā)表于 11-09 15:10 ?4225次閱讀

    Fedora項目團隊宣布添加樹莓2和3的系統(tǒng)支持

    適配者早已經(jīng)注意Fedora 24中對樹莓的支持,不過當(dāng)時系統(tǒng)各個方面還不夠完善因此沒有正式發(fā)布。為了提升易用性我們還需要在很多細(xì)節(jié)方面進行調(diào)試和修改?!睆慕裉扉_始,樹莓
    發(fā)表于 04-02 14:44 ?252次閱讀

    樹莓是什么樹莓的簡單介紹

    要想玩轉(zhuǎn)樹莓,首先得知道樹莓是什么。在本節(jié)中,作者將帶領(lǐng)大家揭開樹莓的神秘面紗,了解
    發(fā)表于 05-15 18:09 ?30次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>是什么<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>的簡單介紹

    使用樹莓設(shè)計智能小車代碼上傳及編譯方法教程免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用樹莓設(shè)計智能小車代碼上傳及編譯方法教程免費下載
    發(fā)表于 06-24 08:00 ?19次下載

    2012年推出,樹莓單板電腦銷售量達(dá)三千萬臺

    近日,Raspberry Pi 基金會 CEO Eben Upton宣布,上周某個時候(應(yīng)該是周二),他們賣出了第三千萬個樹莓單板電腦 。
    的頭像 發(fā)表于 12-16 14:26 ?3489次閱讀

    貿(mào)澤現(xiàn)已開售運行速度遠(yuǎn)超前代產(chǎn)品的樹莓5單板計算機

    2023 年 11 月 2 日 – 新型電子元器件與工業(yè)自動化產(chǎn)品的全球授權(quán)代理商貿(mào)澤電子 (Mouser Electronics) 即日起開售Raspberry Pi的樹莓5單板計算機。在
    發(fā)表于 11-06 16:14 ?674次閱讀

    樹莓裝ubuntu和raspbian哪個更好

    樹莓(Raspberry Pi)是一款由英國樹莓基金會開發(fā)的單板計算機,廣泛應(yīng)用于教育、科研、物聯(lián)網(wǎng)等領(lǐng)域。
    的頭像 發(fā)表于 08-30 15:41 ?1638次閱讀

    樹莓的功能用途是什么

    樹莓(Raspberry Pi)是一款由英國樹莓基金會研發(fā)的信用卡大小的單板計算機,自2012年推出以來,已經(jīng)發(fā)展出多個型號和版本。
    的頭像 發(fā)表于 08-30 18:01 ?3097次閱讀

    樹莓gpio有什么用,樹莓gpio接口及編程方法

    一、樹莓GPIO的用途 樹莓(Raspberry Pi)是一款小巧、功能強大的單板計算機,廣泛應(yīng)用于編程教育、物聯(lián)網(wǎng)項目、家庭媒體中心等
    的頭像 發(fā)表于 10-22 18:09 ?1229次閱讀

    樹莓與其他單板計算機的比較

    在當(dāng)今的科技世界中,單板計算機(SBC)因其小巧、靈活和成本效益而成為教育、業(yè)余愛好者和專業(yè)開發(fā)者的熱門選擇。樹莓作為這一領(lǐng)域的先驅(qū),已經(jīng)推出了多個版本,但市場上還有其他競爭對手,如
    的頭像 發(fā)表于 11-11 11:18 ?929次閱讀

    干貨來嘍!實用樹莓Linux編譯指南

    不友好,有沒有好的解決辦法? 今天來分享一下我的私藏干貨——樹莓Linux編譯。編譯好之后,開發(fā)板只需插到樹莓派上連接電腦就可以直接用了,
    的頭像 發(fā)表于 12-18 16:31 ?205次閱讀
    干貨來嘍!實用<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>Linux<b class='flag-5'>編譯</b>指南
    百家乐孖宝揽| 百家乐官网如何计算| 中国百家乐官网的玩法技巧和规则| 赌场百家乐的玩法技巧和规则| 鹿泉市| 温州百家乐真人网| 网上百家乐| 试玩百家乐官网帐| 顶级赌场手机版官方| 在线玩百家乐官网的玩法技巧和规则| 大发888博彩网站| 网上百家乐官网返水| 百家乐什么方法容易赢| 欢乐博百家乐官网娱乐城| 百盛百家乐软件| 足球百家乐官网投注计算| 盐亭县| 百家乐三国| 百家乐tt娱乐平台| 百家乐官网庄闲和概率| 回力百家乐的玩法技巧和规则 | 百家乐官网的方法和公式| 百家乐保单机作弊| 百家乐官网五子棋| 大发888游戏平台hgx2dafa888gw| 百家乐官网赌博博彩赌博网| 大发888全部的网站地址| 罗马百家乐官网的玩法技巧和规则 | 大发888代理平台| 百家乐投注科学公式| 百家乐官网封号| 豪门国际| 威尼斯人娱乐城信誉怎么样| 百家乐官网平预测软件| 钱百家乐官网取胜三步曲| 炸金花棋牌游戏| E世博百家乐娱乐城| 百家乐官网5式直缆打法| 大赢家娱乐| 北京太阳城医院怎么样| 百家乐官网分析软件骗人|