OpenharmonyOS+RK3568,【編譯燒錄】

請添加圖片描述

文章目錄

  • 1. 摘要 ?
  • 2. 代碼下載 📩
  • 3. 編譯 🖥?
  • 4. 修改&適配 ??
    • 4.1 編譯框架基本概念
    • 4.2 vendor & device 目錄
    • 4.3 內核編譯
      • 4.3.1 如何修改、適配自己的開發板?
    • 4.4 修改外設驅動
  • 5. 燒錄&驗證 📋
  • 參考


1. 摘要 ?

本篇主要記錄如何編譯OpenHarmony 4.1 版本,并且在RK3568上燒錄、運行的過程。
其中,涉及到一些解決問題的思路和學習筆記,如果對你有幫助請點贊、轉發、收藏,也非常歡迎各位小伙伴評論,交流。😊💐👍👍👍


2. 代碼下載 📩

請參考官方文檔【1】
注意:版本要下載正確[OpenHarmony-v4.1-Release]

repo init -u git@gitee.com:openharmony/manifest.git -b OpenHarmony-v4.1-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

3. 編譯 🖥?

關于編譯,可能遇到的問題會比較多,不過也不要擔心,只要嚴格按照文檔中的步驟進行操作,安裝必須的依賴,就不會有問題。

參考【2】。

建議使用安裝Ubuntu的虛擬機或者Ubuntu主機,博主使用WSL2編譯遇到各種問題,解決花費了大量時間,得不償失

最重要的不步驟是安裝庫和工具集:
? 使用如下apt-get命令安裝后續操作所需的庫和工具:

sudo apt-get update; sudo apt-get install binutils; sudo apt-get install binutils-dev; sudo apt-get install git; sudo apt-get install git-lfs; sudo apt-get install gnupg; sudo apt-get install flex; sudo apt-get install bison; sudo apt-get install gperf; sudo apt-get install build-essential; sudo apt-get install zip; sudo apt-get install curl; sudo apt-get install zlib1g-dev; sudo apt-get install gcc-multilib; sudo apt-get install g++-multilib; sudo apt-get install gcc-arm-linux-gnueabi; sudo apt-get install libc6-dev-i386; sudo apt-get install libc6-dev-amd64; sudo apt-get install lib32ncurses5-dev; sudo apt-get install x11proto-core-dev; sudo apt-get install libx11-dev; sudo apt-get install lib32z1-dev; sudo apt-get install ccache; sudo apt-get install libgl1-mesa-dev; sudo apt-get install libxml2-utils; sudo apt-get install xsltproc; sudo apt-get install unzip; sudo apt-get install m4; sudo apt-get install bc; sudo apt-get install gnutls-bin; sudo apt-get install python3.9; sudo apt-get install python3-pip; sudo apt-get install ruby; sudo apt-get install genext2fs; sudo apt-get install device-tree-compilersudo apt-get install make; sudo apt-get install libffi-dev; sudo apt-get install e2fsprogs; sudo apt-get install pkg-config; sudo apt-get install perl; sudo apt-get install openssl; sudo apt-get install libssl-dev; sudo apt-get install libelf-dev; sudo apt-get install libdwarf-dev; sudo apt-get install u-boot-tools; sudo apt-get install mtd-utils; sudo apt-get install cpio; sudo apt-get install doxygen; sudo apt-get install liblz4-tool; sudo apt-get install openjdk-8-jre; sudo apt-get install gcc; sudo apt-get install g++; sudo apt-get install texinfo; sudo apt-get install dosfstools; sudo apt-get install mtools; sudo apt-get install default-jre; sudo apt-get install default-jdk; sudo apt-get install libncurses5; sudo apt-get install apt-utils; sudo apt-get install wget; sudo apt-get install scons; sudo apt-get install python3.9-distutils; sudo apt-get install tar; sudo apt-get install rsync; sudo apt-get install git-core; sudo apt-get install libxml2-dev; sudo apt-get install lib32z-dev; sudo apt-get install grsync; sudo apt-get install xxd; sudo apt-get install libglib2.0-dev; sudo apt-get install libpixman-1-dev; sudo apt-get install kmod; sudo apt-get install jfsutils; sudo apt-get install reiserfsprogs; sudo apt-get install xfsprogs; sudo apt-get install squashfs-tools; sudo apt-get install pcmciautils; sudo apt-get install quota; sudo apt-get install ppp; sudo apt-get install libtinfo-dev; sudo apt-get install libtinfo5; sudo apt-get install libncurses5-dev; sudo apt-get install libncursesw5; sudo apt-get install libstdc++6; sudo apt-get install gcc-arm-none-eabi; sudo apt-get install vim; sudo apt-get install ssh; sudo apt-get install locales; sudo apt-get install libxinerama-dev; sudo apt-get install libxcursor-dev; sudo apt-get install libxrandr-dev; sudo apt-get install libxi-dev

