SyntaxHighlighter

2013年12月27日金曜日

BeagleBone BlackでXenomaiを有効にするための覚書

2014/03/10 加筆修正

Xenomai[1]とは?


Xenomaiとは, Linuxにいくつかのパッチを当てることにより, ユーザスペースでハードリアルタイム性を持たせたアプリケーションを開発可能にするフレームワークのことです. リアルタイムを実現するコアな部分は互換性を維持したまま, GNU/Linuxを使って開発することができるような設計になっています[2].


BeagleBone Black[3]へのインストール


今回はこのXenomaiをBeagleBone Blackの標準OSであるAngstrom[4]にインストールする手順を説明します. 前提としてクロスコンパイル環境は整っている, BeagleBone Blackがすでに動作済み(SDカード上にすでにイメージを書き込んでいる)ものとします. 作業手順は大まかに以下のとおりになり,
  • BeagleBone用のLinuxのソースをダウンロードする.
  • パッチを当てる.
  • Xenomaiをダウンロードする.
  • XenomaiのパッチをLinuxのソースに当てる.
  • カーネルをビルドする.
  • ライブラリをビルド, インストール.
のような手順を取ります.
ではインストールしていきます. まずカーネルをビルドします

# mkdir bbb
# cd bbb
BeagleBoneのカーネルソースをダウンロード
# git clone https://github.com/beagleboard/kernel.git
Xenomaiをダウンロード
# wget http://download.gna.org/xenomai/stable/xenomai-2.6.3.tar.bz2
# tar xvjf xenomai-2.6.3.tar.bz2
BeagleBoneのカーネルへ移動
# cd kernel
# git checkout origin/3.8 -b 3.8
# ./patch.sh
# cd kernel
# wget "http://arago-project.org/git/projects/?p=am33x-cm3.git;a=blob_plain;f=bin/am335x-pm-firmware.bin;hb=HEAD" -O firmware/am335x-pm-firmware.bin
# cp ../configs/beaglebone .config
次にXenomaiのパッチを当ててカーネルをビルドします.

Xenomaiのパッチを当てる
# patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-pre.patch
# patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/ipipe-core-3.8.13-arm-3.patch
# patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-post.patch
# cd ../../xenomai-2.6.3/scripts/
# ./prepare-kernel.sh --arch=arm --linux=../../kernel/kernel
# cd ../../kernel/kernel
# make oldconfig
# make -j5 ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- LOADADDR=0x80008000 uImage dtbs modules

ビルドが終了すると, uImageができているのでSDカードの方に移動させます.  また, カーネルモジュールのインストールも行います. XenomaiのコマンドはクロスコンパイルではうまくビルドできないのでBeagleBone Black上でビルドし, インストールを行います.

SDカードへuImageを移動させる(/mediaにマウント済みの場合)
# cp ./arch/arm /boot/uImage /media/Angstrom/boot/uImage-3.8.13
# cp -r ../../xenomai-2.6.3 /media/Angstrom/home/root

カーネルモジュールのインストール
# make ARCH=arm INSTALL_MOD_PATH=/media/Angstrom modules_install

作業をBeagleBonoe Black上に移します. Xenomaiのライブラリとコマンドをインストールします

# cd ~/xenomai-2.6.3
# ./configure CFLAGS="-march=armv7-a -mfpu=vfp3" LDFLAGS="-march=armv7-a -mfpu=vfp3"
# make
# make  install

インストール作業が終了しました. BeagleBone Blackを再起動してXenomaiが動作しているか確認を行います.

# dmesg | grep Xenomai

とした時に, 以下のように表示されれば正常に動作しています.

I-pipe: head domain Xenomai registered.
Xenomai: hal/arm started.
Xenomai: scheduling class idle registered.
Xenomai: scheduling class rt registered.
Xenomai: real-time nucleus v2.6.3 (Lies and Truths) loaded.
Xenomai: debug mode enabled.
Xenomai: starting native API services.
Xenomai: starting POSIX services.
Xenomai: starting RTDM services.



最後に

Xenomaiをインストールするにあたりいくつかのサイトを参考にさせて頂きました[5], [6], [7]. Xenomaiは航空宇宙関連やロボットなどのリアルタイム性を追求される現場で使われているようです[8]. 今後はXenomaiのフレームワークを使ったソフトを作っていこうと思います.
また, この記事をを英訳し, 内容を加筆修正したBruno Martins氏に感謝を申し上げます[9].
Bruno Martins, thank you for translating this article into English and  modifying better.


