一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

X86 ubuntu環(huán)境下xenomai內(nèi)核編譯

Linux閱碼場(chǎng) ? 來(lái)源:Linux閱碼場(chǎng) ? 作者:Linux閱碼場(chǎng) ? 2022-04-19 14:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近接觸實(shí)時(shí)系統(tǒng)Xenomai,該文章整理記錄X86 ubuntu環(huán)境下xenomai 內(nèi)核編譯、xenomai應(yīng)用環(huán)境搭建步驟,其他硬件架構(gòu)(如arm、arm64)類(lèi)似,先在X86上安裝好環(huán)境才能更好的開(kāi)發(fā)驗(yàn)證xenomai程序吧,更多信息見(jiàn)文末參考鏈接,希望對(duì)你有所幫助。

一、概要

xenomai是眾多inux實(shí)時(shí)性解決方案中的一種,通過(guò)在linux的基礎(chǔ)上添加一個(gè)RTOS內(nèi)核cobalt,來(lái)提高linux的實(shí)時(shí)性。實(shí)時(shí)內(nèi)核cobalt與非實(shí)時(shí)內(nèi)核linux相結(jié)合,既能提供工業(yè)級(jí)RTOS的硬實(shí)時(shí)性能,又能利用linux操作系統(tǒng)非常出色的網(wǎng)絡(luò)和圖形界面服務(wù),在產(chǎn)品的開(kāi)發(fā)周期和成本控制方面都有巨大優(yōu)勢(shì),結(jié)構(gòu)如下:

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

主要有3部分,xenomai的移植構(gòu)建也是圍繞這三部分來(lái)進(jìn)行:

  1. 用戶(hù)空間中的實(shí)時(shí)應(yīng)用程序庫(kù)libcobalt;

  2. 內(nèi)核空間中的實(shí)時(shí)內(nèi)核Cobalt;

  3. 硬件架構(gòu)與Linux內(nèi)核版本相關(guān)層 ipipe-core或dovetail。

libcobalt和Cobalt的源碼隨xenomai更新,位于同一源碼包內(nèi),ipipe-core和dovetail則與硬件架構(gòu)和具體linux版本相關(guān),以補(bǔ)丁的方式提供,需要單獨(dú)下載;

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

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

總的來(lái)說(shuō),ipipe-core和dovetail實(shí)現(xiàn)必要功能的同時(shí),也是xenomai與硬件架構(gòu)、linux版本間的解耦層,社區(qū)提供了常見(jiàn)架構(gòu)下各linux版本的補(bǔ)丁。xenomai的移植步驟如下:

  1. 準(zhǔn)備好ipip-core或dovetail補(bǔ)丁,對(duì)linux5.4以下版本使用ipipe-core,linux5.4以上版本需要dovetail替代。

  2. 打cobalt內(nèi)核補(bǔ)丁,編譯構(gòu)建內(nèi)核。

  3. libcobalt庫(kù)編譯安裝,設(shè)置環(huán)境變量。

步驟1中的源碼文件也可直接從xenomai維護(hù)分支直接拉取,直接對(duì)拉取的代碼進(jìn)行步驟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已經(jīng)不區(qū)分ARM、X86了,dovetail區(qū)別與ipipe,ipipe是與linux中斷管理分離,linux中斷管理在其之上,ipipe部分需要大量直接對(duì)接arch部分的代碼,這樣主線內(nèi)核代碼的不斷變化會(huì)導(dǎo)致社區(qū)開(kāi)發(fā)人員需要對(duì)每個(gè)linux主線版本做適配和支持,這也就是為什么我們?cè)跇?gòu)建xenomai系統(tǒng)時(shí)需要ipipe與linux版本匹配的原因,同時(shí)也可以看到,ipipe支持的版本總是落后于linux主線版本(大家應(yīng)該聯(lián)想到逐步合入主線的PREEMT-RT了吧)。