? 將Python 3.8設置為默認Python版本。
查看Python 3.8的位置:

which python3.8

如果無輸出請在環境中安裝python3.8或以上版本,以下安裝命令可作為python3安裝的參考:

sudo apt-get install python3
sudo apt-get install python-is-python3

查詢python是否可用符合版本要求

python --version

如果輸出高于3.8,則版本符合要求,若低于3.8可用以下方式安裝Python3.8:

cd
mkdir python_install     #新建路徑,存儲python的安裝包
cd python_installwget https://mirrors.huaweicloud.com/python/3.8.10/Python-3.8.10.tgz    #從官網獲取Python3.8安裝包,此處以3.8.10版本為例
tar -xzf Python-3.8.10.tgz 
cd Python-3.8.10./configure --enable-optimizations --prefix=/usr/local/python3.8    #編譯和安裝python3.8
make -j$(nproc)
sudo make install/usr/local/python3.8/bin/python3.8 --version    #確認python3.8是否安裝成功sudo update-alternatives --install /usr/bin/python python /usr/local/python3.8/bin/python3.8 1     #將Python和Python3切換為Python 3.8:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/python3.8/bin/python3.8 1

環境依賴安裝、配置好后,OpenHarmony倉也有編譯前置依賴,直接執行腳本即可:

bash build/prebuilts_download.sh

然后,再安裝編譯工具hb:
? 在源碼根目錄運行如下命令安裝hb并更新至最新版本。

python3 -m pip install --user build/hb

? 設置環境變量。

vim ~/.bashrc

將以下命令拷貝到.bashrc文件的最后一行,保存并退出。

export PATH=~/.local/bin:$PATH

執行如下命令更新環境變量。

source ~/.bashrc

? 在源碼目錄執行"hb help",界面打印以下信息即表示安裝成功。
在這里插入圖片描述


最后,參考【3】,編譯源碼:

/build.sh --product-name rk3568 --ccache

經過幾個小時的編譯,可以看到,終端提示編譯成功。
在這里插入圖片描述


查看,編譯后的鏡像:
在這里插入圖片描述


在這里插入圖片描述


固件說明
boot_linux.img這是包含 Linux 內核的鏡像文件,負責啟動 Openharmony 系統的核心功能
chip_ckm.img
chip_prod.img該鏡像文件用于芯片制造商在芯片生產過程中燒錄到芯片中的系統鏡像
config.cfg燒寫工具的配置文件,可以直接導入燒寫工具顯示需要燒寫的選項
eng_system.img這是用于工程調試和測試的系統鏡像文件,包含了額外的調試工具和功能
MiniLoaderAll.bin這是一個引導加載程序,負責啟動 Openharmony 系統的初始化過程
parameter.txt包含分區信息
ramdisk.img該鏡像文件包含一個臨時文件系統,用于在系統啟動過程中提供臨時存儲 和加載所需的文件
resource.img該鏡像文件包含 Openharmony 系統所需的資源文件,如字體,圖標,音 頻等。
sys_prod.img這是用于生產環境的系統鏡像文件,用于制造商在設備生產過程中燒錄到 設備中。
system.img這是 Openharmony 系統的主要鏡像文件,包含了操作系統的核心組件, 庫和應用程序
uboot.img這是 U-boot 引導加載程序的鏡像文件,用于初始化硬件設備和加載操作 系統
updater.img這是用于系統升級的鏡像文件,包含了系統更新時所需的文件和信息
userdata.img該鏡像文件包含用戶的數據和設置,如應用程序數據,用戶配置等
vendor.img該鏡像文件包含設備供應商提供的特定驅動程序,庫和配置文件

在這里插入圖片描述


進行到這一步,說明編譯環境,編譯依賴都沒問題。

那想要讓OpenHarmony在我們的板子上跑起來,還需要修改一下內核配置、外設驅動等,下面我們繼續。


4. 修改&適配 ??

4.1 編譯框架基本概念

