色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

X86 ubuntu環境下xenomai內核編譯

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2022-04-19 14:58 ? 次閱讀

最近接觸實時系統Xenomai,該文章整理記錄X86 ubuntu環境下xenomai 內核編譯、xenomai應用環境搭建步驟,其他硬件架構(如arm、arm64)類似,先在X86上安裝好環境才能更好的開發驗證xenomai程序吧,更多信息見文末參考鏈接,希望對你有所幫助。

一、概要

xenomai是眾多inux實時性解決方案中的一種,通過在linux的基礎上添加一個RTOS內核cobalt,來提高linux的實時性。實時內核cobalt與非實時內核linux相結合,既能提供工業級RTOS的硬實時性能,又能利用linux操作系統非常出色的網絡和圖形界面服務,在產品的開發周期和成本控制方面都有巨大優勢,結構如下:

ac486bf4-bf93-11ec-9e50-dac502259ad0.png

主要有3部分,xenomai的移植構建也是圍繞這三部分來進行:

  1. 用戶空間中的實時應用程序庫libcobalt;

  2. 內核空間中的實時內核Cobalt;

  3. 硬件架構與Linux內核版本相關層 ipipe-core或dovetail。

libcobalt和Cobalt的源碼隨xenomai更新,位于同一源碼包內,ipipe-core和dovetail則與硬件架構和具體linux版本相關,以補丁的方式提供,需要單獨下載

由于一些ipipe維護困難的關系,從linux5.4以上版本不再提供ipipe,ipipe由dovetail替代。

所以如果你的linux內核版本在5.4以上版本的話需要使用dovetail。

總的來說,ipipe-core和dovetail實現必要功能的同時,也是xenomai與硬件架構、linux版本間的解耦層,社區提供了常見架構下各linux版本的補丁。xenomai的移植步驟如下:

  1. 準備好ipip-core或dovetail補丁,對linux5.4以下版本使用ipipe-core,linux5.4以上版本需要dovetail替代。

  2. 打cobalt內核補丁,編譯構建內核。

  3. libcobalt庫編譯安裝,設置環境變量。

步驟1中的源碼文件也可直接從xenomai維護分支直接拉取,直接對拉取的代碼進行步驟2、3即可。

  • ipip-core:

ARM:https://xenomai.org/gitlab/ipipe-arm

ARM64:https://xenomai.org/gitlab/ipipe-arm64

PPC32:https://xenomai.org/gitlab/ipipe-ppc32

x86:https://xenomai.org/gitlab/ipipe-x86

  • dovetail:

https://source.denx.de/Xenomai/linux-dovetail

可以看到dovetail已經不區分ARM、X86了,dovetail區別與ipipe,ipipe是與linux中斷管理分離,linux中斷管理在其之上,ipipe部分需要大量直接對接arch部分的代碼,這樣主線內核代碼的不斷變化會導致社區開發人員需要對每個linux主線版本做適配和支持,這也就是為什么我們在構建xenomai系統時需要ipipe與linux版本匹配的原因,同時也可以看到,ipipe支持的版本總是落后于linux主線版本(大家應該聯想到逐步合入主線的PREEMT-RT了吧)。

dovetail區別與ipipe,它是在已有linux中斷管理代碼上進行擴展,為實時核提供與ipipe相同的功能,這樣可以隨著主線發展,與架構相關的代碼大大減少,大大降低了社區維護工作量,同時linux主線穩定版本確定后能第一時間進行支持,對它們的對比介紹詳情可見xenomai官網和EVL project。

二、環境準備

2.1 安裝內核編譯工具

編譯Linux內核需要的工具包如下,可能不全,可根據編譯時的錯誤提示安裝缺少的工具。

 sudo apt-get install gcc libncurses-dev flex bison openssl-dev libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev build-dep

2.2 準備內核及補丁文件

內核:下載linux源碼,linux內核源碼網址:https://www.kernel.org/。

對于需要使用ipipe補丁文件的內核版本:下載與linux版本對應的ipipe-core補丁,最好先瀏覽https://xenomai.org/downloads/ipipe/v4.x/看xenomai提供了哪些linux版本的補丁,再去下載對應linux內核源碼。

對于5.4以上的內核版本:https://xenomai.org/downloads/dovetail/?C=M;O=A中選取對應內核版本的dovetail補丁。

xenomai內核源碼包:到xenomai官網下載最新xenomai源碼包。

對于ipipe,本文選用以下版本作為示例:

linux kernel:linux-4.19.114.tar.xz
ipip-core:ipipe-core-4.19.114-cip24-x86-12.patch
xenomai:xenomai-3.1.tar.bz2

一般來說,如果沒有找到與你使用的內核版本一致的ipipe-core補丁,linux相近版本linux-4.19.zzz,只要版本zzz跨度不大,也可使用相近的補丁代替,但是不能保證與指定版本一致,可能有bug,若對xenomai地層不熟悉,用于生產環境最好還是指定版本。

