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

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

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

openEuler Embedded軟實時系統(tǒng)的特性說明

openEuler ? 來源:openEuler ? 作者:openEuler ? 2022-05-10 15:22 ? 次閱讀

本文主要介紹 openEuler Embedded 軟實時系統(tǒng)的特性說明,構(gòu)建方式和性能測試。

軟實時特性介紹

「實時性簡介」

實時的訴求通常是事件的響應(yīng)時間不能超過規(guī)定的期限,一個事件的最大響應(yīng)時間應(yīng)該是確定的、可以預(yù)測的。

「Preempt_RT 補丁簡介」

Preempt_RT 補丁(以下簡稱 RT 補?。┛芍苯哟蛟趦?nèi)核源碼上,并通過內(nèi)核配置選項 CONFIG_PREEMPT_RT=y 使能軟實時功能。RT 補丁實現(xiàn)的核心在于最小化內(nèi)核中不可搶占部分的代碼,從而使高優(yōu)先級任務(wù)就緒時能及時搶占低優(yōu)先級任務(wù),減少切換時延。除此之外,補丁通過多種降低時延的措施,對鎖、驅(qū)動等模塊也進(jìn)行了優(yōu)化。

openEuler Embedded 版本中可使用的 RT 補丁請參考:

  1. QEMU:
?
  1. patch-5.10.0-60.10.0-rt62.patch
  2. patch-5.10.0-60.10.0-rt62_openeuler_defconfig.patch
?
  1. raspberrypi
?
  1. 0000-raspberrypi-kernel.patch(樹莓派補?。?/li>
  2. 0001-add-preemptRT-patch.patch
  3. 0002-modifty-bcm2711_defconfig-for-rt-rpi-kernel.patch
?

「補丁獲取地址」

https://gitee.com/src-openeuler/kernel/blob/openEuler-22.03-LTS

「補丁關(guān)鍵功能舉例」

  1. 增加中斷程序的可搶占性(中斷線程化、軟中斷線程化)
  2. 增加臨界區(qū)的可搶占性(如自旋鎖)
  3. 增加關(guān)中斷代碼的可搶占性
  4. 解決優(yōu)先級反轉(zhuǎn)問題(優(yōu)先級繼承)

軟實時鏡像構(gòu)建指導(dǎo)

具體下載源碼和編譯流程建議參考容器環(huán)境下的快速構(gòu)建指導(dǎo):https://openeuler.gitee.io/yocto-meta-openeuler/yocto/quickbuild/container-build.html

「QEMU RT 鏡像構(gòu)建方式」

  • 步驟:

下載源碼 --> 修改 bb 文件打入 RT 補丁 --> 手動打開 CONFIG_PREEMPT_RT --> 編譯構(gòu)建

  • 更改 aarch64 鏡像內(nèi)核 bb 文件,使其構(gòu)建時自動打入 RT 補丁,示例:
cd /usr1/openeuler/src/yocto-meta-openeuler/meta-openeuler/recipes-kernel/linux/

sed -i '/0001-arm64-add-zImage/a    file://src-kernel-5.10/patch-5.10.0-60.10.0-rt62.patch \' linux-openeuler.bb

sed -i '/patch-5.10.0-60.10.0-rt62.patch/a    file://src-kernel-5.10/patch-5.10.0-60.10.0-rt62_openeuler_defconfig.patch \' linux-openeuler.bb

git diff 輸出示例:

diff --git a/meta-openeuler/recipes-kernel/linux/linux-openeuler.bb b/meta-openeuler/recipes-kernel/linux/linux-openeuler.bb
index 77d8717..5a4b2b8 100644
--- a/meta-openeuler/recipes-kernel/linux/linux-openeuler.bb
+++ b/meta-openeuler/recipes-kernel/linux/linux-openeuler.bb
@@ -11,6 +11,8 @@ SRC_URI = "file://kernel-5.10 
 # add patches only for aarch64
 SRC_URI_append_aarch64 += " 
     file://yocto-embedded-tools/patches/${ARCH}/0001-arm64-add-zImage-support-for-arm64.patch 
+    file://src-kernel-5.10/patch-5.10.0-60.10.0-rt62.patch 
+    file://src-kernel-5.10/patch-5.10.0-60.10.0-rt62_openeuler_defconfig.patch 
 "

 # add patches for OPENEULER_PLATFROM such as aarch64-pro
  • 打開 aarch64 鏡像 defconfig 中的 CONFIG_PREEMPT_RT,示例:
cd /usr1/openeuler/src/yocto-embedded-tools/config/arm64/

sed -i 's/CONFIG_PREEMPT=y/CONFIG_PREEMPT_RT=y/g' defconfig-kernel

git diff 輸出示例:

diff --git a/config/arm64/defconfig-kernel b/config/arm64/defconfig-kernel
index dece4f7..c4ef7ab 100644
--- a/config/arm64/defconfig-kernel
+++ b/config/arm64/defconfig-kernel
@@ -80,7 +80,7 @@ CONFIG_HIGH_RES_TIMERS=y

 # CONFIG_PREEMPT_NONE is not set
 # CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
+CONFIG_PREEMPT_RT=y
 CONFIG_PREEMPT_COUNT=y
 CONFIG_PREEMPTION=y
  • 編譯時選擇 aarch64-std 架構(gòu),示例:
cd /usr1/openeuler/src/yocto-meta-openeuler/scripts

source compile.sh aarch64-std /usr1/build /usr1/openeuler/gcc/openeuler_gcc_arm64le

bitbake openeuler-image
  • 構(gòu)建鏡像生成目錄:

    /usr1/build/output/

  • 二進(jìn)制介紹:

  1. Image-5.10.0:QEMU RT 內(nèi)核鏡像
  2. openeuler-image-qemu-aarch64-<時間戳>.rootfs.cpio.gz:QEMU 文件系統(tǒng)
  3. openeuler-glibc-x86-64-openeuler-image-aarch64-qemu-aarch64-toolchain-22.03.shSDK 工具鏈
  4. zImage:QEMU RT 內(nèi)核的壓縮鏡像

「樹莓派 RT 鏡像構(gòu)建方式」

  • 步驟:

下載源碼 --> 修改 bb 文件打入 RT 補?。ㄑa丁已自動打開 CONFIG_PREEMPT_RT) --> 編譯構(gòu)建

  • 更改 raspberrypi 鏡像內(nèi)核 bb 文件,使其構(gòu)建時自動打入 RT 補丁并打開 CONFIG_PREEMPT_RT,示例:
