koyanagi のすべての投稿

Ubuntu13.10+2.6.32-ART+インタフェース社のデバイスドライバをインストール

TOSHIBA dynabook Satellite B552(MTRR, e820, pae, Local APIC, NMI watchdog, Intel 82579V ethernet e1000e)に対し,Ubuntu13.10+2.6.32-ART+インタフェース社のデバイスドライバをインストールした件をまとめる.(あえて鍵を掛けない)

まず,ART-Linuxをインストールする.

  1. Ubuntu13.10LTSを普通にインストールする
  2. リポジトリをold-releasesに修正する.
    1. /etc/apt/sauces.list と sauces.list.d/ubuntu-ja.listのドメイン名の最初の辺り(jp.archiveなど)を”old-releases”と書きかえる.
    2. ここを参照
  3. いろいろとアップグレードする
    1. sudo apt-get update upgrade
    2. grubの再インストールは絶対しない
    3. ディストリビューションアップグレードはしない
  4. 不足するモジュールをインストールする
    1. sudo apt-get install build-essential
    2. sudo apt-get install ncurses-dev
  5. 研究室内部者向けCDのART-Linuxのカーネル(20130227の中)とインタフェース社ドライバ(driversの中)を/usr/src/にコピーする
  6. ART-Linuxをインストールする
    1. linux-headers-…とlinux-sources-… をsudo dpkg -iでインストール.debもaptも使えないので注意.
    2. sourcesは解凍されるだけだから,sources.tar.bz2 をsudo tar -jxvfで展開.
    3. kernel imageはインストールしない(うまくいかない)
      1. 試みるときは,kernel-img.confにdo_initrd=yesを追記.
      2. kernel-imageをうまくインストールできないのは,元がkernel3系なのにkernel2系のmkinitrdをしようとしてエラーを出されているから.初期インストール時をkernel2系にしておけばいけるかもしれない.
  7. ソースファイルからARTのカーネルを再構築する.
    1. その前に普通のUbuntu カーネルの.configをソースフォルダにコピーする.ソースが入っていなくて見つからないなら/boot/config-3.11.0-12-generic(のような名称の現在起動しているカーネルのconfig)をコピー
    2. make xconfigは使えない.make menuconfigする
    3. まず最後の辺りにあるloadで現状のconfigを読み出す
    4. 整合が取れない部分があるので,いちいちチェックするが,多くはそのままでいい
    5. Processor type and featuresでARTに関係するところは最初のやつだけ入れる
      1. ART scheduler Support はON
      2. ART scheduling period in micro second はデフォルトで1000 (=1ms),研究内容で調整する
      3. それ以外のART~はOFF
      4. Asymmetric multi-processing supportはOFF
    6. [Device drivers]-[input device]-[touchscreen]-[motorola]は外す
    7. Loadable modulesで次のようにする.CONFIG_MODULE_force_LOAD=y, CONFIG_MODNERSIONS=n つまり,可能な限りカーネルバージョンの違いが影響しないようにする
  8. kernalのmakeでエラーが出るようなら以下をする
    1. art_irq.hの art_irr_structメンバにraw_spinlock_t *lock追加
    2. 同#include 〈linux/kernel_stat.h〉追加
    3. arch/x86/kernel/ptrace.cのsyscall_trace_enter()とsyscall_trace_leave()の型でエラーが出るならasmregparamを取る
  9. カーネルのリコンパイルをする
    1. sudo make bzImage modules module_install
    2. sudo installkernel 2.6.32-art arch/i386/boot/bzImage-2.6.32-art System.map
  10. これでART-linuxはインストール成功。
  11. 万が一initrdが作られなかったら,”sudo mkinitramfs -o /boot/initrd.img-2.6.32-art 2.6.32-art”でbootに自力でinitrdを作る.ここを参照.
  12. grubが作られていたら起動設定する
    1. /etc/default/grub のGRUB_HIDDEN_TIMEOUTをfalse
    2. GRUB DEFAULTを”2>0”でART-Linuxが自動起動する

 

