やりたいこと
NUCにUbuntu18系とROSをインストールする.今後の使用を考えているデバイスが,デバイスドライバや既存のプログラムの関係で昔のバージョンの環境しか使えないというのは,組込みあるある.JSKEUSを使いたいので,必要なROS (Melodic)が推奨しているUbuntu 18.04を用いる.
やったこと
- ASUS NUK13ANKにUSBメモリからUbuntu18.04 LTS (Bionic Beaver)をインストールする.
- USBメモリにブートできるLinuxイメージを入れるやり方は検索すると出てくる.こういう本家からダウンロードして,rufusのようなソフトを使って起動可能なデバイスを作ればよい.
- Ubuntu 18.04 LTSとLubuntu 18.04 LTSは両方インストールできた.Lubuntuの方が軽くてLXQtがWindowsデスクトップに近くていいのだが,後から入れるいろいろなもののことがあるので,標準のUbuntuにした.
- まずUSBメモリの試用版でブートして,それからインストールした.
- Ubuntu 20.04 LTSはUSBメモリから起動するが,なぜかインストールできなかった.
- 有線LANにつながるように調整する.
- Ubuntu 18.04 LTSの標準カーネルは ver.5.0で,標準的なアップデートでは5.4.0-150-genericまで上がる.
- しかし,NUC13ANK 搭載のオンボード LANチップ (Intel I226-V)はver. 5.10以降のカーネルにしか対応していない模様.
- そのため,ver. 5.15系のカーネルを入れることにした.ubuntuのメインラインカーネル置き場にv2.6.27.60以降の分は全部あるので,ver. 5.15に拘る必要はないが,ver. 5.10から対応なら少し後のバージョンの方がバグが減ってる気がする.
- /usr/srcに移動.v5.15.193/内に各CPUごとのリンクがあるが,intelのもamdのも普通のPCに載っているようなCPUならamd64用のでいい.リンクをコピーして,
> wget https://kernel.ubuntu.com/mainline/v5.15.193/amd64/linux-headers-5.15.193-0515193-generic_5.15.193-0515193.202509111705_amd64.deb
などとして4つ(headers, headers-generic, image, modules)をダウンロード.
- dpkg -i linux-headers-5.15.193*などとして4つをインストール.
- linux-headers-5.15.193-0515193-genericは,インストール自体はされているようだが,依存関係のエラーで設定されなかった.既存のlibc6とlibssl3のバージョンが古いためらしい.v5.15.50とか少し古いバージョンなら大丈夫かもしれないが,未検証.今回はこのままにする.外部ドライバをコンパイルする時などに問題が発生する可能性がある.
- 再起動してv.5.15.193のカーネルで起動していることを確認し,LANケーブル挿して通信を確認した.
これからやること
- ROS (Melodic)のインストール.ROSについてはここがよくまとめてくれている:ROSによるロボット操作法 Part-1 実機編
- ROSをインストール前に,Ubuntuも入れただけではmakeやgccすら入っていないので,build-essentialとcmakeをインストールしておく.
> sudo apt install build-essential
- ROS (Melodic) をROS wikiの通りにインストールする.手順自体はROS jaのものと同様であろう.
- JSKEUSのプロジェクト(https://github.com/euslisp/jskeus/)をgithubからクローンする.やり方はここと同様(クローンまで):Git を Ubuntu にインストールしてリモートリポジトリにプッシュする
- ROSが入っていたら,apt install ros-melodic-roseusでjskeusも入るらしいが未確認.
-
jskeusがなくてもkxreusをgithub.com/inabaeus?からクローンすればいいらしいが,稲葉先生のgithubは消えているので??
- euslisp/jskeusにある通りにeuslispをインストールして設定する.
- (以下のメモがあるが何のことかわからない)
- makeの最後にあるメッセージのとおり,source .bashrc する.
- 環境変数が必要 export EUSDIR=~/jskeus/eus
- .basheus
- ここまで再起動していなくて何かうまくいかないようなら,Ubuntuを再起動する.
- これでeuslispを使った動作シミュレータ,KXRを使ったロボットをリーダー・CGをフォロワとした遠隔操作シミュレータなどができるはず.
- Ubuntu上でのKXR用自作プログラム環境rcb4eusのgit cloneとbuild
- ロボットモデル可視化
- サンプル動作生成
- さらにJSKのロボットの背中にあるradxa zeroを使った物体認証
- radxa zero用のディスプレイが別途必要.radxa zeroの方はmicroHDMIだから,それ用のアダプタかケーブルが必要.
- radxa zeroのUSB-CポートからRealSense D405カメラ,キーボードを用いるための,USB-C-USB3.0ハブが必要.
私は8.シミュレータまでしか実装していないので,そこから先は自身で確かめてください.
TOSHIBA dynabook Satellite B552(MTRR, e820, pae, Local APIC, NMI watchdog, Intel 82579V ethernet e1000e)に対し,Ubuntu13.10+2.6.32-ART+インタフェース社のデバイスドライバをインストールした件をまとめる.(あえて鍵を掛けない)
まず,ART-Linuxをインストールする.
- Ubuntu13.10LTSを普通にインストールする
- リポジトリをold-releasesに修正する.
- /etc/apt/sauces.list と sauces.list.d/ubuntu-ja.listのドメイン名の最初の辺り(jp.archiveなど)を”old-releases”と書きかえる.
- ここを参照
- いろいろとアップグレードする
- sudo apt-get update upgrade
- grubの再インストールは絶対しない
- ディストリビューションアップグレードはしない
- 不足するモジュールをインストールする
- sudo apt-get install build-essential
- sudo apt-get install ncurses-dev
- 研究室内部者向けCDのART-Linuxのカーネル(20130227の中)とインタフェース社ドライバ(driversの中)を/usr/src/にコピーする
- ART-Linuxをインストールする
- linux-headers-…とlinux-sources-… をsudo dpkg -iでインストール.debもaptも使えないので注意.
- sourcesは解凍されるだけだから,sources.tar.bz2 をsudo tar -jxvfで展開.
- kernel imageはインストールしない(うまくいかない)
- 試みるときは,kernel-img.confにdo_initrd=yesを追記.
- kernel-imageをうまくインストールできないのは,元がkernel3系なのにkernel2系のmkinitrdをしようとしてエラーを出されているから.初期インストール時をkernel2系にしておけばいけるかもしれない.
- ソースファイルからARTのカーネルを再構築する.
- その前に普通のUbuntu カーネルの.configをソースフォルダにコピーする.ソースが入っていなくて見つからないなら/boot/config-3.11.0-12-generic(のような名称の現在起動しているカーネルのconfig)をコピー
- make xconfigは使えない.make menuconfigする
- まず最後の辺りにあるloadで現状のconfigを読み出す
- 整合が取れない部分があるので,いちいちチェックするが,多くはそのままでいい
- Processor type and featuresでARTに関係するところは最初のやつだけ入れる
- ART scheduler Support はON
- ART scheduling period in micro second はデフォルトで1000 (=1ms),研究内容で調整する
- それ以外のART~はOFF
- Asymmetric multi-processing supportはOFF
- [Device drivers]-[input device]-[touchscreen]-[motorola]は外す
- Loadable modulesで次のようにする.CONFIG_MODULE_force_LOAD=y, CONFIG_MODNERSIONS=n つまり,可能な限りカーネルバージョンの違いが影響しないようにする
- kernalのmakeでエラーが出るようなら以下をする
- art_irq.hの art_irr_structメンバにraw_spinlock_t *lock追加
- 同#include 〈linux/kernel_stat.h〉追加
- arch/x86/kernel/ptrace.cのsyscall_trace_enter()とsyscall_trace_leave()の型でエラーが出るならasmregparamを取る
- カーネルのリコンパイルをする
- sudo make bzImage modules module_install
- sudo installkernel 2.6.32-art arch/i386/boot/bzImage-2.6.32-art System.map
- これでART-linuxはインストール成功。
- 万が一initrdが作られなかったら,”sudo mkinitramfs -o /boot/initrd.img-2.6.32-art 2.6.32-art”でbootに自力でinitrdを作る.ここを参照.
- grubが作られていたら起動設定する
- /etc/default/grub のGRUB_HIDDEN_TIMEOUTをfalse
- GRUB DEFAULTを”2>0”でART-Linuxが自動起動する
次に,インタフェース社のデバイスドライバをインストールする.
- コンパイルのパラメータCFLAGのところに-fno-stack-protectorを追加する.
- Makefileについては,ここを参照.
- dpg0100, dpg0101, gpg3100, gpg3300, gpg6204の全部をmake clean, make, make installしなおす.カーネル再コンパイルででバージョンチェックをしない設定にできていたら,makeは通る.
- sudo depmod -aしてsudo sh insad.shなどし,sudo sh setup.shをする.
- サンプルファイルがそのままではmakeできない問題がある.
- gpg3100などが読めていない:-lgpg3100などは.cファイルより後に読み込ませるようにMakefileを書き直す.ライブラリのリンクについてはここを参照.
- art_syscalls.oがリンクできない:/usr/src/linux/libにあって/usr/lib/にないので,コピーしておく.
- <linux/art_task.h>がincludeできない:Makefileに -I/usr/src/linux/include/追記(他のヘッダファイルもあるのでコピーではダメ)
何か問題があれば,以下のを参考にする
Panasonic CF-W2にUbuntu8.10+ART2.4.26などインストールした件.
- Ubuntu8.10+ART2.4.26ならカーネルイメージで普通にインストールできる.
- Xの設定はおかしい.
- ドライバはバージョンエラーでやはりインストールできない.
- PCカードも認識していない
- 結局,カーネルを再構築する.
- カーネルやInterfaceデバイスドライバのmakeエラーへの対応.
- makeで’art_traceが未定義’というエラーが出る:art_tasc.cでart_trace(0)のところのifdefが,ifdef CONFIG_ART_TRACEであるべきところがifdef CONFIG_ARTとなっていたためと思われる.そこを修正した.
- scatterlist構造体にpageメンバがいないと言われる.iclude/asm/scatterlist_32.hにstruct scatterlistの定義があるので,先頭メンバにstruct page *page;を追加.
- struct pageを定義するヘッダをincludeしていない様子であるので,<#include linux/mm_types.h>を追記.これは昔のカーネルにしかないメンバの様子.ここも参照.
- SA_INTERRUPTとSA_SHIRQが定義されていないとエラー.どうLinux 2.6.18以降で<linux/interrupt.h>が書き換わったらしい.
- SA_INTERRUPT – ハンドラ関数実行中は割り込み禁止 -> IRQF_DISABLED
- SA_SHIRQ – 割り込みを共有 -> IRQF_SHARED
- struct pt_regs *regが定義されてないと言われる:<asm/ptrace.h>にある.エラーが出る箇所はkernelのバージョンごとにstruct pt_regs *regを引数に入れるか入れないか場合分けしているけど,入れない場合も関数内で使うバグであるので,場合分けをコメントアウト.
- menuconfig内でHIMEM=0ff(under 1GB) に設定
- これで無事ビルドできてカーネルがインストールできる:sudo make dep bzImage module modules_install install
- initrdがなく起動しないので,sudo mkinitramfs -o /boot/initrd.img-2.6.24.6-art 2.6.24.6-artでinitrd作り直す.
- 無事起動
- /boot/grub/menu.lstのARTのkernel-bootオプションを”quiet splash”から”text”に変更して,CUIモードにする
- たぶんXの設定をちゃんとしても1msサンプリングするとマシンパワーが足らない
- startxも一応成功するが,動作はもっさりするので,よほどの時以外はやめた方がいい.
インタフェース社のドライバについて
- これらに書いてある処理はドライバのmakeができない問題に対するものであるので,今回は不要だった.
https://www.rbt.his.u-fukui.ac.jp/~naniwa/comp/art-linux.html https://qiita.com/larking95/items/257f99177058d5ed0030
- しかしmakeできないので修正
- ln -s /usr/include/fbida.hとかが必要.
- gpg6204はpenc_info.h内のfbipenc.hの指定位置がおかしいので「このフォルダ」に修正.
- この時点ではmodprobe dpg0100は失敗する.
- dmesgで確認するとdpg0100でno version for “struct_module”およびmodule license ‘unspecified’と出ている.これは無視してもいいらしい.
- Unknown symbol ‘stack_chk_fail’が問題らしい.
- dpg0100のMakefile CFLAGオプションに-fno-stack-protectorを追加.
- dpg0100, dpg0101, gpg3100, gpg3300, gpg6204の全部をmake clean, make, make install,sudo depmod -A
- しかしダメ.
- dpg0100はmodprobeできる
- それ以外がダメ.isnmodでpageに関してsegmentation faultが出る.ドライバのバージョンを変えるくらいしか,他に手立てがない.
最終的にはこういう整理し直したドライバが公開されている
Ubuntu 10.04LTS + ART-Linux + インタフェースのボード
Prof. Ken'ichi Koyanagi's site