Xenomai for Debian Jessie

安裝內核源碼包

apt install linux-source-3.16linux

安裝其餘編譯須要的工具: apt install build-essential libc-dev libc6-dev pkg-config ncurses-devbootstrap

安裝好的內核源碼和config文件在 /usr/src中,linux-source-3.16.tar.xz是源碼壓縮包(找個地方解壓下,下面稱解壓的linux源碼根目錄爲 $linux-tree),而linux-config-3.16中有須要的config文件,找一個和 uname -r 輸出類似的config,對於32位的Debian來講應該是 config.i386_none_686-pae.xz,解壓以後重命名爲 .config放到 $linux-tree中去,如今能夠編譯下內核試試了架構

  • make menuconfig (輸入 / 開始搜索,而後輸入localversion,按1選擇本地版本,輸入一個本身能識別的後綴)
  • make bzImage modules
  • sudo make modules_install
  • sudo make install

這樣編譯好的內核就自動安裝到 /boot/ 目錄下去了,而模塊在 /lib/modules/3.16.36xxx 下面了函數

簡單運行下 grub2-mkconfig -o /boot/grub2/grub.cfg 就能夠將新編譯的內核放到開機的grub菜單中去了(趕忙試試吧)工具

下載Xenomai和I-pipe

https://xenomai.org/downloads/xenomai/stable/latest/ 我下載的是 3.0.3 版本,解壓,後面稱xenomai源碼根目錄爲 $xeno-tree測試

還要下載對應版本的 I-pipe 補丁,我下載的是這個 https://xenomai.org/downloads/ipipe/v3.x/x86/older/ipipe-core-3.16-x86-3.patch (後面我發現好像有未發佈的對應 3.16.36版本的i-pipe補丁,不過我沒有再試)ui

安裝編譯工具:apt install autoconf automake libltdl-devip

(注意:必須安裝 libltdl-dev,不然bootstrap都通不過,參見 https://xenomai.org/faq/ )源碼

Patch內核

雖然Xenomai3也能夠在正常的linux下運行,但那固然不是咱們想要的,咱們仍是要雙內核架構的 cobalt,首先就要把patch打內核上去,因爲咱們沒有對應到內核小版本的補丁,因此這一步還須要手動來調整一下it

  • cd $linux-tree
  • patch -p1 < ipipe-core-3.16-x86-3.patch

會出現一些失敗,還有一些偏移後成功的項,根據我此次的經驗,直接顯示成功的就不用管了,fuzz後成功的要注意下,偏移太多了要重點檢查,頗有可能就錯了,若是失敗了,會生成一個 .rej 文件,因此在 $linux-tree 目錄,執行 find . -name *.rej 就能找到這些失敗的位置了。每一個 @@表示一個patch塊的開始,而同行最後一個@@後面表示當前的context(即在修改塊上面的代碼,能夠先搜索到這個位置,再看),下面沒有+或-的也是改動的未改變的上下文,-表示刪除 +表示添加,仔細看看,通常失敗的狀況也很好判斷出應該如何修正,極少會遇到函數改名的狀況,須要注意一下,建議你們手動來一遍。

把全部的rej都搞定了以後,再根據xenomai的說明來準備內核,即執行 scripts/prepare-kernel.sh --linux=$linux-tree --arch=x86

OK下面就是配置內核了, make menuconfig,你可能會看到 Xenomai下面有一堆warning,根據這個網頁來配置就能夠了 https://xenomai.org/2014/06/configuring-for-x86-based-dual-kernels/,即

  • CONFIG_CPU_FREQ – Disable
  • CONFIG_APM – Disable
  • CONFIG_ACPI_PROCESSOR – Disable
  • CONFIG_CPU_IDLE – Disable
  • CONFIG_INTEL_IDLE – Disable
  • CONFIG_INPUT_PCSPKR – Disable
  • MIGRATION/COMPACTION -Disable

若是還有其餘的warning,請自行嘗試把warning消除,多看看help,有一些項被其餘項所選擇,不能直接改變,要先改選擇了它的項。另外注意ACPI不能所有都不選擇,那樣會啓不了機,或者啓機特別慢(個人是PCI IRQ錯誤,而且USB都很差使),ACPI只把 PROCESSOR選掉。

好了,從新編譯內核吧 make bzImage modules && sudo make modules_install && sudo make install

從新啓動,不出意外的話就能夠啓機了,啓動後 dmesg | grep Xenomai,應該會有一些輸出,不然就是有問題了。另外,有一個smi的問題,這個須要修改grub的啓動參數,給內核參數後面加上 xenomai.smi=enabled,不過這項可能會致使硬件損壞,好比CPU過熱燒掉了(看這裏 https://xenomai.org/2014/06/configuring-for-x86-based-dual-kernels/dealing-with-x86-smi-troubles ),本身看着辦吧。

編譯xenomai庫

  • cd $xeno-tree
  • scripts/bootstrap
  • mkdir build
  • cd build
  • ../configure --with-core=cobalt --enable-smp --enable-pshared  (基本上你們應該都是多核處理器,默認內核都打開了SMP)
  • make
  • sudo make install

安裝完的庫在 /usr/xenomai 文件夾中,執行 sudo /usr/xenomai/bin/xeno-test 便可,注意必須用root才能運行測試,另外這個測試默認不會本身結束,必須 Ctrl+C結束, 看看 /usr/xenomai/bin/latency --help,就知道 latency 測試的參數了。

PS:個人T410i本子跑個實時任務仍是不錯的,50us輪循週期,最大latency爲11us多,還能夠!

相關文章
相關標籤/搜索