参考文献

1
"Xenomai", http://xenomai.org/
2
Xenomai, "Documentation summary", http://www.xenomai.org/documentation/branches/v2.3.x/pdf/Native-API-Tour-rev-C.pdf, (accessed 2013-12-26)
3
"BeagleBone Black", http://beagleboard.org/, (accessed 2013-12-26)
4
"Angstrom", http://www.angstrom-distribution.org/, (accessed 2013-12-26)
5
Gentoo Linux Documentation, "Gentoo on the BeagleBone Black", http://dev.gentoo.org/~armin76/arm/beagleboneblack/install.xml, (accessed 2013-12-26)
6
たけおか ぼちぼち日記, "Raspberry Pi に Xenomai(Linux実時間拡張)を入れる", http://ameblo.jp/takeoka/entry-11582930289.html, (accessed 2013-12-26)
7
Silicon Linux, "BBB_kernel - Silicon Linux Wiki", http://www.si-linux.co.jp/techinfo/index.php?BBB_kernel, (accessed 2013-12-26)
8
トータル・メジャーメント・システム株式会社, "Xenomaiとは リアルタイムOS用ソフト開発", http://www.tmsystem.co.jp/product/xenomai/, (accessed 2013-12-26)
9
Bruno Martins Random ramblings and occasional worthwhile stuff, "Xenomai on the Beaglebone Black in 14 easy steps" http://brunosmartins.info/xenomai-on-the-beaglebone-black-in-14-easy-steps/, (accessed 2014-03-10)

2013年9月11日水曜日

Gentoo/Linuxでゲートウェイルータ作った時のメモ

OS: Gentoo/Linux
kernel: gentoo-sources-3.10.7

eth0: LAN側のNIC
eth1: WAN側のNIC


# emerge rp-pppoe


# cd /usr/src/linux
# make menuconfig

      Networking support --->
        Device Drivers
          [*]  Network device support
          <*> PPP (point-to-point protocol) support
            <*> PPP over Ethernet
            <*> PPP support for async serial ports
        Networking options --->
          [*]  IP: advanced router
          [*]  Network packet filtering framework (Netfilter) --->
            Core Netfilter Configuration --->
               {*}  Netfilter Xtables support (required for ip_tables)
              <M> "TCPMSS" target support
            IP: Netfilter Configuration  --->
              <M> IPv4 connection tracking support (required for NAT)
              <M> IP tables support (required for filtering/masq/NAT)
                <M> Packet filtering
                  <M> REJECT target support
                <M> Full NAT
                  <M> MASQUERADE target support
                  <M> REDIRECT target support


# emacs /etc/conf.d/net

config_ppp0="ppp"
link_ppp0="eth1"
plugins_ppp0="pppoe"
pppd_ppp0="
         defaultroute
         usepeerdns"
username_ppp0="user@example.com"
password_ppp0="pass"

# chmod 600 /etc/conf.d/net


# cd /etc/init.d
# ln -s net.lo net.ppp0
# rc-update add net.ppp0 default
# /etc/init.d/net.ppp0 start


# iptables -P INPUT ACCEPT
# iptables -P OUTPUT  ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# iptables -t nat -A POSTROUTING -j MASQUERADE
# /etc/init.d/iptables save
# /etc/init.d/iptables start
# rc-update add iptables default


# echo 1 > /proc/sys/net/ipv4/ip_forward
# for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
# emacs /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.ip_dynaddr = 1


多分これで動いた
特にiptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
を設定しないとWebサイトによっては接続ができなくなる


参考
Linuxルーター構築(rp-pppoe+iptables) http://centossrv.com/linux-router.shtml

2013年8月26日月曜日

GentooでLatex

user$ sudo USE="cjk" emerge -v texlive
user$ platex sample.tex
user$ dvipdf sample.dvi
user$ evince sample.pdf


2013年5月2日木曜日

AEOI-CTF write-up Reverse200

タイトルの通り先日行われたAEOI-CTFのwrite-upです
バイナリ解析の問題です


先日CTFやらセキュリティキャンプを宣伝する機会があったので
その時に使用したスライドを使っています







ではでは