さえきさんの
ホームページ
-
Armadillo のページ -
その5 - colinuxでのクロスコンパイル環境 -
Armadillo組み込みLinuxカードの活用を コツコツ とすすめてきました
Armadilloの 拡張I/Oポートの利用で 紹介したように 拡張I/Oが
Armadilloは、PC/104規格に準拠していて 組込み機器開発に 大変重宝です
その4 - Armadilloに 専用リモート操作装置 で 紹介しましたように
直接Armdillo Linuxカードに付帯した 専用の操作装置の作成も済みまして
さて さらに進め より本格的な組み込みLinuxの応用装置を 考えています
最近 PC/104規格対応拡張ボードのなかに PLA搭載のすごいものもあって
入手し 検討をすすめています それには ドライバソフトの開発が伴います
これまでは MebiusPCのVineLinuxやIBM_XP_PCでのCygwinなどでやってましたが
開発環境整備をねらって colinuxを導入してみました メモを記します
colinuxでのクロスコンパイル環境の整備
colinuxのインストール・設定が済んだあと armadillo用のクロスコンパイル環境の整備をしました:
colinux:/home/saekisan# ls -l /home/
-rw-r--r-- 1 saekisan saekisan 1626882 Dec 8 18:02 binutils-arm_2.9.5.0.37-1e3_i386.deb
-rw-r--r-- 1 saekisan saekisan 71184 Dec 8 18:02 cpp-arm_2.95.2-12e4_i386.deb
-rw-r--r-- 1 saekisan saekisan 1079958 Dec 8 18:03 g++-arm_2.95.2-12e4_i386.deb
-rw-r--r-- 1 saekisan saekisan 971218 Dec 8 18:03 gcc-arm_2.95.2-12e4_i386.deb
drwxrwxrwx 2 saekisan saekisan 4096 Dec 8 18:03 lib
-rw-r--r-- 1 saekisan saekisan 106758 Dec 8 18:03 libstdc++2.10-arm_2.95.2-12e4_i386.deb
-rw-r--r-- 1 saekisan saekisan 87288 Dec 8 18:03 libstdc++2.10-dev-arm_2.95.2-12e4_i386.deb
drwxrwxrwx 2 saekisan saekisan 4096 Dec 9 10:50 saekisan
colinux:/home/saekisan# ls -l /home/lib
-rw-r--r-- 1 saekisan saekisan 890388 Dec 8 18:03 libc6-arm-cross_2.1.3-19_all.deb
-rw-r--r-- 1 saekisan saekisan 2340050 Dec 8 18:03 libc6-dev-arm-cross_2.1.3-19_all.deb
-rw-r--r-- 1 saekisan saekisan 137022 Dec 8 18:03 libncurses5-arm-cross_5.0-6.0potato1_all.deb
-rw-r--r-- 1 saekisan saekisan 280350 Dec 8 18:03 libncurses5-dev-arm-cross_5.0-6.0potato1_all.deb
-rw-r--r-- 1 saekisan saekisan 13188 Dec 8 18:03 libpopt-dev-arm-cross_1.4-1.1_all.deb
-rw-r--r-- 1 saekisan saekisan 10290 Dec 8 18:03 libpopt0-arm-cross_1.4-1.1_all.deb
-rw-r--r-- 1 saekisan saekisan 152686 Dec 8 18:03 slang1-arm-cross_1.3.9-1_all.deb
-rw-r--r-- 1 saekisan saekisan 220322 Dec 8 18:03 slang1-dev-arm-cross_1.3.9-1_all.deb
colinux:/home/saekisan#
これらは
ArmadilloHPのcross-dev
からDLしたものです
devl/deb下 の 6つ と lib/deb下 の 8つ です
これらを colinuxへftpアップ (上のリストでは Armadillo経由nfs で /home 下へアップ)
colinux側コンソールにて dpkg -i *.deb や dpkg -i lib/*.deb などでまとめてインストール
このとき libc6-devがいないよ との長々エラー apt-get install libc6-dev とやる
ミススペルで またエラー apt-get -f install(ここまでで あとなしよ)で 続行して 完了した
試しのhello.cのコンパイルは 一瞬でした 早いです そして 実行可を確認 (これ 肝心)
armadilloの方で 実行です −− 当然ですけど これも OK !! ホッ です
ところで この際 調子に乗って armadilloでntfdサーバを機能させたくて Armadilloのカーネルを
再構築しようと試みたのですが (これについて詳しくは 項をあらためて レポートします)
カーネルソースを Armadillo HP から DL し、make menuconfig を指示したところ 先へ進みません
対話式にパラメータを設定するための 追加のインストール apt-get install libncurses5-devを
要しました このあと make dep 、make r 、make clean は順調に進み
ImageとImage.gzを得ました
念願のカーネル再構築にも目処がつき この開発環境は 今後大いに活用してゆきたい と喜んでいます
−−−−−−−−−−−−−−−−−−−−−−−−
colinuxでのクロスコンパイル手順 は以下のとおりです:
1.40(colinux)の/home/saekisan(/homeは nfs exportされています)で コンパイル作業をします
# arm-linux-gcc [-I/usr/arm-linux/include -L/usr/arm-linux/lib] hello.c -o hello [ ]部省略出来るみたい
colinux:/home/saekisan# gcc -o hello hello.c
生成された実行ファイル(例では「hello」)をfileコマンドで確認すると(apt-get install fileで取り込みました)
ホストPCのLinux(CPU:x86)ではなく、ターゲットのLinux(CPU:ARM)で動くものであることが分かります。
# file hello
hello: ELF 32-bit LSB executable. ARM, version 1 (ARM) for GNU/Linux 2.2.0,
dynamically linked
(uses shard libs), not stripped
1.40(colinux)側で chmod +x と実行可能にしてやり 1.20(armadillo)側で 実行し確認します
1.20(armadillo)では mount -t nfs -o tcp colinux:/home /mnt と/mntにマウントしてあります
armadilloへ向かって ftpでファイルを送り込むなり armadilloの他のディレクトリから mvやcpして
/mnt下にファイルを置けば それらは colinuxの /home下に置いたのと 同等だということです
colinux:/home/saekisan# ls -l で
-rwxr-xr-x 1 root root 11524 Dec 9 11:41 hello
-rw-r--r-- 1 root root 78 Dec 8 18:29 hello.c
colinux:/home/saekisan# ということで
saekisan@armadillo:/mnt/saekisan$ ls -l で
-rwxr-xr-x 1 root root 11524 Dec 9 11:41 hello
-rw-r--r-- 1 root root 78 Dec 8 18:29 hello.c
saekisan@armadillo:/mnt/saekisan$ ということです
ところで 面白い事実をみつけた: file というコマンド 使えますね なんで出来たのかの手掛かりにはなる
面白いことというのは armadillo自体にセルフコンパイル出来る gccをインストールしてあるが 何より遅い 本当に
それだけではなく どういうことなのか 出来たファイルサイズが倍以上に大きいのです 実行結果は同じですが
いくつかでチェックしたけど 私の想像ですが これ以上時間を掛けてコンパクトさを求めない妥協では?
コンパイルの速度の点で 今後は colinuxでのクロスを使うことになろう このとき セルフのと比べてみよう
(これ以外に これまでに cygwinでもつくってあるし MebiusPCのVine2.6Linuxでも出来るようになっています)
cat /proc/cpuinfo で見た結果です(それぞれ armadillo と IBMPCでのcolinuxとで):
Processor : ARM ARM720T rev 2 (v4l)
BogoMIPS : 36.76
と
model name : Mobile Intel(R) Pentium(R) 4 - M CPU 2.00GHz
bogomips : 1159.98
"Bogo" は "bogus (偽、いんちき)" に由来するもので、「偽物」を意味します。
それゆえ、BogoMips は、プロセッサ速度に関するある種の尺度にはなりますが、
あまりにも「非科学的」な方法でしか計測していないので、BogoMips と呼ばれている
と いうものなんですが 能力に大きな差がありそうですね
−−−−−−−−−−−−−−−−−−−−
さて 忘れないうちに colinuxインストールの様子を メモしておきましょう:
http://scratchpad.fc2web.com/colinux/ と
http://iwa.ath.cx/colinux/ を主に参考にしました
SourceForge上のcoLinuxのサイトからcoLinuxとディスクイメージを取得します。
coLinux-stable 0.6.2-linux-2.6.10 が 最新でした 感謝しつつDL
まずは、coLinux-0.6.0.exeダブルクリックしてインストーラを起動します
ライセンスの確認のあと とりあえず、ここではTAP-Win32とWinPcapの両方を選んでおきます
coLinuxに必要なルートディスクとスワップディスクの準備をします
ルートディスクの準備
ルートディスクはダウンロードした Debian-3.0r2.ext3-mit-backports.1gb.bz2 を使います。
展開します。これはCygwin上では次のようの行います。
$ cd /cygdrive/…/coLinux
$ bzip2 -d Debian-3.0r2.ext3-mit-backports.1gb.bz2
Debian-3.0r2.ext3-mit-backports.1gb 1GBのファイルができればOKです。
(この度の armadillo用の開発だけに使用するのに
最終的にいろいろインストールしたあとでも
dfでみたところ 以下のようですので 1Gで充分です
X-Windowなど本格的ですと増量が必要なのかも
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/cobd0 1032088 258256 721404 27% / )
スワップディスクの準備
128MBのスワップディスクイメージ(swap.fs)
$ cd /cygdrive/…/coLinux
$ dd if=/dev/zero of=swap.fs bs=1M count=128
128MBのファイルができればOK
…\coLinuxにあるファイル default.colinux.xmlを編集 以下は私の自宅IBMXP-PCでのようす:
(ところで colinuxをアンインストールすると、default.colinux.xmlも削除されます。
アンインストールする前にバックアップを取っておくように 次が楽です)
以上です XPでしたので ネットワークは tap オフィスのは2000で bridged だったかな?
起動
colinux-daemon.exe -c default.colinux.xml のように
コマンドオプション -C で明示的に
config.xmlを指定してやる必要ありです
Windowsのコマンドプロンプト またはcygwinコンソールにて 起動できます まずは確認ですね
&つけてbgでやれば cygwin閉じてもいい あとは 使用の際 同じくインストールフォルダにある
colinux-console-nt.exe をダブルクリックでコンソールが開いてくれます (ショーカットでもいい)
この確認後は ネットワーク設定でOK確認までやって 次のように サービス登録します
coLinuxをサービスとしてインストールする方法 手順は簡単:、
「./colinux-daemon -c default.colinux.xml --install-service」を実行した後、(-d 付がいいです)
"e:\colin2\coLinux\colinux-daemon.exe" --run-service "Cooperative Linux" -d -c "default.colinux.xml"
と 登録しました 一々妙な?コンソールが出ません 停止や再起動(.xmlを書き替えたときなど)では
コントロールパネル→管理ツール→サービス→「Cooperative Linux」から起動/停止および設定変更を行う。
アンインストールは、サービスを停止した上で「./colinux-daemon --remove-service」を実行すればよい
colinux起動後は コンソールを開き(自動では出さない設定なら \coLinux\colinux-console-nt.exeをダブルクリック)
ブートメッセージが流れた後ログインプロンプトが出たら ID「root」、パスワード「root」でログインする。
(早めに adduserで ユーザ登録済ませ passwdでルートPWも変更します)
初期状態ではキーボードの認識がUS配列です |は }(shift])「:」は「シフト+;」で入力 など
「dpkg-reconfigure console-data」を実行し、「Select keymap from arch list」→「qwerty」→「Japanese」
(「J」キーをタイプすることでショートカットできる)→「Standard」を選択すると、キーマップが
日本語配列に設定される。 ということでしたが はじめは苦労しました (ここでやれるか未確認
この手続きは ネットワークがOKになったあと apt-getで 必要なものをインストールするときにやったです)
ネットワークの設定
エディタコマンドは nano が入っています 初めてだったがまあ楽です
/etc/hostsの修正
127.0.0.1 localhost
192.168.1.40 colinux
192.168.1.20 armadillo
その他 LAN上のを記述しておけば 名前でアクセスできる
(WindowsPC内は C:\WINDOWS\system32\drivers\etcの hostsを編集)
/etc/resolv.conf
nameserver 192.168.1.1
/etc/network/interface
auto lo eth0
iface lo inet loopback
iface eth0 inet static
address 192.168.1.40
gateway 192.168.1.1
netmask 255.255.255.0
書き換えが完了したら、以下のコマンドでそれを反映させます。
# /etc/init.d/networking restart
Reconfiguring network interface: conet0: initialized
done.
確認にはifconfigコマンドを使います。次のように表示されればOKです。
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:43:4F:4E:45:30
inet addr:192.168.1.40 Bcast:192.168.0.255 Mask:255.255.255.0
---- 省略 ----
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
---- 省略 ----
細かな数字は違うかもしれませんが、eth0とloの2つ出力があることと、
eth0のinet addrが期待通りであればOKです。
またゲートウェイの設定は以下のコマンドで確認します。
# route
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
coLinuxにおけるネットワークとは
Windows上に仮想ネットワークドライバをインストールする(TAP方式)と、
WinPcapを利用して仮想ブリッジ接続する方式の2通りが用意されています。
さて ネットワークの設定は、ネットワーク環境が様々であり
一概に「これで大丈夫!」と云えるもの無しです
Windowsのネットワークは問題児を実感しました
いろいろやってみるしかないですかね 詳細略します
コントロールパネル-ネットワークのプロパティ画面とにらめっこ
セキュリティやら パリティ無しに とか 出来ないのも…
私のやった結論: 98XPなら TAPがいい PCのネットワーク設定で2つをブリッジ設定で簡単
ところが 2000の方はそんな風にはなっておらず WinPcapを使用しました 結構ハマリます
書くに書けないほどで やっと動いた という感じです 動いてしまえば やり直したくないです
(IPアドレスから言えば 両方ともブリッジです 192.168.1まではネットワーク内
みな同じですので … これで pingが LAN上どことも通ります 出来たぁ ホッ)
タイムゾーン tzconfigコマンドを実行して選択します。
最初に「y」を入力したら、「5」を入力して次に「Tokyo」を入力
/etc/default/rcS で「UTC=no」を確認
最後に以下のコマンドを実行して設定を反映させます
(もちろん次回起動時からは自動的にこのコマンドが実行されます)。
# /etc/init.d/hwclockfirst.sh start
準備していたスワップドライブようやく活用します。
それにはまず/etc/fstabを以下のように編集します。
/dev/cobd0 / ext2 defaults 0 1
proc /proc proc defaults 0 0
/dev/cobd1 none swap sw 0 0
次に以下のコマンドでスワップドライブを初期化します。
# mkswap /dev/cobd1
Setting up swapspace version 1, size = 268431360 bytes
その次はスワップファイルを有効にします。
# /etc/init.d/mountall.sh start
Mounting local filesystems...
nothing was mounted
swapをリブートなしに有効にするには「swapon -a」を実行する
(/etc/fstabを参照してswapを有効化する)。
有効になっているかどうかは「swapon -s」で確認できる。
最後にfreeコマンドで確認します。Swapの行出力されればOKです。
# free
total used free shared buffers cached
Mem: 126892 62724 64168 0 6588 47588
-/+ buffers/cache: 8548 118344
Swap: 262136 0 262136
ここまで来れば インターネット越しに apt-getが出来ます
/etc/apt/sources.list編集(元のままでも 基本のは拾えるようです telnetdとか)
telnetd はまず あった方がいいです IP越しに かなり高速な反応で対話できます
TeraTermを使用してますが colinuxとarmadilloを2つ同時に表示し 快適な対話環境です
passwd やadduser locale設定とか やること一杯あります 必要な都度 追加ですね
/etc/locale.gen
# apt-get install locales で、
/etc/locale.gen を編集 or 確認してください。
ja_JP.eucJP EUC-JP
↑
これがあればOK、無ければ追加して
root権限で locale-gen を実行
Generating locales...
ja_JP.EUC-JP... done
Generation complete.
こんなメッセージが表示されたらOK
※ dpkg-reconfigure locales でも同様の設定が行える
その後、一般ユーザにてログインして ~/.bashrc 辺りに
export LC_ALL=ja_JP.eucJP とか書いておく。
localeの選択は「en_US ISO-8859-1」「en_US.UTF-8 UTF-8」「ja_JP.EUC-JP EUC-JP」
「ja_JP.UTF-8 UTF-8」 などを揃えたほうがいいのかな?
# apt-get install console-data console-tools で「Select Keymap from arch list」
→「qwerty」→「Japanese」→「Standard」は やったかな? これでキーボードちゃんとなる
SAMBA や cofs などファイルの共用はあるけど 何がいいのか? この2つ、ネットワーク設定が
充分でなかったのか 機能せず パスワード変換設定など ややこしくてあとまわし(ラストに追記した)
つぎの nfs で充分かつ良好でした Linux同士がつながっていることの方が いいのでは と思います
−−−−−−−−−−−−−−−−−
coLinuxでNFSを使う
http://scratchpad.fc2web.com/colinux/nfs.html より
最近のcoLinuxは標準のカーネルでNFS機能とNFS over TCP機能がサポートされているので、
カーネルの
コンパイルをする必要はありません。サポートパッケージをインストールしてしましょう。
root@colinux# apt-get update
root@colinux# apt-get install nfs-kernel-server
次に、/etc/exportsを編集して外部に公開するディレクトリを指定します。
/homeディレクトリを IPアドレスが192.168.1.xのホストに公開するならば
root@colinux# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
/home 192.168.1.0/255.255.255.0(rw)
NFSクライアントの構築
これはLAN上のLinuxの設定です。 Armadillo側です
NFSクライアントのサポート機能をインストール Debianなら以下の様な感じ
root@linux# apt-get update
root@linux# apt-get install nfs-common
あとは以下のようにマウントするだけです。
ここでも「-o tcp」をつけることにより「NFS over TCP」が有効としています。
root@linux# mount -t nfs -o tcp colinux:/home /mnt
ユーザIDの管理
coLinuxとLAN上のLinuxでのユーザIDを一致させておきましょう。それが一番楽です。
−−−−−−−−−−−−−−−−−−−−
coLinuxでSAMBAを使う
smbmountを使って、Windowsとファイルのやり取りをする方法です
(
http://www2.starcat.ne.jp/~kanocl/colinux/colinuxsmb.htm を参考に)
Windows側PCに 共有フォルダを作成します まず フォルダをを作った後
右クリックしてプロパティで <共有とセキュリティ> を選択設定をします
大切なのは、この画面の<共有名>です。Linux側からアクセスするときに、必要になります
共有名は、共有フォルダの名前ではなくて、この枠に書かれているものを指しています
(c:\colin2下にSMBというフォルダを作りましたが 共有名はSMBにしました)
もう一つ PCのコマンドプロンプトを開き ipconfig /all で ホスト名を拾います
(オフィスのPCでは biostar、HOMEはIBMでした また ログインユーザ名はsaekisan)
つぎ colinux側
colinuxに、rootでログインします。
# apt-get install smbfs でinstall 途中 幾つか質問がある
ワークグループ、ドメイン名とか空欄のまま すすめた パスワードの暗号化はやってもらう
(ウインドウズ側が暗号化パスワードになっているということで 昔はプレーンだったらしい)
IPとかDHCPなにやらには NOをセレクトした ささーっと おわった(2台で試した いいみたい)
# smbmount //ホスト名/共有名 マウントポイント -o username=ユーザー名,ip=IPアドレス
というマウントですが まず
# mkdir /mnt/smb (マウントポイントを作っておく。最初の時のみ) そして
# smbmount //BIOSTAR/SMB /mnt/smb -o username=saekisan IPはなし とキーイン
パスワード聞かれたので Windows側のパスワード (厄介なやつ)を入れた なにも表示なし
これでいいみたい PC側のSMBフォルダに test.txtを作って置いた
それが colinux コンソールで ls -l /mnt/smb で test.txt が存在 catで拾えた
eucで作れば colinux側コンソールでちゃんと漢字読めたが PC側では 読めなかった
漢字は 問題ですね ファイル名は とくに 注意が必要ですね
<アンマウント> は
# smbumount /mnt/smb
smb マウント法 メモまとめました 9:44 2005/12/21 作成:さえき
自分のホーム下に 事前に mkdir smb, chmod 777 smb (RW可)で作成 その上で
$ smbmount //BIOSTAR/SMB smb -o username=___ と
$ smbumount smb です (rootでの操作必要無しです)
ファイル名は英数字がいい、(???になっちゃうよ)
内容の方はTeraTermのSetup-TerminalメニューでKanji(receove)の方だけSJISにすれば いいよ
以上
−−−−−−−−−−−−−−−−−−−−
作成:2005-12-9 最終更新日:2005-12-13