dovetail區(qū)別與ipipe,它是在已有l(wèi)inux中斷管理代碼上進(jìn)行擴(kuò)展,為實(shí)時(shí)核提供與ipipe相同的功能,這樣可以隨著主線發(fā)展,與架構(gòu)相關(guān)的代碼大大減少,大大降低了社區(qū)維護(hù)工作量,同時(shí)linux主線穩(wěn)定版本確定后能第一時(shí)間進(jìn)行支持,對(duì)它們的對(duì)比介紹詳情可見(jiàn)xenomai官網(wǎng)和EVL project。

二、環(huán)境準(zhǔn)備

2.1 安裝內(nèi)核編譯工具

編譯Linux內(nèi)核需要的工具包如下,可能不全,可根據(jù)編譯時(shí)的錯(cuò)誤提示安裝缺少的工具。

 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 準(zhǔn)備內(nèi)核及補(bǔ)丁文件

內(nèi)核:下載linux源碼,linux內(nèi)核源碼網(wǎng)址:https://www.kernel.org/。

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

對(duì)于5.4以上的內(nèi)核版本:https://xenomai.org/downloads/dovetail/?C=M;O=A中選取對(duì)應(yīng)內(nèi)核版本的dovetail補(bǔ)丁。

xenomai內(nèi)核源碼包:到xenomai官網(wǎng)下載最新xenomai源碼包。

對(duì)于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

一般來(lái)說(shuō),如果沒(méi)有找到與你使用的內(nèi)核版本一致的ipipe-core補(bǔ)丁,linux相近版本linux-4.19.zzz,只要版本zzz跨度不大,也可使用相近的補(bǔ)丁代替,但是不能保證與指定版本一致,可能有bug,若對(duì)xenomai地層不熟悉,用于生產(chǎn)環(huán)境最好還是指定版本。

對(duì)于dovetail,由于使用的ubuntu環(huán)境內(nèi)核為linux 5.13,使用社區(qū)的維護(hù)的dovetail 5.13分支(或者讀者下載內(nèi)核源碼和與之匹配的dovetail補(bǔ)丁也是可以的,這里只是示例,不建議使用5.13,詳見(jiàn)3.2 打dovetail補(bǔ)丁小節(jié)),示例如下:

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

說(shuō)明:筆者將上面的文件,統(tǒng)一放到了/home/work/xenomai(家目錄~)目錄下。文中涉及絕對(duì)路徑時(shí),還請(qǐng)讀者注意。

三、內(nèi)核安裝流程

3.1 打ipipe補(bǔ)丁

設(shè)置針對(duì)5.4版本以下內(nèi)核使用ipipe的配置示例,如果你使用的是dovetail請(qǐng)看3.2小結(jié)。

解壓linux內(nèi)核源碼:

$tar -xvf linux-4.19.114.tar.xz

進(jìn)入linux內(nèi)核源碼目錄打ipipe補(bǔ)?。?/p>

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

3.2 打dovetail補(bǔ)丁

先克隆社區(qū)dovetail倉(cāng)庫(kù):

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

切換到5.13分支:

git chech v5.13-dovetail-rebase

注:對(duì)于5.13只有v5.13-dovetail-rebase分支,表示未經(jīng)過(guò)測(cè)試,最好選擇不帶rebase的版本,否則編譯等都有問(wèn)題。

這樣就可以了,等會(huì)在該倉(cāng)庫(kù)進(jìn)行xenomai內(nèi)核編譯。

或者與3.1一樣,下載內(nèi)核源碼與之對(duì)應(yīng)的dovetail補(bǔ)丁https://xenomai.org/downloads/dovetail/patch-5.13-dovetail1.patch.bz2,進(jìn)行:

解壓linux內(nèi)核源碼:

注:這里使用的ubuntu發(fā)新版內(nèi)核。

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

進(jìn)入linux內(nèi)核源碼目錄打ipipe補(bǔ)?。?/p>

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

3.3 添加xenomai內(nèi)核

解壓xenomai源碼包:

$tar -xvf xenomai-3.1.tar.bz2

進(jìn)入xenomai源碼目錄xenomai-3.1/scripts,使用腳本prepare-kernel.sh對(duì)linux內(nèi)核源碼打cobalt內(nèi)核補(bǔ)丁;

$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]

其中主要參數(shù)為:

--linux=指定linux源碼的絕對(duì)路徑;

--ipipe=指定ipipe補(bǔ)丁。如果已經(jīng)手動(dòng)對(duì)linux源碼打ipipe補(bǔ)丁,則不需要指定該參數(shù)。

--arch=指定硬件架構(gòu),x86_64、arm、arm64

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

我們?cè)谏弦粋€(gè)步驟已經(jīng)對(duì)linux源碼打了ipipe補(bǔ)丁,這里就只使用prepare-kernel.sh生成cobalt內(nèi)核的補(bǔ)丁cobalt-core-3.1-4.19.114.patch,再對(duì)linux內(nèi)核源碼使用該補(bǔ)丁。

$./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源碼目錄使用補(bǔ)?。?/p>

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

到此,內(nèi)核源碼已經(jīng)制作完畢。下面開(kāi)始配置編譯內(nèi)核。

3.4 xenomai 內(nèi)核配置

xenomai基于linux,xenomai作為一個(gè)小的實(shí)時(shí)核存在,許多硬件配置是linux 驅(qū)動(dòng)掌管的,比如內(nèi)存、電源管理,所以必須讓linux配置好,給xenomai提供一個(gè)好的軟硬件環(huán)境。

3.4.1 ipipe xenomai 內(nèi)核配置

設(shè)置針對(duì)5.4版本以下內(nèi)核使用ipipe的配置示例,如果你使用的是dovetail請(qǐng)看3.4.2小結(jié)。

這里示范使用的是內(nèi)核默認(rèn)的x86_64_deconfig文件。

注意:使用默認(rèn)config文件,會(huì)包很多無(wú)用的驅(qū)動(dòng),編譯會(huì)占用很多時(shí)間,然而裁剪驅(qū)動(dòng)需要對(duì)內(nèi)核各模塊熟悉,且需要大量時(shí)間。對(duì)于新手來(lái)說(shuō),快捷的辦法是找一個(gè)發(fā)行版(如Ubuntu),從相近版本內(nèi)核安裝包中提取config文件,在該config基礎(chǔ)上進(jìn)行xenomai配置,這樣比較好。

$makeolddefconfig
$make menuconfig

進(jìn)入menuconfig界面,會(huì)看影響xenomai實(shí)時(shí)性的警告信息:

 *** 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. ***

依次進(jìn)行如下配置:

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

說(shuō)明:設(shè)置LOCALVERSION是為了啟動(dòng)時(shí)好分辨是xenomai內(nèi)核還是普通linux內(nèi)核。

到此內(nèi)核基本配置完畢,要充分發(fā)揮xenomai的實(shí)時(shí)性的配置遠(yuǎn)不止于此,還需要對(duì)linux進(jìn)行深度配置,那是優(yōu)化的事情,以后再說(shuō),下面開(kāi)始進(jìn)行內(nèi)核編譯。

3.4.2 dovetail xenomai 內(nèi)核配置

由于ubuntu內(nèi)核也是5.13,這里復(fù)用ubuntu自帶內(nèi)核的config文件,在此文件上進(jìn)行xenomai內(nèi)核配置文件。

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

注意:使用挨默認(rèn)config文件,會(huì)包很多無(wú)用的驅(qū)動(dòng),編譯會(huì)占用很多時(shí)間,然而裁剪驅(qū)動(dòng)需要對(duì)內(nèi)核各模塊熟悉,且需要大量時(shí)間。對(duì)于新手來(lái)說(shuō),快捷的辦法是找一個(gè)發(fā)行版(如Ubuntu),從相近版本內(nèi)核安裝包中提取config文件,在該config基礎(chǔ)上進(jìn)行xenomai配置,這樣比較好。