cd /usr1/openeuler/src/yocto-meta-openeuler/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/

sed -i '/0000-raspberrypi-kernel.patch/a    file://src-kernel-5.10/0001-add-preemptRT-patch.patch \' linux-openeuler.bbappend

sed -i '/0001-add-preemptRT-patch.patch/a    file://src-kernel-5.10/0002-modifty-bcm2711_defconfig-for-rt-rpi-kernel.patch \' linux-openeuler.bbappend

git diff 輸出示例:

diff --git a/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler.bbappend b/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler.bbappend
index ad6ebab..cf52b3d 100644
--- a/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler.bbappend
+++ b/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler.bbappend
@@ -1,5 +1,7 @@
 SRC_URI += "
     file://src-kernel-5.10/0000-raspberrypi-kernel.patch 
+    file://src-kernel-5.10/0001-add-preemptRT-patch.patch 
+    file://src-kernel-5.10/0002-modifty-bcm2711_defconfig-for-rt-rpi-kernel.patch 
 "
 OPENEULER_KERNEL_CONFIG = "${S}/arch/${ARCH}/configs/bcm2711_defconfig"
 do_configure_prepend() {
  • 編譯時選擇 raspberrypi4-64 架構(gòu),示例:
cd /usr1/openeuler/src/yocto-meta-openeuler/scripts

source compile.sh raspberrypi4-64 /usr1/build /usr1/openeuler/gcc/openeuler_gcc_arm64le

bitbake openeuler-image
  • 構(gòu)建鏡像生成目錄:

    /usr1/build/output/

  • 二進(jìn)制介紹:

  1. Image:樹莓派 RT 內(nèi)核鏡像
  2. openeuler-image-raspberrypi4-64-<時間戳>.rootfs.rpi-sdimg:樹莓派 RT 支持 SD 卡鏡像
  3. openeuler-glibc-x86-64-openeuler-image-cortexa72-raspberrypi4-64-toolchain-22.03.sh:SDK 工具鏈

樹莓派 4B 的具體使用方法后期會詳細(xì)介紹。

?

「說明」

  • 如果開發(fā)人員使用的內(nèi)核配置不是 RT 補丁中修改的 defconfig(QEMU:arch/arm64/configs/openeuler\_defconfig,樹莓派:arch/arm64/configs/bcm2711\_defconfig),則需要在自己的 defconfig 中開啟內(nèi)核配置選項CONFIG_PREEMPT_RT,例如上面 QEMU 構(gòu)建方式中的 yocto-embedded-tools/config/arm64/defconfig-kernel
  • openEuler Embedded 軟實時特性當(dāng)前僅支持 arm64 架構(gòu)
?

驗證環(huán)境的軟實時是否使能

  • 查看系統(tǒng)是否有 PREEMPT_RT 字樣:

輸入示例:

uname -a

輸出示例:

Linux openeuler 5.10.0-rt62-v8 #1 SMP PREEMPT_RT Fri Mar 25 0322 UTC 2022 aarch64 GNU/Linux

軟實時性能測試

「軟實時相關(guān)測試」

參考 RT-Tests 指導(dǎo)

https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/rt-tests

進(jìn)行軟實時相關(guān)測試,用例包括但不限于:

  1. cyclictest 時延性能測試
  2. pi_stress 優(yōu)先級繼承測試
  3. hackbench 負(fù)載構(gòu)造工具

下面以 cyclictest 時延性能測試為例進(jìn)行說明。

「cyclictest 時延性能測試」

  1. 準(zhǔn)備開發(fā)環(huán)境

安裝 SDK,準(zhǔn)備編譯環(huán)境,示例:

sh openeuler-glibc-x86_64-openeuler-image-aarch64-qemu-aarch64-toolchain-22.03.sh

. /path/to/sdk/environment-setup-aarch64-openeuler-linux
  1. 編譯用例
git clone https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git

cd rt-tests

git checkout stable/v1.0

make all
  1. 執(zhí)行用例

編譯完成后生成二進(jìn)制 cyclictest,傳入單板環(huán)境后可查看執(zhí)行 cyclictest 時可配置的參數(shù)

./cyclictest --help

cyclictest 有多種參數(shù)配置方法,用例具體的入?yún)⒃O(shè)計可參考 test-design

