LinuxCNC(uspace ver) On CentOS6.8 の導入

(2016/10/25追記,CentOS 6.5として扱ってたけど,6.8でした.ごめんなさい.タイトル修正済み)

目的

古いマシン(Intel Atom 330 @ 1.60GHz, 2048GB RAM)を使って,NCフライスを制御したい.CentOS 6.56.8のほぼminimalな環境は整備されていたので,まずは,非リアルタイムなLinuxCNCが走るか確認した.

とりあえず,起動出来た感じ.

準備

  • LinuxCNCはウィンドウを出してくるので,とりあえずデスクトップ環境を入れておく.

vncserverも設定しておいた.

http://linuxcnc.org/docs/devel/html/code/building-linuxcnc.html
を見ながら作業を進めた.

configure編

最終的には下記コマンドでconfigure可能:
./configure --with-realtime=uspace --without-libusb-1.0 -enable-non-distributable=yes

ハマったこと:

  • usblib-1.0が入らない?usblibがあるけど認識していない.今回は必要ないので,--without-libusb-1.0を付加
  • libmodbusの導入.configureはパッケージの有無を確認しているので,rpm化する必要あり
  • tkimgの導入.Debian系ではパッケージあり,CentOSではナシ.Img-Sourceを落としてきてmakeする.--prefixが指定されていないので注意
  • -enable-non-ditributable=yesが必要?
  • Python2.7の導入.CentOS6.5の公式リポジトリだと2.6なので,2.7を導入する必要あり.(configure時に--enable-sharedを付けないと,make時のリンクで引っかかる.)(2.6と切り替えられるようにしないとyum等が動作しない.update-alternativesで対応可)
  • 他にも足りないの聞かれるが,公式リポジトリからyum installで対応可

make編

configureしたらmakeすればおk.

ハマったこと:

  • gcc(stdlibc++)4.9.4の導入.公式リポジトリは4.4.7なので,C++11系コードをコンパイルできない.(atomicを使ってる)(gccのmakeでmakeinfoないって言われる.texinfoパッケージ入れる→config.status内のmissing makeinfo→makeinfoに変更で解決?)
  • boostのバージョンが古い?BOOST_FORCEINLINEに対応してないので,1.6.2をいれる

実行編

linuxcnc-dev/script/linuxcncを実行.メガネペンギンが出てくれば成功

f:id:sosoru_m:20161024215649p:plain
↑latency-histogramの実行結果.右が1000usec周期でパルスを出す場合.真ん中がとんがってる(=遅延なしの場合が多い)ので頑張ってるけど,プロットの枠外に広がるほどバラツキがあるようだ.左は25usec.遅延バラバラで全く駄目.

補足(TCLLIBPATHの結合がおかしい?)

latency-histogramを実行すると,tclshがpackage require Img出来ないとぬかしてくる.
linuxcncは,tclshに渡す前にrip-environmentを実行して環境を整えてくれているのだけど,環境変数$TCLLIBPATHを再定義する際に,パス文字列の結合にスペースでは無くコロンを使っているので,tclshは正しくパッケージを読み込めなくなるみたい.

scripts/rip-environment:

if [ -z "$TCLLIBPATH" ]; then
    TCLLIBPATH=$EMC2_HOME/tcl
else
    TCLLIBPATH=$EMC2_HOME/tcl:$TCLLIBPATH

↓

if [ -z "$TCLLIBPATH" ]; then
    TCLLIBPATH=$EMC2_HOME/tcl
else
    TCLLIBPATH="$EMC2_HOME/tcl $TCLLIBPATH"

にすれば動いてくれる.

つづく

予想通り普通のカーネルでは役に立たないので,リアルタイムカーネルを入れましょう.つづく