$make menuconfig

配置過(guò)程與3.4.1 小節(jié)一致。

3.5內(nèi)核編譯與安裝

對(duì)于ipipe或者dovet,后面的步驟是一樣的,不再重復(fù)說(shuō)明。

a) 編譯構(gòu)建xenomai內(nèi)核debian安裝包

對(duì)于基于debian衍生的發(fā)行版(如debian、Ubuntu、elementary、OpenGEU,Linux Mint等)來(lái)說(shuō),內(nèi)核編譯安裝比較簡(jiǎn)單,使用以下命令,可直接編譯生成用于安裝的debian包(.deb),安裝過(guò)程也無(wú)需額外設(shè)置,若讀者使用的不是Ubuntu系統(tǒng),請(qǐng)看后面的分步安裝內(nèi)核。

$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

編譯時(shí)間取決于主機(jī)配置,編譯完成后會(huì)在源碼目錄的上級(jí)目錄生成內(nèi)核安裝包,筆者這里如下:

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

使用dpkg命令安裝內(nèi)核(需要超級(jí)權(quán)限):

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

安裝后直接重啟,grub高級(jí)選項(xiàng)中選擇新安裝的內(nèi)核啟動(dòng)即可。

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

  • 編譯:

$make -j$(nproc)

使用-j啟動(dòng)多線程編譯,其中命令nproc得到機(jī)器邏輯CPU核數(shù)。編譯后編譯內(nèi)核模塊:

$make modules_install

  • 安裝:

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

  • 配置grub引導(dǎo):

$sudo update-grub

b) 分步編譯內(nèi)核并安裝

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

  • 編譯

$make -j$(nproc)

使用-j啟動(dòng)多線程編譯,其中命令nproc得到機(jī)器邏輯CPU核數(shù)。編譯后編譯內(nèi)核模塊:

$make modules_install

  • 安裝

拷貝內(nèi)核到/boot目錄

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

拷貝內(nèi)核符號(hào)文件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

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

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

  • 配置grub引導(dǎo):

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

安裝后直接重啟,grub高級(jí)選項(xiàng)中選擇新安裝的內(nèi)核啟動(dòng)即可,下面編譯安裝用戶(hù)空間實(shí)時(shí)庫(kù)libcobalt。

四、安裝xenomai庫(kù)

4.1 編譯安裝實(shí)時(shí)庫(kù)libcobalt

同樣,如果你使用的是Ubuntu系統(tǒng)的話,xenomai庫(kù)可直接編譯生成安裝包,否則的話需要一步一步配置編譯、安裝、設(shè)置環(huán)境變量。

a) 編譯構(gòu)建xenomai庫(kù)debian安裝包

進(jìn)入xenomai源碼目錄:

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

  • 編譯

直接執(zhí)行debain包編譯命令:

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

編譯后同樣會(huì)在上級(jí)目錄生成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的共享庫(kù);xenomai-kernel-source_2.99.0_all.deb:xenomai內(nèi)核源碼;libxenomai-dev_2.99.0_amd64.deb:xenomai頭文件和靜態(tài)庫(kù);xenomai-runtime_2.99.0_amd64.deb:xenomai運(yùn)行時(shí)組件; 對(duì)于開(kāi)發(fā)環(huán)境,需要安裝xenomai-kernel-source_2.99.0_all.deblibxenomai-dev_2.99.0_amd64.deb,對(duì)于生產(chǎn)系統(tǒng),只需要安裝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庫(kù)與b)方法安裝的位置不同,不需要額外設(shè)置環(huán)境變量,因?yàn)閐ebian包安裝的時(shí)候已經(jīng)通過(guò)hook腳本自動(dòng)設(shè)置了,感興趣可以使用dpkg-deb -Rlibxenomai1_2.99.0_amd64.deb解包,查看其hook腳本。進(jìn)入xenomai測(cè)試程序目錄/usr/lib/xenomai/testsuite/(該目錄沒(méi)有在環(huán)境變量?jī)?nèi),所以需要進(jìn)入目錄后執(zhí)行),運(yùn)行latency,測(cè)試xenomai實(shí)時(shí)任務(wù)定時(shí)延遲。