對于dovetail,由于使用的ubuntu環境內核為linux 5.13,使用社區的維護的dovetail 5.13分支(或者讀者下載內核源碼和與之匹配的dovetail補丁也是可以的,這里只是示例,不建議使用5.13,詳見3.2 打dovetail補丁小節),示例如下:

linux kernel:linux-5.13.0.tar.xz
dovetail:patch-5.13-dovetail1.patch
xenomai:xenomai-3.2.1.tar.bz2

說明:筆者將上面的文件,統一放到了/home/work/xenomai(家目錄~)目錄下。文中涉及絕對路徑時,還請讀者注意。

三、內核安裝流程

3.1 打ipipe補丁

設置針對5.4版本以下內核使用ipipe的配置示例,如果你使用的是dovetail請看3.2小結。

解壓linux內核源碼:

$tar -xvf linux-4.19.114.tar.xz

進入linux內核源碼目錄打ipipe補丁:

$cd linux-4.19.114
$patch -p1 < ../ipipe-core-4.19.114-cip24-x86-12.patch

3.2 打dovetail補丁

先克隆社區dovetail倉庫:

git clone https://source.denx.de/Xenomai/linux-dovetail.git

切換到5.13分支:

git chech v5.13-dovetail-rebase

注:對于5.13只有v5.13-dovetail-rebase分支,表示未經過測試,最好選擇不帶rebase的版本,否則編譯等都有問題。

這樣就可以了,等會在該倉庫進行xenomai內核編譯。

或者與3.1一樣,下載內核源碼與之對應的dovetail補丁https://xenomai.org/downloads/dovetail/patch-5.13-dovetail1.patch.bz2,進行:

解壓linux內核源碼:

注:這里使用的ubuntu發新版內核。

$tar -xvf linux-source-5.13.tar.bz2

進入linux內核源碼目錄打ipipe補丁:

$cd linux-5.13
$patch -p1 < ../patch-5.10.76-dovetail1.patch

3.3 添加xenomai內核

解壓xenomai源碼包:

$tar -xvf xenomai-3.1.tar.bz2

進入xenomai源碼目錄xenomai-3.1/scripts,使用腳本prepare-kernel.sh對linux內核源碼打cobalt內核補丁;

$cd xenomai-3.0.8/scripts

腳本prepare-kernel.sh使用幫助如下:

$ ./prepare-kernel.sh --help
usage: prepare-kernel --linux= --ipipe= [--arch=] [--outpatch= [--filterkvers=y|n] [--filterarch=y|n]] [--forcelink] [--default] [--verbose]

其中主要參數為:

--linux=指定linux源碼的絕對路徑;

--ipipe=指定ipipe補丁。如果已經手動對linux源碼打ipipe補丁,則不需要指定該參數。

--arch=指定硬件架構,x86_64、arm、arm64

outpatch=指定輸出xenomai patch(絕對路徑)。默認情況下如果不使用該參數,prepare-kernel.sh打cobalt內核補丁時,只會在linux源碼目錄建立與cobalt源碼的軟連接文件,這樣的話,如果xenomai源碼移動了就會有很多問題,所以推薦使用該參數生成xenomai內核的補丁,再去對linux使用該補丁。這樣linux源碼內的cobalt內核相關源碼文件就不是鏈接文件了,今后再次構建時也直接使用該補丁,省事。

我們在上一個步驟已經對linux源碼打了ipipe補丁,這里就只使用prepare-kernel.sh生成cobalt內核的補丁cobalt-core-3.1-4.19.114.patch,再對linux內核源碼使用該補丁。

$./prepare-kernel.sh --linux=/home/work/xenomai/linux-4.19.114 --arch=x86_64 --outpatch=/home/work/xenomai/cobalt-core-3.1-4.19.114.patch

回到linux源碼目錄使用補丁:

$cd /home/work/xenomai/linux-4.19.114
$patch -p1 < ../cobalt-core-3.1-4.19.114.patch

到此,內核源碼已經制作完畢。下面開始配置編譯內核。

3.4 xenomai 內核配置

xenomai基于linux,xenomai作為一個小的實時核存在,許多硬件配置是linux 驅動掌管的,比如內存、電源管理,所以必須讓linux配置好,給xenomai提供一個好的軟硬件環境。

3.4.1 ipipe xenomai 內核配置

設置針對5.4版本以下內核使用ipipe的配置示例,如果你使用的是dovetail請看3.4.2小結。

這里示范使用的是內核默認的x86_64_deconfig文件。

注意:使用默認config文件,會包很多無用的驅動,編譯會占用很多時間,然而裁剪驅動需要對內核各模塊熟悉,且需要大量時間。對于新手來說,快捷的辦法是找一個發行版(如Ubuntu),從相近版本內核安裝包中提取config文件,在該config基礎上進行xenomai配置,這樣比較好。