OpenHarmony 的編譯框架是基于模塊化的,從大到小依次劃分為產品,子系統集(領域), 子系統,部件,模塊,特性。這種模塊化的樹狀編譯框架,非常方便根據目標產品硬件資源 的大小進行靈活的裁剪,從而實現“統一 OS,彈性部署”的目標。
在這里插入圖片描述
? 產品:產品是基于解決方案為開發板的完整產品,主要包含產品對 OS 的適配、部件拼裝 配置、啟動配置和文件系統配置等。build.sh 編譯的時候通過–product-name 編譯選項指 定;hb 編譯的時候通過 hb set 進行設置。

? 子系統集:OpenHarmony 技術架構中有四大子系統集:“系統基本能力子系統集”、“基 礎軟件服務子系統集”、“增強軟件服務子系統集”、“硬件服務子系統集” 。四大子 系統不會直接出現在編譯選項或者參數中,而是有對應的一級源代碼文件夾:“系統基本 能力子系統集”對應源碼 foundation 文件夾;“基礎軟件服務子系統集”和“硬件服務子 系統集”對應源碼 base 文件夾;“增強軟件服務子系統集”對應源碼 domains 文件夾。

? 子系統:子系統是一個邏輯概念,它具體由對應的部件構成。在多設備部署場景下,支持 根據實際需求裁剪某些非必要的子系統或部件。

? 部件:對子系統的進一步拆分,可復用的軟件單元,它包含源碼、配置文件、資源文件和 編譯腳本;能獨立構建,以二進制方式集成,具備獨立驗證能力的二進制單元。

? 模塊:模塊就是編譯子系統的一個編譯目標,部件也可以是編譯目標。

? 特性:特性是部件用于體現不同產品之間的差異。

各部分間的關系:
一個產品(product)可以包含 n 個子系統(subsystem),一個子系統可以包含 n 個部件 (component),一個部件只能屬于一個子系統。一個部件可以包含 n 個模塊(module),一個模塊 只能屬于一個部件。 不同產品中的相同部件可以通過特性(feature)進行差異化定義 ,子系統集(domain)在源 碼一級根目錄有體現。
如下圖所示:
在這里插入圖片描述
總結一下就是:

  • 子系統是某個路徑下所有部件的集合,一個部件只能屬于一個子系統。
  • 部件是模塊的集合,一個模塊只能歸屬于一個部件。
  • 通過產品配置文件配置一個產品包含的部件列表,部件不同的產品配置可以復用。
  • 部件可以在不同的產品中實現有差異,通過變體或者特性feature實現。
  • 模塊就是編譯子系統的一個編譯目標,部件也可以是編譯目標。

關于編譯,后面我們單獨開個專題講


4.2 vendor & device 目錄

在編譯的時候,輸入編譯命令,如下所示:

/build.sh --product-name rk3568 --ccache

從編譯日志中,重點要了解和學習的目錄為 vendor 和 device 目錄。

vendor/hihope/rk3568
......
device/board/rockchip/rk3568

endor 目錄是以 vendor/{產品解決方案廠商}/{產品名稱}來存放的。 進入 vendor/hihope/rk3568 目錄下,有三個很重要的文件。 產品解決方案,在 config.json 文件中進行配置。

ohos.build 文件是子系統的配置文件,每個子系統有 ohos.build 配置文件,該文件中有添 加的組件配置。

device/board/hihope/rk3568/device.gni

device/board/hihope/rk3568/config.gni config.gni 文件配置開發板相關的編譯配置。


4.3 內核編譯

linux 內核編譯腳本的是放在 device/board/hihope/rk3568/kernel 目錄下的build_kernel.sh文件。

OpenHarmony 編譯腳本是通過打補丁的方式來適配不同的平臺, 不同的平臺有自己的內核補丁。
注意,理解這一點很重要

編譯腳本會先把 kernel/linux/linux-5.10 拷貝到 out/kernel/src_tmp/linux-5.10/, 然后打上 3568 的內核補丁patch -p1 < kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch后編譯生成自 己的鏡像,然后編譯內核鏡像。


4.3.1 如何修改、適配自己的開發板?

? 首先進入內核基礎目錄 kernel/linux/linux-5.10 打上 kernel.patch,這樣我們就有了一個完 整的內核代碼;
? 進入 kernel/linux/linux-5.10/arch/arm64/boot/dts/rockchip 目錄,加入自己的板級 dts 和 相關 dtsi 配置;
? 修改后生成新的內核補丁 kernel.patch,新的 kernel.patch 替換掉 kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch;
經過上述步驟,這樣完全編譯出的鏡像就支持自己的板子了。