/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庫(kù)

對(duì)于非基于debian的發(fā)行版或是嵌入式系統(tǒng),需要一步一步配置、編譯、安裝、配置環(huán)境變量來(lái)完成。

進(jìn)入xenomai源碼目錄:

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

  • 配置:

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

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

  • 創(chuàng)建一個(gè)臨時(shí)安裝目錄

mkdir -p build

  • 編譯安裝到這個(gè)目錄:

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

編譯安裝后,xenomai庫(kù)等文件在build/目錄下,將build文件夾下所有內(nèi)容拷貝到rootfs(目標(biāo)根文件系統(tǒng))中即可。臨時(shí)安裝到build目錄的目的是,如果需要在其他機(jī)器上部署,可不用再次編譯,直接將該目錄內(nèi)容拷貝到目標(biāo)文件系統(tǒng)根目錄即可。

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

也可以直接編譯安裝到系統(tǒng)中:

make -j$(nproc) install

  • 配置環(huán)境變量:

在目錄/etc/profile.d/下創(chuàng)建文件xenomai環(huán)境變量文件xenomai.sh,文件內(nèi)容如下:

#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環(huán)境變量,后半部分是常用的命名別名(快捷命令),具體含義后面的文章會(huì)介紹到;

由于xenomai實(shí)時(shí)任務(wù)是在linux軟實(shí)時(shí)任務(wù)基礎(chǔ)上創(chuàng)建的,而linux實(shí)時(shí)任務(wù)的創(chuàng)建需要權(quán)限,所以還需要配置用戶(hù)組允許非root用戶(hù)運(yùn)行實(shí)時(shí)任務(wù)。創(chuàng)建用戶(hù)組xenomai,并將當(dāng)前非root用戶(hù)與root用戶(hù)加入用戶(hù)組xenomai。

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

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

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash xenomai.allowed_group=1234"

更新grub:

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

重新啟動(dòng)選擇xenomai內(nèi)核,進(jìn)入系統(tǒng)打開(kāi)終端,直接執(zhí)行latency測(cè)試xenomai實(shí)時(shí)性。

$ 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 平臺(tái)xenomai實(shí)時(shí)性測(cè)試

下面是筆者一臺(tái)工控板上的測(cè)試數(shù)據(jù),供大家參考。

使用的環(huán)境如下:

CPU intel 賽揚(yáng) 3865U@1.8GHZ
Kernel Linux 4.4.200
操作系統(tǒng) Ubuntu 16.04
內(nèi)存 8GB DDR3-1600 雙通道
存儲(chǔ) 64GB EMMC

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

stress -c 10 -m 4

測(cè)試時(shí)間:21155
測(cè)試命令:

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

測(cè)試應(yīng)用空間程序,優(yōu)先級(jí)99,任務(wù)周期100us,測(cè)試結(jié)果輸出到文件result.txt。經(jīng)過(guò)接近10天的測(cè)試后,文件result.txt中l(wèi)atency分布結(jié)果如下:

# 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

其中第一列數(shù)據(jù)表示latency的值,第二列表示該值與上一個(gè)值之間這個(gè)范圍的latency出現(xiàn)的次數(shù),最小0.343us,平均latency 1.078us,最大23.110us。系統(tǒng)高負(fù)載情況下還能有這么好的表現(xiàn),可見(jiàn)xenomai的實(shí)時(shí)性還是挺不錯(cuò)的。

這還只是xenomai應(yīng)用空間任務(wù)的實(shí)時(shí)性表現(xiàn),如果使用內(nèi)核空間任務(wù)會(huì)更好。當(dāng)然這只能說(shuō)明操作系統(tǒng)能提供的實(shí)時(shí)性能,具體的還要看應(yīng)用程序的設(shè)計(jì)等等。


