移植Xenomai到基于飛騰FT2004 CPU的FT Linux系統
======================================================================================
1 目前飛騰FT2000/4相關設備驅動還沒有開源,需要先聯系飛騰軟件生態部獲取FT Linux源代碼
2 如需在x86交叉編譯arm64內核,推薦使用Linaro gcc編譯器,鏈接如下:
https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
環境變量配置:
sudo tar -xf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt
export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
export ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
export CC=aarch64-linux-gnu-gcc
3 Xenomai的移植基于FT Linux(內核主線版本為4.19.115),需下載并打上ipipe補丁
wget https://xenomai.org/downloads/ipipe/v4.x/arm64/ipipe-core-4.19.115-arm64-6.patch
cd <>
patch -p1 < ipipe-core-4.19.115-arm64-6.patch
4 針對MSI中斷的patch
patch -p1 < irq-msi.patch
5 生成Xenomai實時內核的補丁,并打到FT-Linux內核上
wget https://xenomai.org/downloads/xenomai/stable/xenomai-3.1.tar.bz2
tar -xf xenomai-3.1.tar.bz2
cd xenomai-3.1/scripts
./prepare-kernel.sh --linux=<> --arch=arm64 --outpatch=<>
cd <>
patch -p1 < <>
6 編譯配置內核
cd <>
make defconfig
make sdk.config
make -j6
7 使用新編譯的內核啟動系統即可
8 Xenomai庫的編譯(需要安裝automake和libtool,在FT2004的Ubuntu 18.04系統上編譯)
cd xenomai-3.1
./scripts/bootstrap
./configure --enable-pshared --enable-smp --with-core=cobalt
make -j4
make install
設置環境變量:
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
9 測試結果
使用stress增加系統負載,用latency測量系統延時
stress -c 10 -m 4
latency -t 0 -p 100 -P 99 -h -g result.txt
基于Xeonmai實時內核的測試結果
# ----lat min|----lat avg|----lat max|-overrun|---msw|
# 11.370| 22.550| 92.052| 0| 0|
基于Preempt-RT的測試結果
# ----lat min|----lat avg|----lat max|-overrun|---msw|
# 10.890| 15.444| 206.049| 207| 0|
在系統空閑的情況下,用latency測量系統延時
latency -t 0 -p 100 -P 99 -h -g result.txt
基于Xeonmai實時內核的測試結果
# ----lat min|----lat avg|----lat max|-overrun|---msw|
# 10.280| 21.182| 34.966| 0| 0|
基于Preempt-RT的測試結果
# ----lat min|----lat avg|----lat max|-overrun|---msw|
# 9.611| 15.239| 298.519| 215| 0|