4.4 修改外設驅動

TBD.


5. 燒錄&驗證 📋

我們使用RKDevTool工具燒寫鏡像:
在這里插入圖片描述


在這里插入圖片描述
右鍵,導入配置,然后點擊執行。


參考

【1】OpenHarmony/docs/sourcecode-acquire.md
【2】基于命令行開發,搭建開發環境
【3】編譯構建指導

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81984.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81984.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習模型優化:如何讓數據科學更智能?

深度學習模型優化:如何讓數據科學更智能? 一、引言:為什么優化深度學習模型如此重要? 深度學習的應用已經滲透到數據科學的各個領域,從圖像識別到自然語言處理,從推薦系統到金融風控,每一個智能模型都依賴于數據驅動的訓練。然而,一個模型的性能不僅僅取決于其架構,…

學習Python的第二天之網絡爬蟲

30歲程序員學習Python的第二天之網絡爬蟲的信息提取 BeautifulSoup庫 地址&#xff1a;https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/ 1、BeautifulSoup4安裝 在windows系統下通過管理員權限運行cmd窗口 運行pip install beautifulsoup4 測試實例 import requests…

n8n 鍵盤快捷鍵和控制鍵

n8n 鍵盤快捷鍵和控制鍵 工作流控制鍵畫布操作移動畫布畫布縮放畫布上的節點操作選中一個或多個節點時的快捷鍵 節點面板操作節點面板分類操作 節點內部操作 n8n 為部分操作提供了鍵盤快捷鍵。 工作流控制鍵 Ctrl Alt n&#xff1a;創建新工作流Ctrl o&#xff1a;打開工作…

keil+vscode+騰訊ai助手

嵌入式軟件開發 這個是之前一直想寫的開發方式&#xff0c;不過上份工作一直在忙&#xff0c;沒有抽出時間花在上面&#xff0c;現在空下來好好寫一寫吧&#xff01;標題軟件安裝 關于VSCode以及Keil的安裝可以在以下鏈接中點擊瀏覽 VSCode安裝 Keil5安裝 CubeMx安裝 插件下…

Unity教程(二十三)技能系統 投劍技能(上)基礎實現

Unity開發2D類銀河惡魔城游戲學習筆記 Unity教程&#xff08;零&#xff09;Unity和VS的使用相關內容 Unity教程&#xff08;一&#xff09;開始學習狀態機 Unity教程&#xff08;二&#xff09;角色移動的實現 Unity教程&#xff08;三&#xff09;角色跳躍的實現 Unity教程&…

Oracle01-入門

零、文章目錄 Oracle01-入門 1、Oracle簡介 &#xff08;1&#xff09;數據庫基礎 數據庫基礎請參考&#xff1a;https://blog.csdn.net/liyou123456789/article/details/131207068 &#xff08;2&#xff09;Oracle是什么 ORACLE 數據庫系統是美國 ORACLE 公司&#xff…

springboot集成mybatis-plus詳細使用

以下是 Spring Boot 集成 MyBatis-Plus 的詳細步驟&#xff1a; 創建 Spring Boot 項目 可使用 Spring Initializr 快速創建項目&#xff0c;添加相關依賴。 引入依賴 在項目 pom.xml 文件中添加以下依賴&#xff1a; <!-- MyBatis-Plus 啟動依賴 --> <dependenc…

【wsl】命令說明,wsl的虛擬機ubuntu十分好用

wsl官方說明地址 wsl虛擬機安裝簡單方便&#xff0c;十分推薦。 安裝 在上方的官網鏈接有安裝辦法和各種操作指南&#xff0c;在此不再贅述。 安裝wsl后從微軟商店搜索ubuntu點擊后就能直接安裝虛擬機鏡像&#xff0c;多快好省。 wsl命令 閱讀官網文檔時發現wsl十分強大 …

Open CASCADE學習|判斷一點與圓弧的位置關系

一、引言 在計算機輔助設計&#xff08;CAD&#xff09;、計算機圖形學以及機械制造等眾多領域中&#xff0c;經常需要處理幾何圖形之間的位置關系判斷問題。其中&#xff0c;判斷一個點與圓弧的位置關系是一個基礎且重要的任務。Open CASCADE 作為一個強大的開源幾何建模內核…

<論文>(字節跳動)使用大語言模型進行時間序列理解和推理