此外,X86平臺(tái)實(shí)時(shí)性與BIOS有很大關(guān)系,通常BIOS配置CPU具有更高的吞吐量,例如超線程等,畢竟BIOS不是普通開(kāi)發(fā)者能接觸到的,如果能讓BIOS對(duì)CPU針對(duì)實(shí)時(shí)系統(tǒng)配置的話,實(shí)時(shí)性會(huì)更好。比如下圖所示:平均抖動(dòng)幾乎在100納秒以?xún)?nèi)。

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

六、arm架構(gòu)安裝xenomai

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

a)對(duì)移植好的linux內(nèi)核打ipipe補(bǔ)丁。

b)打xenomai cobalt內(nèi)核補(bǔ)丁。

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

d)安裝zImage,若有內(nèi)核模塊安裝內(nèi)核模塊

e)交叉編譯xenomai庫(kù)

ARM配置選項(xiàng)和編譯標(biāo)志:

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=參數(shù)指定交叉編譯工具鏈,CFLAGS=指定目標(biāo)架構(gòu),是否使用硬浮點(diǎn)等。

  • 創(chuàng)建一個(gè)臨時(shí)安裝目錄

mkdir -p build-arm

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

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

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

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

或者將xenomai文件夾進(jìn)行壓縮,然后需要時(shí)直接解壓到rootfs/usr中,這種方式便于后續(xù)安裝。

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)配置環(huán)境變量

與上面一樣,在目錄/etc/profile.d/下創(chuàng)建文件xenomai環(huán)境變量文件xenomai.sh,文件內(nèi)容如下:

#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

也可將這些內(nèi)容直接放到/etc/profile中。

g)配置linux命令行參數(shù)

arm嵌入式系統(tǒng)一般都是root用戶(hù),不需要設(shè)置用戶(hù)組,如果不是,請(qǐng)如上文所示建立用戶(hù)組。修改u-boot向內(nèi)核傳遞內(nèi)核參數(shù),或者修改設(shè)備樹(shù)節(jié)點(diǎn),添加內(nèi)核參數(shù)屬性并賦值。

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

七、ARM 平臺(tái)xenomai實(shí)時(shí)性測(cè)試

CPU 雙核cortex-A15@1.5GHZ
Kernel Linux 4.19.85 + xenomai 3.1
內(nèi)存 2GB DDR3
存儲(chǔ) 4GB EMMC
以下均在壓力stress -c 10 -m 4下測(cè)試,時(shí)間2小時(shí),定時(shí)周期100us,優(yōu)先級(jí)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 內(nèi)核態(tài)任務(wù)

# 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 用戶(hù)態(tài)任務(wù)

# 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平臺(tái)xenomai與VxWorks 實(shí)時(shí)性能對(duì)比,可參見(jiàn)本博客其他文章。

八、arm64架構(gòu)安裝xenomai

最近[2020.11.11]入手一個(gè)樹(shù)莓派4B,想看看xenomai在樹(shù)莓派上的實(shí)時(shí)性表現(xiàn),就搞了一下,便更新文章記錄下來(lái).

這里用樹(shù)莓派4b來(lái)說(shuō)明,具體步驟以上類(lèi)似,需要注意的是,選擇內(nèi)核的時(shí)候盡量使用與ipipe支持版本相近的分支來(lái)打補(bǔ)丁,目前ipipe還不支持5.x的內(nèi)核,所以這里使用分支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補(bǔ)丁的時(shí)候有一些小沖突,自己對(duì)著源碼手動(dòng)補(bǔ)充一下就行。樹(shù)莓派4B還有一些中斷控制器未進(jìn)行ipipe修復(fù),可參見(jiàn)https://blog.csdn.net/chensong_2000/article/details/106556100

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

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

配置

make bcm2711_xenomai_defconfig

