構建Xenomai的Linux實時系統

2021-08-21 18:14:07 字數 3573 閱讀 6145

linux:ubuntu 14.04+3.13, 替換核心,核心版本:3.14.17 

xenomai:2.6.4

$ sudo apt-get install kernel-package 

$ sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge

$ sudo apt-get build-dep linux

$ sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev

linux-3.14.17       

xenomai-2.6.4

a.把軟體移到 /usr/src/

b.解壓:tar –xvf (不要一起解壓,乙個乙個來,否則報錯)

a.預處理核心,進入xenomai目錄

$ cd xenomai-2.6.2

$ ./scripts/prepare-patch.sh --linux=../linux-3.14.17/--adeos=./ksrc/arch/x86/patches/ipipe-core-3.14.17-x86-4.patch

b.進入linux-3.14.17目錄

$ make menuconfig     裁減核心,不做設定直接退出(暫時沒搞懂要裁剪哪部分)此步會生成乙個 .config 的配置檔案
輸入以下命令編譯核心,並建立安裝包,等待約2小時至編譯完成:
=-xenomai kernel_image kernel_headers

// 這裡是生成 兩個.deb 的安裝包,還可以使用

// $ make bzimage modules ----- 編譯核心與模組

// $ make modules_install 安裝模組

// $ make install 安裝核心

xeno_nucleus

xeno_posix

xeno_native

xeno_rtdm

在/etc/default/grub檔案中加入以下內容:
grub_cmdline_linux="quiet acpi_osi=linux acpi_backlight=vendor"
把timeout=-1

更新啟動項:update-grub

進入/usr/src
sudo dpkg -i *.deb
uname  -r 檢視核心是否已經更換
沒換就去改改啟動項,這裡搞了半天,沒搞懂ubuntu的grub是怎麼回事 應該是虛擬機器vmware的問題,

修改timeout後,關機(ubuntu),開機,不要用init 6重啟。

(補充:grub啟動項設定可以檢視另一篇blog《ubuntu grub設定》,之前是在虛擬機器上用init 6重啟,不會在啟動項介面停留)

sudo dpkg-reconfigure bash
cd /usr/src /xenomai-2.6.4

sudo ./configure --enable-dlopen-skins

sudo make

sudo make install

至此,完成了xenomai實時擴充套件的安裝。

此時可進入/usr/xenomai/bin目錄下使用自帶的測試命令完成測試。

如xeno latency

直接修改/etc/enviroment,修改的是root的path,重啟

ex01.c 程式用來建立和執行「demo」的任務,demo任務是用來輸出hello world
程式**:

#include #include #include #include #include #include #include rt_task demo_task;

void demo(void *arg)

int main(int argc, char* argv)

編譯此程式:

編譯頭路徑和動態庫路徑

$ xeno-config --xeno-cflags

$ xeno-config --xeno-ldflags

$ export cflags=`xeno-config --xeno-cflags`

$ export ldflags=`xeno-config --xeno-ldflags`

$ gcc $cflags ex01.c $ldflags -lnative -lxenomai -o ex01 //注意順序,否則會錯

執行之前,告訴linux動態庫的位置
$ export ld_library_path=/usr/xenomai/lib

$ ./ex01

預處理核心時:

錯誤:prepare-kernel.sh: cannot read i-pipe patch from /dev/null

原因:之前準備安裝xenomai-3.3.0,結果在安裝的時候,配置—adeos時,找不到ipipe的位置。

網上說在./ksrc/arch/x86/patches/目錄下,但是3.3.0的沒有此目錄。

於是換了個2.6.4的版本,同時換了ipipe-core-3.14.17-x86-4.patch對應的linux 3.14.17的核心,

此時即沒問題了。具體原因可檢視 參考[3]。

解決:換版本 linux-3.14.17 xenomai-2.6.4

ipipe的目錄:/usr/src/xenomai-2.6.4/ksrc/arch/x86/patchs/ipipe-core-3.14.17-x86-4.patch

錯誤:安裝完成後,必須在/usr/xenomai/bin目錄下才能使用xenomai的命令
檢視核心 name –r ,詳見安裝步驟
[1] 安裝步驟 

[2] 安裝步驟 

[3] i-pipe錯誤 

[4] 修改grub啟動項 

[5] 修改path 

[6] xenomai程式設計筆記 

[7] xenomai使用手冊很好,由於版本問題有點錯誤(gcc那句,正確見上文),要翻牆 

[8] 利用xenomai api程式設計時,編譯錯誤的解決方案 

[9] 

LINUX作業系統嵌入Xenomai實時核

由於linux系統的實時響應達不到更高要求,所以要嵌入xenomai實時核 可以去官網看看適不適合你的硬體處理器 我的xenomai解壓在 usr src資料夾下,開啟資料夾cd usr src xenomai 3.0.2執行指令scripts prepare kernel.sh linux usr...

常用的Xenomai 原生API

常用的xenomai 原生api 1 任務管理 xenomai 本身提供的一系列多任務排程機制,主要有以下一些函式 int rt task create rt task task,const char name,int stksize,int prio,int mode 任務的建立 int rt t...

幾類常用的Xenomai 原生API

幾類常用的xenomai 原生api 1 任務管理 xenomai 本身提供的一系列多任務排程機制,主要有以下一些函式 intrt task create rt task task,const char name,int stksize,int prio,intmode 任務的建立 int rt t...