https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest/test-design

輸入示例:

./cyclictest -p 90 -m -i 100 -n -h 100 -l 10000000

輸出示例:

# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 2.32 1.99 1.58 1/95 311

T: 0 (  311) P:90 I:100 C:10000000 Min:      7 Act:    9 Avg:    8 Max:      16

即用例循環(huán) 1000 萬次后,平均時延為 8us,最壞時延為 16us(該數(shù)據(jù)僅為示例,具體以環(huán)境實測為準(zhǔn))。

?

「說明:」

如果樹莓派 4B 的空載情況下,平均時延較差(如超過 20us),可查看使用的樹莓派固件是否將 CPU 頻率配置為了節(jié)能模式,并根據(jù)需要將 CPU 頻率配置為最高運行頻率。如無 cpufreq 相關(guān)接口,則不涉及。

?

輸入示例:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

輸出示例:

powersave

如上結(jié)果表示 CPU 頻率為節(jié)能模式。

配置 CPU 最高運行頻率,輸入示例:

echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
審核編輯 :李倩

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

    關(guān)注

    7

    文章

    2725

    瀏覽量

    47610
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    649

    瀏覽量

    29310
  • openEuler
    +關(guān)注

    關(guān)注

    2

    文章

    319

    瀏覽量

    5922

原文標(biāo)題:openEuler Embedded 軟實時系統(tǒng)介紹