審核編輯 :李倩


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

    關(guān)注

    87

    文章

    11509

    瀏覽量

    213726
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7144

    瀏覽量

    125564

原文標(biāo)題:xenomai3.1+linux構(gòu)建linux實(shí)時(shí)操作系統(tǒng)-基于X86_64和arm

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    x86再次偉大!英特爾AMD破天荒聯(lián)手,要搞定軟硬件兼容性

    電子發(fā)燒友網(wǎng)報(bào)道(文/梁浩斌)在北京時(shí)間10月16日開(kāi)幕的聯(lián)想Tech World 2024大會(huì)上,作為聯(lián)想的核心供應(yīng)商,英特爾CEO基辛格、AMD董事長(zhǎng)兼CEO蘇姿豐先后進(jìn)行了演講。兩家x86
    的頭像 發(fā)表于 10-21 00:53 ?3575次閱讀
    讓<b class='flag-5'>x86</b>再次偉大!英特爾AMD破天荒聯(lián)手,要搞定軟硬件兼容性

    KaihongOS桌面版成功適配x86設(shè)備,邀您搶先體驗(yàn)!

    2025年6月30日,KaihongOS桌面版已成功適配x86設(shè)備,首次開(kāi)啟開(kāi)發(fā)者Beta體驗(yàn)!我們誠(chéng)邀您參與本次體驗(yàn)計(jì)劃,共同探索國(guó)產(chǎn)操作系統(tǒng)的創(chuàng)新與潛力。您的反饋將幫助我們優(yōu)化系統(tǒng),打造更穩(wěn)
    的頭像 發(fā)表于 06-30 22:57 ?372次閱讀
    KaihongOS桌面版成功適配<b class='flag-5'>x86</b>設(shè)備,邀您搶先體驗(yàn)!

    聚徽廠家視角——X86 架構(gòu) vs. ARM 架構(gòu):工控一體機(jī)的算力、功耗與成本差異解析

    ,有助于企業(yè)精準(zhǔn)選型,實(shí)現(xiàn)工業(yè)生產(chǎn)效益最大化。 算力比拼:復(fù)雜運(yùn)算與高效并行的較量 X86 架構(gòu):復(fù)雜指令集的計(jì)算強(qiáng)者 X86 架構(gòu)憑借復(fù)雜指令集計(jì)算(CISC)設(shè)計(jì),在處理復(fù)雜數(shù)據(jù)和高負(fù)載運(yùn)算任務(wù)時(shí)優(yōu)勢(shì)盡顯。以運(yùn)行大型工業(yè)軟
    的頭像 發(fā)表于 06-07 14:56 ?282次閱讀

    迅為RK3568開(kāi)發(fā)板內(nèi)核模塊實(shí)現(xiàn)-設(shè)置交叉編譯

    成 “gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu”文件夾,這是實(shí)驗(yàn)需要的交叉編譯工具, 如下圖(圖 4-2)所示: tar -vxf
    發(fā)表于 04-21 16:45

    在linux編譯了cyusbserial SDK生成so文件,但是運(yùn)行測(cè)試程序和編寫(xiě)API都訪問(wèn)不到DLP3010EVM,為什么?

    主要想再arm-linux控制DLP3010,但是發(fā)現(xiàn)Ubuntu x86和 zynq 的petalinux 都不行 請(qǐng)問(wèn)TI對(duì)于linux控制DLP3010EVM有相關(guān)的示例,
    發(fā)表于 02-26 08:27

    迅為RK3588開(kāi)發(fā)板實(shí)時(shí)系統(tǒng)編譯-Preemption系統(tǒng)/ Xenomai系統(tǒng)編譯-獲取Linux源碼包

    3.1 Preemption 系統(tǒng)/ Xenomai 系統(tǒng)編譯 3.1.1 獲取 Linux 源碼包 編譯環(huán)境說(shuō)明: 本手冊(cè)使用的是迅為提供的編譯
    發(fā)表于 01-09 11:03

    Arm主板與x86主板的區(qū)別

    在當(dāng)今數(shù)字化迅猛發(fā)展的時(shí)代,計(jì)算機(jī)硬件的架構(gòu)選擇對(duì)于系統(tǒng)的性能、能效以及適用性具有至關(guān)重要的影響。Arm架構(gòu)與x86架構(gòu)是目前主流的兩種計(jì)算機(jī)體系結(jié)構(gòu),各自在個(gè)人計(jì)算機(jī)、服務(wù)器、嵌入式系統(tǒng)及移動(dòng)設(shè)備
    的頭像 發(fā)表于 01-07 12:21 ?740次閱讀
    Arm主板與<b class='flag-5'>x86</b>主板的區(qū)別

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核編譯之初次編譯

    即可完成代碼的編譯。我們先了解一編譯腳本的內(nèi)容。使用vi命令打開(kāi)build.sh腳本:elf@ubuntu:~/work/linux-4.1.15-elf1$ vi build.sh
    發(fā)表于 12-18 08:55

    飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核編譯之初次編譯

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

    英特爾和AMD組建x86生態(tài)系統(tǒng)咨詢(xún)小組

    在聯(lián)想2024 Tech World大會(huì)上,英特爾CEO帕特·基辛格宣布了一項(xiàng)重大合作:英特爾與AMD將共同組建X86生態(tài)系統(tǒng)咨詢(xún)小組。
    的頭像 發(fā)表于 10-16 16:34 ?662次閱讀

    英特爾將攜手AMD共同捍衛(wèi)x86生態(tài)

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

    飛凌嵌入式ElfBoard ELF 1板卡-開(kāi)發(fā)環(huán)境搭建之交叉編譯

    設(shè)置環(huán)境變量。設(shè)置編譯環(huán)境主要是指定目標(biāo)架構(gòu)和交叉編譯工具鏈,以及編譯過(guò)程中使用到的一些庫(kù)的路徑等,使用如下命令配置(.后邊有空格):. /
    發(fā)表于 09-29 09:51

    ARM 架構(gòu)工控機(jī)與 X86 架構(gòu)工控機(jī):差異究竟在哪?

    控制系統(tǒng)等行業(yè)。本文詳細(xì)分析一ARM工控機(jī)與X86架構(gòu)工控機(jī),供大家參考。 應(yīng)用領(lǐng)域:ARM控制器適用于小型應(yīng)用,邊緣計(jì)算、自動(dòng)化控制、物聯(lián)網(wǎng)關(guān)、智慧城市、智能設(shè)備等場(chǎng)景,比如ARMxy系列工業(yè)計(jì)算機(jī),X86適用于數(shù)據(jù)處理要求
    的頭像 發(fā)表于 09-20 15:13 ?1088次閱讀
    ARM 架構(gòu)工控機(jī)與 <b class='flag-5'>X86</b> 架構(gòu)工控機(jī):差異究竟在哪?

    X86架構(gòu)處理器有哪些優(yōu)點(diǎn)和缺點(diǎn)

    X86架構(gòu)處理器作為計(jì)算機(jī)領(lǐng)域的重要組成部分,具有多個(gè)顯著的優(yōu)點(diǎn)和一定的缺點(diǎn)。以下是對(duì)X86架構(gòu)處理器優(yōu)缺點(diǎn)的詳細(xì)分析。
    的頭像 發(fā)表于 08-22 11:25 ?4772次閱讀

    ubuntu 24.04嘗試使用riscv64-linux-musleabi_for_x86_64-pc-linux-gnu工具鏈編譯cv1800大核出現(xiàn)報(bào)錯(cuò)的原因?

    ubuntu 24.04嘗試使用riscv64-linux-musleabi_for_x86_64-pc-linux-gnu工具鏈編譯cv1800大核,結(jié)果出現(xiàn)如下報(bào)錯(cuò): /ho
    發(fā)表于 07-16 08:20