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 + インタフェースのボード