次に,インタフェース社のデバイスドライバをインストールする.

  1. コンパイルのパラメータCFLAGのところに-fno-stack-protectorを追加する.
  2. Makefileについては,ここを参照
  3. dpg0100, dpg0101, gpg3100, gpg3300, gpg6204の全部をmake clean, make, make installしなおす.カーネル再コンパイルででバージョンチェックをしない設定にできていたら,makeは通る.
  4. sudo depmod -aしてsudo sh insad.shなどし,sudo sh setup.shをする.
  5. サンプルファイルがそのままではmakeできない問題がある.
    1. gpg3100などが読めていない:-lgpg3100などは.cファイルより後に読み込ませるようにMakefileを書き直す.ライブラリのリンクについてはここを参照
    2. art_syscalls.oがリンクできない:/usr/src/linux/libにあって/usr/lib/にないので,コピーしておく.
    3. <linux/art_task.h>がincludeできない:Makefileに -I/usr/src/linux/include/追記(他のヘッダファイルもあるのでコピーではダメ)

 

何か問題があれば,以下のを参考にする

Panasonic CF-W2にUbuntu8.10+ART2.4.26などインストールした件.

  1. Ubuntu8.10+ART2.4.26ならカーネルイメージで普通にインストールできる.
    1. Xの設定はおかしい.
    2. ドライバはバージョンエラーでやはりインストールできない.
    3. PCカードも認識していない
    4. 結局,カーネルを再構築する.
  2. カーネルやInterfaceデバイスドライバのmakeエラーへの対応.
    1. makeで’art_traceが未定義’というエラーが出る:art_tasc.cでart_trace(0)のところのifdefが,ifdef CONFIG_ART_TRACEであるべきところがifdef CONFIG_ARTとなっていたためと思われる.そこを修正した.
    2. scatterlist構造体にpageメンバがいないと言われる.iclude/asm/scatterlist_32.hにstruct scatterlistの定義があるので,先頭メンバにstruct page *page;を追加.
    3. struct pageを定義するヘッダをincludeしていない様子であるので,<#include linux/mm_types.h>を追記.これは昔のカーネルにしかないメンバの様子.ここも参照
    4. SA_INTERRUPTとSA_SHIRQが定義されていないとエラー.どうLinux 2.6.18以降で<linux/interrupt.h>が書き換わったらしい
      1. SA_INTERRUPT – ハンドラ関数実行中は割り込み禁止 -> IRQF_DISABLED
      2. SA_SHIRQ – 割り込みを共有 -> IRQF_SHARED
    5. struct pt_regs *regが定義されてないと言われる:<asm/ptrace.h>にある.エラーが出る箇所はkernelのバージョンごとにstruct pt_regs *regを引数に入れるか入れないか場合分けしているけど,入れない場合も関数内で使うバグであるので,場合分けをコメントアウト.
    6. menuconfig内でHIMEM=0ff(under 1GB) に設定
  3. これで無事ビルドできてカーネルがインストールできる:sudo make dep bzImage module modules_install install
  4. initrdがなく起動しないので,sudo mkinitramfs -o /boot/initrd.img-2.6.24.6-art 2.6.24.6-artでinitrd作り直す.
  5. 無事起動
  6. /boot/grub/menu.lstのARTのkernel-bootオプションを”quiet splash”から”text”に変更して,CUIモードにする
    1. たぶんXの設定をちゃんとしても1msサンプリングするとマシンパワーが足らない
    2. startxも一応成功するが,動作はもっさりするので,よほどの時以外はやめた方がいい.

インタフェース社のドライバについて

  1. これらに書いてある処理はドライバのmakeができない問題に対するものであるので,今回は不要だった.
    https://www.rbt.his.u-fukui.ac.jp/~naniwa/comp/art-linux.html https://qiita.com/larking95/items/257f99177058d5ed0030 
  2. しかしmakeできないので修正
    1. ln -s /usr/include/fbida.hとかが必要.
    2. gpg6204はpenc_info.h内のfbipenc.hの指定位置がおかしいので「このフォルダ」に修正.
  3. この時点ではmodprobe dpg0100は失敗する.
    1. dmesgで確認するとdpg0100でno version for “struct_module”およびmodule license ‘unspecified’と出ている.これは無視してもいいらしい.
    2. Unknown symbol ‘stack_chk_fail’が問題らしい.
  4. dpg0100のMakefile CFLAGオプションに-fno-stack-protectorを追加.
  5. dpg0100, dpg0101, gpg3100, gpg3300, gpg6204の全部をmake clean, make, make install,sudo depmod -A
  6. しかしダメ.
    1. dpg0100はmodprobeできる
    2. それ以外がダメ.isnmodでpageに関してsegmentation faultが出る.ドライバのバージョンを変えるくらいしか,他に手立てがない.

最終的にはこういう整理し直したドライバが公開されている
Ubuntu 10.04LTS + ART-Linux + インタフェースのボード