一、摘要 本文介紹2024年12月字節跳動牽頭發表的大模型論文《ChatTS: Aligning Time Series with LLMs via Synthetic Data for Enhanced Understanding and Reasoning》。論文提出了 ChatTS 模型&#xff0c;用合成數據提升對時間序列的理解和推理能力。作者在紐約出租車乘客數…

大數據應用開發和項目實戰-電商雙11美妝數據分析

數據初步了解 &#xff08;head出現&#xff0c;意味著只出現前5行&#xff0c;如果只出現后面幾行就是tail&#xff09; info shape describe 數據清洗 重復值處理 這個重復值是否去掉要看實際情況&#xff0c;比如說&#xff1a;昨天賣了5瓶七喜&#xff0c;今天賣了5瓶七…

Vi/Vim 編輯器詳細指南

Vi/Vim 編輯器詳細指南 簡介一、模式詳解1. 命令模式(Normal Mode)2. 插入模式(Insert Mode)3. 可視模式(Visual Mode)4. 命令行模式(Ex Mode)二、核心操作1. 保存與退出2. 導航與移動3. 編輯與文本操作4. 搜索與替換三、高級技巧1. 多文件與窗口操作2. 宏錄制3. 寄存器…

kotlin 01flow-StateFlow 完整教程

一 Android StateFlow 完整教程&#xff1a;從入門到實戰 StateFlow 是 Kotlin 協程庫中用于狀態管理的響應式流&#xff0c;特別適合在 Android 應用開發中管理 UI 狀態。本教程將帶全面了解 StateFlow 的使用方法。 1. StateFlow 基礎概念 1.1 什么是 StateFlow? StateF…

開發搭載OneNet平臺的物聯網數據收發APP的設計與實現

一、開發環境與工具準備 工具安裝 下載HBuilderX開發版(推薦使用開發版以避免插件兼容性問題)安裝Node.js和npm(用于依賴管理及打包)配置Android Studio(本地打包需集成離線SDK)項目初始化 創建uni-app項目,選擇“默認模板”或“空白模板”安裝必要的UI庫(如uView或Van…

HHsuite3 的 HHblits 和 HHsearch比較

HHblits 與 HHsearch 的核心區別及遠源同源檢測能力對比 一、核心功能與定位差異 特征HHblitsHHsearch核心目標快速迭代搜索,構建高質量多序列比對(MSA)和 Profile HMM,用于大規模序列聚類與初步同源篩選。高精度 Profile HMM-HMM 比對,用于深度同源檢測與結構 / 功能預測…

【從零開始學習RabbitMQ | 第二篇】生成交換機到MQ的可靠性保障

目錄 ?編輯前言 交換機 Direct交換機與Fanout交換機的差異 Topic交換機 Topic交換機相比Direct交換機的差異 生成我們的交換機&#xff0c;隊列&#xff0c;以及綁定關系 基于代碼去生成交換機和隊列 基于注解去聲明隊列和交換機 消息轉換器 消息隊列的高可靠性 發送…

LeetCode 熱題 100 22. 括號生成

LeetCode 熱題 100 | 22. 括號生成 大家好&#xff0c;今天我們來解決一道經典的算法題——括號生成。這道題在 LeetCode 上被標記為中等難度&#xff0c;要求生成所有可能的并且有效的括號組合。這是一道非常經典的回溯法題目&#xff0c;非常適合用來練習遞歸和回溯的技巧。…

TestStand API 簡介

TestStand API 簡介 在自動化測試領域&#xff0c;TestStand 憑借其靈活的架構和強大的功能&#xff0c;成為眾多開發者的首選工具。而 TestStand API&#xff08;Application Programming Interface&#xff0c;應用程序編程接口&#xff09;則是打開 TestStand 強大功能的 “…

如何修改 JAR 包中的源碼

如何修改 JAR 包中的源碼 前言一、準備工作二、將 JAR 當作 ZIP 打開并提取三、重寫 Java 類方法 A&#xff1a;直接替換已編譯的 .class方法 B&#xff1a;運行時類路徑優先加載 四、修改 MyBatis&#xff08;或其他&#xff09;XML 資源五、重新打包 JAR&#xff08;命令行&a…

存算一體架構下的新型AI加速范式:從Samsung HBM-PIM看近內存計算趨勢

引言&#xff1a;突破"內存墻"的物理革命 馮諾依曼架構的"存儲-計算分離"設計正面臨根本性挑戰——在GPT-4等萬億參數模型中&#xff0c;數據搬運能耗已達計算本身的200倍。存算一體&#xff08;Processing-In-Memory, PIM&#xff09;技術通過?在存儲介…