$makeolddefconfig
$make menuconfig

進入menuconfig界面,會看影響xenomai實時性的警告信息:

 *** WARNING! Page migration (CONFIG_MIGRATION) may increase *** 
 *** latency. ***                                                         
 *** WARNING! At least one of APM, CPU frequency scaling, ACPI 'processor' ***
 *** or CPU idle features is enabled. Any of these options may ***     
 *** cause troubles with Xenomai. You should disable them. ***

依次進行如下配置:

General setup  --->
 Preemption Model (Preemptible Kernel (Low-Latency Desktop))  ---> 
 (X) Low-Latency Desktop
 (-xeno-3.2.1)Local version - append to kernel release
 
Processor type and features  --->
 Processor family (Core 2/newer Xeon)  ---> 
 (X) Core 2/newer Xeon 
 [*] Multi-core scheduler support                                                             [ ] CPU core priorities scheduler support 
 
Power management and ACPI options  --->
CPU Frequency scaling  --->
[ ] CPU Frequency scaling
[*] ACPI (Advanced Configuration and Power Interface) Support  ---> 
< > Processor 
 CPU Idle  --->
 [ ] CPU idle PM support

Memory Management options  --->
[ ] Contiguous Memory Allocator
[ ] Transparent Hugepage Support
[ ] Allow for memory compaction
[ ] Page migration 

Microsoft Hyper-V guest support  --->                                              
< > Microsoft Hyper-V client drivers

說明:設置LOCALVERSION是為了啟動時好分辨是xenomai內核還是普通linux內核。

到此內核基本配置完畢,要充分發揮xenomai的實時性的配置遠不止于此,還需要對linux進行深度配置,那是優化的事情,以后再說,下面開始進行內核編譯。

3.4.2 dovetail xenomai 內核配置

由于ubuntu內核也是5.13,這里復用ubuntu自帶內核的config文件,在此文件上進行xenomai內核配置文件。

cp /boot/config-5.13.0-30-generic ./.config

注意:使用挨默認config文件,會包很多無用的驅動,編譯會占用很多時間,然而裁剪驅動需要對內核各模塊熟悉,且需要大量時間。對于新手來說,快捷的辦法是找一個發行版(如Ubuntu),從相近版本內核安裝包中提取config文件,在該config基礎上進行xenomai配置,這樣比較好。

$make menuconfig

配置過程與3.4.1 小節一致。

3.5內核編譯與安裝

對于ipipe或者dovet,后面的步驟是一樣的,不再重復說明。

a) 編譯構建xenomai內核debian安裝包

對于基于debian衍生的發行版(如debian、Ubuntu、elementary、OpenGEU,Linux Mint等)來說,內核編譯安裝比較簡單,使用以下命令,可直接編譯生成用于安裝的debian包(.deb),安裝過程也無需額外設置,若讀者使用的不是Ubuntu系統,請看后面的分步安裝內核。

$sudo apt-get install dpkg-deb fakeroot kernel-package
$ CONCURRENCY_LEVEL=$(nproc) make-kpkg  --rootcmd fakeroot --initrd  --revision=1.0.0 kernel_image kernel_headers

或者

$ make -j$(nproc) deb-pkg

編譯時間取決于主機配置,編譯完成后會在源碼目錄的上級目錄生成內核安裝包,筆者這里如下:

$ls
linux-headers-4.19.114_1.0.0_amd64.deb linux-image-4.19.114_1.0.0_amd64.deb

使用dpkg命令安裝內核(需要超級權限):

$sudo dpkg -i linux-headers-4.19.114_1.0.0_amd64.deb linux-image-4.19.114_1.0.0_amd64.deb

安裝后直接重啟,grub高級選項中選擇新安裝的內核啟動即可。

若不想使用deb的方式安裝,也可通過如下步驟安裝:

  • 編譯:

$make -j$(nproc)

使用-j啟動多線程編譯,其中命令nproc得到機器邏輯CPU核數。編譯后編譯內核模塊:

$make modules_install

  • 安裝:

$sudo make install
$sudo mkinitramfs -o /boot/initrd.img-4.18.14 
$sudo update-initramfs -c -k 4.18.14

  • 配置grub引導:

$sudo update-grub

b) 分步編譯內核并安裝

上面的步驟只適用于基于debian衍生的X86系統,其中諸如命令update-grub其實是對原始的裝步驟的腳本封裝,更為原始的內核編譯安裝步驟如下,理論上支持所有x86系統。

  • 編譯

$make -j$(nproc)

使用-j啟動多線程編譯,其中命令nproc得到機器邏輯CPU核數。編譯后編譯內核模塊:

$make modules_install

  • 安裝

拷貝內核到/boot目錄