文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    回顧2024年度潤和軟件與openEuler的精彩瞬間

    openEuler生態(tài)系統(tǒng)蓬勃發(fā)展中扮演了關(guān)鍵角色。讓我們共同回顧2024年度潤和軟件與openEuler的精彩瞬間!
    的頭像 發(fā)表于 01-07 18:12 ?413次閱讀

    通動力亮相openEuler Summit 2024

    近日,主題為“以智能,致世界”的openEuler Summit 2024在北京隆重舉行。本次大會由開放原子開源基金會孵化及運營的 openEuler社區(qū)主辦,通動力等產(chǎn)業(yè)伙伴參與協(xié)辦。會上,
    的頭像 發(fā)表于 11-26 16:50 ?421次閱讀

    RK3588J成功適配“歐拉”系統(tǒng)!助力能源電力國產(chǎn)OS!

    系統(tǒng)、分布式總線等特性,以及必要的基礎(chǔ)設(shè)施,將諸多的運行時與Linux有機集成,共同為嵌入式系統(tǒng)提供高效、靈活、安全的解決方案。 圖 2open
    發(fā)表于 11-21 15:45

    通動力榮膺2024年度openEuler社區(qū)突出貢獻(xiàn)單位

    近日,主題為“以智能 致世界”的操作系統(tǒng)大會2024在北京中關(guān)村國際創(chuàng)新中心舉辦,大會由openEuler社區(qū)和全球計算聯(lián)盟主辦,通動力參與協(xié)辦。作為開放原子開源基金會白金捐贈人
    的頭像 發(fā)表于 11-20 11:50 ?419次閱讀

    華為亮相操作系統(tǒng)大會openEuler Summit 2024

    “以智能 致世界”為主題的操作系統(tǒng)大會 & openEuler Summit 2024 在北京中關(guān)村國際創(chuàng)新中心舉行。本次大會由 openEuler社區(qū)、全球計算聯(lián)盟主辦。華為公司戰(zhàn)略部部長蓋剛出席該活動并做大會致辭。
    的頭像 發(fā)表于 11-18 11:52 ?404次閱讀

    潤和軟件亮相操作系統(tǒng)大會openEuler Summit 2024

    近日,操作系統(tǒng)大會&openEuler Summit 2024在北京隆重舉辦。本次大會由openEuler社區(qū)和全球計算聯(lián)盟主辦,江蘇潤和軟件股份有限公司(以下簡稱“潤和軟件”)參與協(xié)辦。旨在匯聚全球產(chǎn)業(yè)發(fā)展力量,共同探討操作
    的頭像 發(fā)表于 11-17 09:08 ?498次閱讀

    潤和軟件參與openEuler社區(qū)操作系統(tǒng)安全主題技術(shù)交流

    Meetup,分享和交流openEuler社區(qū)在操作系統(tǒng)安全領(lǐng)域的最新進(jìn)展、安全特性和實踐案例。江蘇潤和軟件股份有限公司(以下簡稱“潤和軟件”)作為openEuler項目群黃金捐贈人受
    的頭像 發(fā)表于 11-13 16:14 ?450次閱讀

    第二屆openEuler生態(tài)大會圓滿結(jié)束

    近日,第二屆openEuler生態(tài)大會(中國·湖南)成功舉辦。大會以“根植openEuler共建開源生態(tài)”為主題,旨在響應(yīng)國家開源產(chǎn)業(yè)發(fā)展戰(zhàn)略,推動建設(shè)以openEuler為根技術(shù)的開源操作
    的頭像 發(fā)表于 10-31 16:02 ?298次閱讀

    國際參加openEuler 24.03 LTS版本發(fā)布會

    國產(chǎn)操作系統(tǒng)的發(fā)展再次迎來了重要里程碑,開放原子開源基金會openEuler社區(qū)在北京舉辦openEuler 24.03 LTS版本發(fā)布會。這場大會不僅是一個版本的發(fā)布儀式,更是一次技術(shù)革新的展示,一個社區(qū)成員共同參與的盛會。
    的頭像 發(fā)表于 10-10 11:23 ?545次閱讀

    飛凌嵌入式受邀參加openEuler Embedded Meetup(廣州站)

    9月12日下午,由openEuler社區(qū)主辦的openEuler Embedded Meetup(廣州站)在華南理工大學(xué)舉行,此次交流會旨在深入探討嵌入式技術(shù)的最新趨勢,加強產(chǎn)學(xué)研的交流與合作,吸引
    的頭像 發(fā)表于 09-13 09:45 ?818次閱讀
    飛凌嵌入式受邀參加<b class='flag-5'>openEuler</b> <b class='flag-5'>Embedded</b> Meetup(廣州站)

    openEuler 24.03 LTS Meetup:聚焦AI、嵌入式與分布式創(chuàng)新

    隨著OpenAtom openEuler(簡稱“openEuler”)24.03 LTS版本的發(fā)布,這一開源操作系統(tǒng)再次成為業(yè)界的焦點。為了進(jìn)一步推廣與宣傳新版本帶來的特性和技術(shù)進(jìn)展,
    的頭像 發(fā)表于 06-24 10:08 ?480次閱讀

    潤和軟件受邀參與openEuler 24.03 LTS發(fā)布

    發(fā)布會匯聚操作系統(tǒng)產(chǎn)業(yè)界頂尖力量,共探openEuler社區(qū)技術(shù)、生態(tài)、國際化發(fā)展,共建健康可持續(xù)發(fā)展的開源操作系統(tǒng)根社區(qū)。會上,openEuler首個AI原生開源操作
    的頭像 發(fā)表于 06-15 10:07 ?796次閱讀

    openEuler 24.03 LTS正式發(fā)布,首個AI原生開源操作系統(tǒng)

    日,openEuler委員會主席江大勇正式對外發(fā)布了openEuler首個AI原生開源操作系統(tǒng)——openEuler24.03LTS版本。openE
    的頭像 發(fā)表于 06-15 08:36 ?754次閱讀
    <b class='flag-5'>openEuler</b> 24.03 LTS正式發(fā)布,首個AI原生開源操作<b class='flag-5'>系統(tǒng)</b>

    實時級嵌入式系統(tǒng)半實物仿真測試平臺ETest

    產(chǎn)品簡介** ETest_RT是一款具有高實時性的嵌入式系統(tǒng)半實物仿真測試平臺(Embedded System Real Time Test Studio RT,簡稱:ETest_RT
    發(fā)表于 04-25 17:01

    超云信創(chuàng)服務(wù)器與openEuler開源操作系統(tǒng)完成互認(rèn)證

    日前,超云 C86 平臺服務(wù)器 R3215、R3216 成功完成了與 openEuler 開源操作系統(tǒng)的兼容性適配工作。測試結(jié)果表明:openEuler 22.03 LTS SP3 版本的開源
    的頭像 發(fā)表于 03-12 16:08 ?1353次閱讀
    超云信創(chuàng)服務(wù)器與<b class='flag-5'>openEuler</b>開源操作<b class='flag-5'>系統(tǒng)</b>完成互認(rèn)證