$sudo cp -iv arch/x86/boot/bzImage /boot/vmlinuz-4.19.114-xenomai-3.1.1

拷貝內核符號文件System.map(可省略):

$sudo cp -iv System.map /boot/System.map-4.19.114-xenomai-3.1.1

拷貝.config文件(可省略):

$sudo cp -iv .config /boot/config-4.19.114-xenomai-3.1.1

安裝內核文檔(可省略):

$sudo install -d /usr/share/doc/linux-4.19.114
$sudo cp -r Documentation/* /usr/share/doc/linux-5.5.3

  • 配置grub引導:

$sudo grub-mkconfig -o /boot/grub/grub.cfg

安裝后直接重啟,grub高級選項中選擇新安裝的內核啟動即可,下面編譯安裝用戶空間實時庫libcobalt。

四、安裝xenomai庫

4.1 編譯安裝實時庫libcobalt

同樣,如果你使用的是Ubuntu系統的話,xenomai庫可直接編譯生成安裝包,否則的話需要一步一步配置編譯、安裝、設置環境變量。

a) 編譯構建xenomai庫debian安裝包

進入xenomai源碼目錄:

$cd /home/work/xenomai/xenomai-3.1.1

  • 編譯

直接執行debain包編譯命令:

$debuild -us -uc
若找不到該命令則需要安裝
$sudo  apt-get install devscripts

編譯后同樣會在上級目錄生成debian安裝包如下:

$ ls xenomai*.deb

libxenomai1_2.99.0_amd64.deb       xenomai-kernel-source_2.99.0_all.deb
libxenomai-dev_2.99.0_amd64.deb     xenomai-runtime_2.99.0_amd64.deb
libxenomai1_2.99.0_amd64.deb:Xenomai的共享庫;xenomai-kernel-source_2.99.0_all.deb:xenomai內核源碼;libxenomai-dev_2.99.0_amd64.deb:xenomai頭文件和靜態庫;xenomai-runtime_2.99.0_amd64.deb:xenomai運行時組件; 對于開發環境,需要安裝xenomai-kernel-source_2.99.0_all.deblibxenomai-dev_2.99.0_amd64.deb,對于生產系統,只需要安裝xenomai-runtime_2.99.0_amd64.deblibxenomai1_2.99.0_amd64.deb
  • 安裝

直接使用dpkg安裝:

sudo dpkg -i libxenomai1_2.99.0_amd64.deb       xenomai-kernel-source_2.99.0_all.deb libxenomai-dev_2.99.0_amd64.deb     xenomai-runtime_2.99.0_amd64.deb

這種方法安裝的xenomai庫與b)方法安裝的位置不同,不需要額外設置環境變量,因為debian包安裝的時候已經通過hook腳本自動設置了,感興趣可以使用dpkg-deb -Rlibxenomai1_2.99.0_amd64.deb解包,查看其hook腳本。進入xenomai測試程序目錄/usr/lib/xenomai/testsuite/(該目錄沒有在環境變量內,所以需要進入目錄后執行),運行latency,測試xenomai實時任務定時延遲。

/usr/lib/xenomai/testsuite$ ./latency 
== Sampling period: 100 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT|  0011  (periodic user-mode task, 100 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst

b) 分步編譯安裝xenomai庫

對于非基于debian的發行版或是嵌入式系統,需要一步一步配置、編譯、安裝、配置環境變量來完成。

進入xenomai源碼目錄:

$cd /home/work/xenomai/xenomai-3.1.1

  • 配置:

./configure --enable-pshared --enable-smp --with-core=cobalt

通過./configure --help可查看配置幫助,配置說明更多參考xenomai官方安裝文檔,這里不再說明。

  • 創建一個臨時安裝目錄

mkdir -p build

  • 編譯安裝到這個目錄:

make -j$(nproc) DESTDIR=`pwd`/build install

編譯安裝后,xenomai庫等文件在build/目錄下,將build文件夾下所有內容拷貝到rootfs(目標根文件系統)中即可。臨時安裝到build目錄的目的是,如果需要在其他機器上部署,可不用再次編譯,直接將該目錄內容拷貝到目標文件系統根目錄即可。

$sudo cp -R build/* rootfs/usr/

也可以直接編譯安裝到系統中:

make -j$(nproc) install

  • 配置環境變量:

在目錄/etc/profile.d/下創建文件xenomai環境變量文件xenomai.sh,文件內容如下:

#fix paths for xenomai
export XENOMAI_ROOT_DIR=/usr/xenomai
export XENOMAI_PATH=/usr/xenomai
export PATH=$PATH:$XENOMAI_PATH/bin:$XENOMAI_PATH/sbin
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$XENOMAI_PATH/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$XENOMAI_PATH/lib
export OROCOS_TARGET=xenomai


#add some aliases convenient for xenomai
alias xeno-stat="cat /proc/xenomai/sched/stat"
alias xeno-threads="cat /proc/xenomai/sched/threads"
alias xeno-rt-threads="cat /proc/xenomai/sched/rt/threads"
alias xeno-interrupts="cat /proc/xenomai/irq"
alias xeno-version=/usr/xenomai/sbin/version
alias xeno-autotune=/usr/xenomai/sbin/autotune
alias xeno-latency=/usr/xenomai/bin/latenc

前半部分是xenomai環境變量,后半部分是常用的命名別名(快捷命令),具體含義后面的文章會介紹到;

由于xenomai實時任務是在linux軟實時任務基礎上創建的,而linux實時任務的創建需要權限,所以還需要配置用戶組允許非root用戶運行實時任務。創建用戶組xenomai,并將當前非root用戶與root用戶加入用戶組xenomai。

$sudo addgroup xenomai --gid 1234
$sudo addgroup root xenomai
$sudo usermod -a -G xenomai $USER

配置grub配置文件/etc/default/grub,在linux命令行參數中添加用戶組信息xenomai.allowed_group=1234,其中1234表示用戶組ID,如下:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash xenomai.allowed_group=1234"

更新grub:

$sudo grub-mkconfig -o /boot/grub/grub.cfg
    或
$sudo update-grub

重新啟動選擇xenomai內核,進入系統打開終端,直接執行latency測試xenomai實時性。

$ latency 
== Sampling period: 100 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT|  0011  (periodic user-mode task, 100 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst

五、X86 平臺xenomai實時性測試

下面是筆者一臺工控板上的測試數據,供大家參考。

使用的環境如下:

CPU intel 賽揚 3865U@1.8GHZ
Kernel Linux 4.4.200
操作系統 Ubuntu 16.04
內存 8GB DDR3-1600 雙通道
存儲 64GB EMMC

測試條件:一個QT應用程序繪制2維曲線圖,只有QT CPU占用率就達到99%,在此基礎上使用stress添加壓力,創建10個CPU密集型任務(不斷計算平方根),4個內存壓力任務(不斷的執行內存分配-賦值-讀取校驗-釋放操作,每次操作內存大小為256MB)。

stress -c 10 -m 4

測試時間:21155
測試命令:

latency -t0 -p 100 -P 99 -h -g result.txt

測試應用空間程序,優先級99,任務周期100us,測試結果輸出到文件result.txt。經過接近10天的測試后,文件result.txt中latency分布結果如下:

# 21155 (periodic user-mode task, 100 us period, priority 99)
# ----lat min|----lat avg|----lat max|-overrun|---msw|
#       0.343|      1.078|     23.110|       0|     0|
# Xenomai version: Xenomai/cobalt v3.1
# Linux 4.19.114-xeno 
......
# I-pipe releagese #20 detected
# Cobalt core 3.1 detected
# Compiler: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 
# Build args: --enable-smp --enable-pshared --enable-tls 
PKG_CONFIG_PATH=:/usr/xenomai/lib/pkgconfig:/usr/xenomai/lib/pkgconfig0 1
0.5 1599357037
1.5 1621130106
2.5 56618753
3.5 4386985
4.5 3848531
5.5 3556704
6.5 3353649
7.5 3033218
8.5 2560133
9.5 2035075
10.5 1516866
11.5 1038989
12.5 680815
13.5 417124
14.5 224296
15.5 115165
16.5 58075
17.5 27669
18.5 11648
19.5 4648
20.5 1646
21.5 467
22.5 38
23.5 1

其中第一列數據表示latency的值,第二列表示該值與上一個值之間這個范圍的latency出現的次數,最小0.343us,平均latency 1.078us,最大23.110us。系統高負載情況下還能有這么好的表現,可見xenomai的實時性還是挺不錯的。

這還只是xenomai應用空間任務的實時性表現,如果使用內核空間任務會更好。當然這只能說明操作系統能提供的實時性能,具體的還要看應用程序的設計等等。


此外,X86平臺實時性與BIOS有很大關系,通常BIOS配置CPU具有更高的吞吐量,例如超線程等,畢竟BIOS不是普通開發者能接觸到的,如果能讓BIOS對CPU針對實時系統配置的話,實時性會更好。比如下圖所示:平均抖動幾乎在100納秒以內。

ac6098b4-bf93-11ec-9e50-dac502259ad0.png

六、arm架構安裝xenomai

主要是事先移植linux內核和u-boot,它們跑起來后才能進行xenomai實時性改造。其他的就與上面步驟大同小異。步驟如下:

a)對移植好的linux內核打ipipe補丁。

b)打xenomai cobalt內核補丁。

c)交叉編譯(普通嵌入式內核編譯)

d)安裝zImage,若有內核模塊安裝內核模塊

e)交叉編譯xenomai庫

ARM配置選項和編譯標志:

SOC CFLAGS configure options
at91rm9200 -march=armv4t -msoft-float
at91sam9x -march=armv5 -msoft-float
imx1 -march=armv4t -msoft-float
imx21 -march=armv5 -msoft-float
imx31 -march=armv6 -mfpu=vfp
imx51/imx53 -march=armv7-a -mfpu=vfp3
imx6q -march=armv7-a -mfpu=vfp3 --enable-smp
ixp4xx -march=armv5 -msoft-float --enable-arm-tsc=ixp4xx
omap3 -march=armv7-a -mfpu=vfp3
omap4 -march=armv7-a -mfpu=vfp3 --enable-smp
orion -march=armv5 -mfpu=vfp
pxa -march=armv5 -msoft-float
pxa3xx -march=armv5 -msoft-float --enable-arm-quirks=xscale3
s3c24xx -march=armv4t -msoft-float
sa1100 -march=armv4t -msoft-float --enable-arm-quirks=sa1100

這里以cortex-A8 am335x為例:

配置

cd xenomai-3.1
./configure CFLAGS="-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfp3 -ffast-math" --host=arm-linux-gnueabihf --with-core=cobalt --enable-smp

--host=參數指定交叉編譯工具鏈,CFLAGS=指定目標架構,是否使用硬浮點等。

  • 創建一個臨時安裝目錄

mkdir -p build-arm

  • 編譯安裝到build-arm目錄:

make -j$(nproc) DESTDIR=`pwd`/build-arm install

編譯安裝后,xenomai庫等文件在$(pwd)/build/xenomai目錄下,將xenomai文件夾拷貝到rootfs/usr中即可。

sudo cp -R build-arm/xenomai rootfs/usr/

或者將xenomai文件夾進行壓縮,然后需要時直接解壓到rootfs/usr中,這種方式便于后續安裝。

cd build 
sudo tar -czpvf xenomai-arm-3.1.1.tar.gz xenomai

解壓到rootfs:

cd rootfs
sudo tar -xpvf xenomai-arm-3.1.1.tar.gz -C usr/

f)配置環境變量

與上面一樣,在目錄/etc/profile.d/下創建文件xenomai環境變量文件xenomai.sh,文件內容如下:

#fix paths for xenomai
export XENOMAI_ROOT_DIR=/usr/xenomai
export XENOMAI_PATH=/usr/xenomai
export PATH=$PATH:$XENOMAI_PATH/bin:$XENOMAI_PATH/sbin
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$XENOMAI_PATH/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$XENOMAI_PATH/lib
export OROCOS_TARGET=xenomai

#add some aliases convenient for xenomai
alias xeno-stat="cat /proc/xenomai/sched/stat"
alias xeno-threads="cat /proc/xenomai/sched/threads"
alias xeno-rt-threads="cat /proc/xenomai/sched/rt/threads"
alias xeno-interrupts="cat /proc/xenomai/irq"
alias xeno-version=/usr/xenomai/sbin/version
alias xeno-autotune=/usr/xenomai/sbin/autotune
alias xeno-latency=/usr/xenomai/bin/latenc

也可將這些內容直接放到/etc/profile中。

g)配置linux命令行參數

arm嵌入式系統一般都是root用戶,不需要設置用戶組,如果不是,請如上文所示建立用戶組。修改u-boot向內核傳遞內核參數,或者修改設備樹節點,添加內核參數屬性并賦值。

更多參考:http://wiki.csie.ncku.edu.tw/embedded/xenomai

七、ARM 平臺xenomai實時性測試

CPU 雙核cortex-A15@1.5GHZ
Kernel Linux 4.19.85 + xenomai 3.1
內存 2GB DDR3
存儲 4GB EMMC
以下均在壓力stress -c 10 -m 4下測試,時間2小時,定時周期100us,優先級99。

7.1 IRQ-timer handler

# 0200 (in-kernel timer handler, 100 us period, priority 99)
# ----lat min|----lat avg|----lat max|-overrun|---msw|
#       0.325|      0.768|      6.859|       0|     0|
# Xenomai version: Xenomai/cobalt v3.1
.....
0 1
0.25 979922
0.75 69023222
1.25 1468209
1.75 314001
2.25 118087
2.75 52695
3.25 9272
3.75 2163
4.25 5333
4.75 2638
5.25 18381
5.75 5633
6.25 18
6.75 15
7 1

7.2 內核態任務

# 0121 (in-kernel periodic task, 100 us period, priority 99)
# ----lat min|----lat avg|----lat max|-overrun|---msw|
#      -0.282|      0.643|     10.519|       0|     0|
# Xenomai version: Xenomai/cobalt v3.1
....
0 1
0.25 37403654
0.75 5725957
1.25 5300392
1.75 3143282
2.25 2329224
2.75 1360290
3.25 511552
3.75 135384
4.25 37234
4.75 42208
5.25 18950
5.75 4495
6.25 532
6.75 295
7.25 172
7.75 43
8.25 13
8.75 6
9.25 1
9.75 3
10.25 1
10.75 2
11 1

7.3 用戶態任務

# 0200 (periodic user-mode task, 100 us period, priority 99)
# ----lat min|----lat avg|----lat max|-overrun|---msw|
#       0.422|      3.605|     13.328|       0|     0|
# Xenomai version: Xenomai/cobalt v3.1
.....
0 1
0.25 2
0.75 44
1.25 137
1.75 1540
2.25 13471
2.75 1943224
3.25 38106382
3.75 19789463
4.25 6749386
4.75 2940300
5.25 1812680
5.75 549134
6.25 47176
6.75 18063
7.25 16545
7.75 9921
8.25 1391
8.75 389
9.25 132
9.75 97
10.25 104
10.75 46
11.25 18
11.75 21
12.25 6
12.75 4
13.25 2
13.5 1

基于arm平臺xenomai與VxWorks 實時性能對比,可參見本博客其他文章。

八、arm64架構安裝xenomai

最近[2020.11.11]入手一個樹莓派4B,想看看xenomai在樹莓派上的實時性表現,就搞了一下,便更新文章記錄下來.

這里用樹莓派4b來說明,具體步驟以上類似,需要注意的是,選擇內核的時候盡量使用與ipipe支持版本相近的分支來打補丁,目前ipipe還不支持5.x的內核,所以這里使用分支rpi-4.19.y,ipipe使用ipipe-core-4.19.124-cip27-arm64-07.patch。

git clone --depth=1 --branch rpi-4.19.y https://github.com/raspberrypi/linux

打ipipe補丁的時候有一些小沖突,自己對著源碼手動補充一下就行。樹莓派4B還有一些中斷控制器未進行ipipe修復,可參見https://blog.csdn.net/chensong_2000/article/details/106556100

接下了的步驟與上面一致,如果嫌麻煩的朋友可以直接克隆:

git clone https://gitlab.com/wsg199600/rpi-xenomai.git

配置

make bcm2711_xenomai_defconfig

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11322

    瀏覽量

    209888
  • 操作系統
    +關注

    關注

    37

    文章

    6856

    瀏覽量

    123459

原文標題:xenomai3.1+linux構建linux實時操作系統-基于X86_64和arm

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    迅為RK3588開發板實時系統編譯-Preemption系統/ Xenomai系統編譯-獲取Linux源碼包

    3.1 Preemption 系統/ Xenomai 系統編譯 3.1.1 獲取 Linux 源碼包 編譯環境說明: 本手冊使用的是迅為提供的編譯
    發表于 01-09 11:03

    Arm主板與x86主板的區別

    在當今數字化迅猛發展的時代,計算機硬件的架構選擇對于系統的性能、能效以及適用性具有至關重要的影響。Arm架構與x86架構是目前主流的兩種計算機體系結構,各自在個人計算機、服務器、嵌入式系統及移動設備
    的頭像 發表于 01-07 12:21 ?78次閱讀
    Arm主板與<b class='flag-5'>x86</b>主板的區別

    飛凌嵌入式ElfBoard ELF 1板卡-內核編譯之初次編譯

    即可完成代碼的編譯。我們先了解一編譯腳本的內容。使用vi命令打開build.sh腳本:elf@ubuntu:~/work/linux-4.1.15-elf1$ vi build.sh
    發表于 12-17 09:34

    英特爾將攜手AMD共同捍衛x86生態

    10月16日,英特爾正式公布了一項重大合作計劃:與AMD攜手成立x86生態系統咨詢小組。該計劃由英特爾CEO帕特·基辛格親自宣布。   x86生態系統咨詢小組(x86 Ecosystem
    的頭像 發表于 10-16 13:49 ?503次閱讀

    X86架構處理器有哪些優點和缺點

    X86架構處理器作為計算機領域的重要組成部分,具有多個顯著的優點和一定的缺點。以下是對X86架構處理器優缺點的詳細分析。
    的頭像 發表于 08-22 11:25 ?2345次閱讀

    ubuntu 24.04嘗試使用riscv64-linux-musleabi_for_x86_64-pc-linux-gnu工具鏈編譯cv1800大核出現報錯的原因?

    ubuntu 24.04嘗試使用riscv64-linux-musleabi_for_x86_64-pc-linux-gnu工具鏈編譯cv1800大核,結果出現如下報錯: /ho
    發表于 07-16 08:20

    ElfBoard技術貼|如何將libwebsockets庫編譯x86架構

    在之前的文章中,我們已經詳細介紹了如何交叉編譯libwebsockets并將其部署到ELF1開發板上。然而在調試階段,發現將libwebsockets在Ubuntu環境
    的頭像 發表于 07-10 09:38 ?1247次閱讀
    ElfBoard技術貼|如何將libwebsockets庫<b class='flag-5'>編譯</b>為<b class='flag-5'>x86</b>架構

    I.MX6ULL-飛凌 ElfBoard ELF1板卡 - 如何在Ubuntu編譯OpenCV庫(X86架構)

    在之前發布的文章中探討了交叉編譯OpenCV并部署至嵌入式系統的方法。然而,在調試階段,我們發現在 Ubuntu 環境將 OpenCV 編譯
    發表于 06-07 09:32

    嵌入式學習-飛凌ElfBoard ELF 1板卡 - 如何在Ubuntu編譯OpenCV庫

    在之前發布的文章中探討了交叉編譯OpenCV并部署至嵌入式系統的方法。然而,在調試階段,我們發現在 Ubuntu 環境將 OpenCV 編譯
    發表于 06-07 09:21

    ELF 1技術貼|如何在Ubuntu編譯OpenCV庫

    在之前發布的文章中探討了交叉編譯OpenCV并部署至嵌入式系統的方法。然而,在調試階段,我們發現在Ubuntu環境將OpenCV編譯
    的頭像 發表于 05-31 16:41 ?1180次閱讀
    ELF 1技術貼|如何在<b class='flag-5'>Ubuntu</b>中<b class='flag-5'>編譯</b>OpenCV庫

    觸翔X86工控主板在交互機器人中的應用

    X86工控主板在交互機器人中的應用主要體現在其高可靠性、抗干擾性和穩定性等方面,為交互機器人的正常運行和精確控制提供了有力支持。以下是關于X86工控主板在交互機器人中應用的詳細分析:
    的頭像 發表于 05-28 15:48 ?490次閱讀

    全新國產x86處理器,Chiplet架構,從教育整機做起

    電子發燒友網報道(文/周凱揚)要說什么架構在當下的計算機市場依然屹立多年不倒,那一定是x86架構。盡管坐擁巨大的市場占有量,x86依然是市面上最封閉的生態之一,多年以來只有英特爾和AMD陸續推出
    的頭像 發表于 04-30 01:06 ?5347次閱讀
    全新國產<b class='flag-5'>x86</b>處理器,Chiplet架構,從教育整機做起

    鴻蒙OpenHarmony【搭建Ubuntu環境

    支持在Windows環境進行編譯,如Hi3861、Hi3516系列開發板。因此,建議使用Ubuntu編譯
    的頭像 發表于 04-19 16:53 ?1294次閱讀
    鴻蒙OpenHarmony【搭建<b class='flag-5'>Ubuntu</b><b class='flag-5'>環境</b>】

    x86 SBC vs ARM SBC:選擇適合您的單板計算機

    單板計算機 (SBC) 已成為技術領域的基石,為各種應用提供緊湊、經濟高效的解決方案。兩種最流行的 SBC 架構是 x86 和 ARM。本文旨在提供 x86 SBC 和 ARM SBC 之間的全面
    的頭像 發表于 03-07 13:26 ?551次閱讀

    arm架構和x86架構區別 linux是x86還是arm

    ARM架構和x86架構是兩種不同的計算機處理器架構,它們在體系結構、指令集、應用領域等方面有著明顯的區別。Linux操作系統則具有廣泛的適配性,可以運行在各種架構上,包括x86和ARM架構。 一
    的頭像 發表于 01-30 13:46 ?1.9w次閱讀
    主站蜘蛛池模板: 中国xxxxx| 无限资源在线看影院免费观看| 久久这里只有精品国产99| 嫩草影院在线观看精品视频| 天天日免费观看视频一1| 影音先锋电影资源av| 打开双腿狠狠蹂躏蜜桃臀| 久久99精品国产99久久6男男| 日韩精品一区VR观看| 在线亚洲精品福利网址导航| 国产视频www| 日韩一区精品视频一区二区 | 免费国产足恋网站| YELLOW免费观看完整视频| 久久蜜视频| 亚洲国产精品自在自线观看| 纯肉巨黄H爆粗口男男分卷阅读| 伦理片 qvod| 伊人久久网站| 久久99精品视频| 亚洲色tu| 精品国产mmd在线观看| 午夜成a人片在线观看| 叮当成人社区| 日本aa大片| www.青青草原| 欧美又粗又大AAAA片| 99热久久爱五月天婷婷| 奶水太多h室友| 52色擼99热99| 久热人人综合人人九九精品视频| 亚洲人成在线播放网站岛国| 国产亚洲日韩欧美视频| 亚洲qingse中文字幕久久| 国产啪精品视频网免费| 熟女久久久久久久久久久| 丰满饥渴老太性hd| 日本熟妇乱妇熟色在线电影| 成3d漫二区三区四区| 日本无卡无吗在线| 持田香织abc|