SSブログ

Debian でArm環境インストール [Linux]

Googleの推奨する、Ubuntu+ct-ngはビルドが通らないのでやめた。
パッケージのインストール方法もよくわからないし。
というわけで、Debian+Emdebianを使ってみる。

デスクトップとして使わない前提でインストール。
あと例によってVirtualPCを使う。

http://www.microsoft.com/japan/windows/virtual-pc/download.aspx

http://www.jp.debian.org/CD/netinst/

ネットワークインストールすればよいので名刺サイズ。
設定で落としてきたISOを仮想ドライブにつっこんで起動。

http://wiki.debian.org/MicrosoftVirtualPc2007/lenny

noreplace-paravirt vga=791
これをつけて起動しないとダメ。
Graphicalインストールにするとvga設定が最初からされているのでnoreplace-paravirtのみでOK

インストール時にAPTサーバを選べるが
ftp.jp.debian.org
を選んでもかなり時間がかかった。
他のサーバを選んでもまったく進まなかったので、じっと我慢。
1時間ぐらいほかの事をしてたほうがよい。
てか、最初にapt-spyするようにしてくれたほうがよくないか?

インストールパッケージはビルド環境が作れればそれでいいので、標準パッケージのみ。
デスクトップはとりあえずいらない。
やっぱり待たされるのでやっぱりほかの事をやったほうが良い。

インストールが終わったらいろいろパッケージをいれたいところだが
何をやるにも待たされるのでまずAPTを調べる

http://www.debian.or.jp/using/mirror.html

apt-get install apt-spy
apt-spy -s jp -d lenny
が、動かなかった・・・イミフ

Arm用クロス環境
UbuntuやめてDebianにしたのは単にEmdebianを使いたかったから。Ubuntuでも使えそうだけど。

http://www.emdebian.org/tools/crosstools.html

#
# -- Emdebian sources.list entries
#
# deb http://www.emdebian.org/debian/ unstable main
# deb http://www.emdebian.org/debian/ testing main
deb http://www.emdebian.org/debian/ lenny main

これを/etc/apt/sources.listに追加して
apt-get update
をやる。

Reading package lists... Done
W: GPG error: http://www.emdebian.org lenny Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B5B7720097BB3B58

相変わらずこんなことをいわれるが気にしない。本当は気にするべきなんだが・・・

apt-get install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi gcc-4.3-arm-linux-gnueabi g++-4.3-arm-linux-gnueabi

でOK。あっさり終わる。

http://code.google.com/intl/ja/chromium/
ビルド前の準備
http://code.google.com/p/chromium/wiki/LinuxBuildInstructionsPrerequisites

apt-get install python2.5-dev perl gcc g++ g++-multilib bison flex gperf pkg-config libnss3-dev libasound2-dev libgconf2-dev libglib2.0-dev libgtk2.0-dev libfreetype6-dev libcairo2-dev libdbus-1-dev libbz2-dev libjpeg62-dev libpam0g-dev libexpat1-dev libbz2-dev mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libxss-dev

http://code.google.com/p/chromium/wiki/LinuxBuildInstructions
http://build.chromium.org/buildbot/archives/chromium_tarball.html
ここからtarballをDLできる。
http://build.chromium.org/buildbot/archives/chromium.r40366.tgz
リダイレクトされていて本体はこっちなのでwget
wget http://build.chromium.org/buildbot/archives/chromium.r40366.tgz
863MBもあるのでしばらく待つ。

tar xzf chromium.r40366.tgz
としてみると、またしても待たされる。
実行が終わるとhomeなるディレクトリしかなかったのであせるが、
深いところにchromium/srcがあったので問題なし。

depot_toolsのインストール
http://dev.chromium.org/developers/how-tos/install-gclient
ソースの取得にはコレを使えとのことらしい。
Tarballがあるが、その部分を読む前にSVNが必要だと勘違いしてしまった
apt-get install subversion
svn co http://src.chromium.org/svn/trunk/tools/depot_tools
でdepot_toolsというフォルダができるので、exportでパスを通しておく。
gclient sync --force
でソースの同期ができるようなことを書いてあるが
前のページにその前にexportしろと書いてある気がするのでそうしてみる

export GYP_GENERATORS=make
gclient sync --force

警告が山盛りでたがエラーじゃないから大丈夫だろう。
でmakeすればよいらしいが、arm版をビルドしたいので設定を行う。
でやっと最初のこのページのことができる。

http://code.google.com/p/chromium/wiki/LinuxChromiumArm
ChromiumOSをビルドするわけじゃないので、rootfsについてはいらないと判断。

exportか、~/.gyp/include.gypにビルド設定をするらしい。
自分は~/.gyp/include.gypを作成した。
そしてまたまたexport ここでクロスコンパイルを指定する。
ここで、emdebianの伝統としてarm-unknown-linux-gnueabiではなくarm-linux-gnueabiであることに注意し、また/usr/binのしたにインストールされるのでexportは以下のようにする

export CROSSTOOL=/usr/bin/arm-linux-gnueabi
export CXX=$CROSSTOOL-g++
export CC=$CROSSTOOL-gcc
export AR=$CROSSTOOL-ar
export AS=$CROSSTOOL-as
export RANLIB=$CROSSTOOL-ranlib


make -r -j6 BUILDTYPE=Release chrome
とするらしい・・・がなぜかia32としてコンパイルしてしまう。
よくよく見ると
export GYP_GENERATORS=make
gclient sync --force
をやる前に設定しておかないといけないようだ。
さっきのgyなんとかgclientの設定だった・・・
再びgclientを行い、makeする。
今度はSSEオプションがないとか言われずに進む。

が、ダメ!
third_party/protobuf2/src/src/google/protobuf/stubs/common.cc:1: error: invalid floating point option: -mfpu=vfpv3
fpuオプションがないとか言われた・・・

今日はここまで。

Chromium Arm版のコンパイル・・・の準備 [Linux]

・VirtualPCのインストール
http://www.microsoft.com/japan/windows/virtual-pc/
50MBぐらいDLして、インストールする。再起動を求められる。
仮想マシンを作成し、メモリ1GB/ディスク16GB可変で作成

・Ubuntuのインストール
 とりあえず、デスクトップ版Utuntu 9.10 KermicをVirtual PCにいれる。

 VirtualPCでコピペができないとめんどくさいのでSSHDのインストール。

apt-get install openssh-server

vi /etc/ssh/sshd_server
でPasswordログインをyesにする

/etc/init.d/ssh restart

・Puttyのインストール
http://yebisuya.dip.jp/Software/PuTTY/
こっからダウンロード
ifconfigでIPを確認した後
SSHで、Puttyを使ってログインする。
2007年と古いこともあり、デフォルトの言語エンコードがEUC-JPになっているのでUTF-8にする。
あとサイズが小さいのででかくし、バックログを20万にする。

・ct-ngの準備
参考
http://code.google.com/p/chromium/wiki/LinuxChromiumArm

apt-get install gawk bison flex texinfo automake libtool cvs libncurses-dev

wget http://ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.6.0.tar.bz2
tar xjf crosstool-ng-1.6.0.tar.bz2
cd crosstool-ng-1.6.0
./configure

apt-get install g++ gcj

$ mkdir toolchain-build
$ cd toolchain-build
$ ct-ng arm-unknown-linux-gnueabi
$ ct-ng build.6

[EXTRA] Dumping internal crosstool-NG configuration
[EXTRA] Building a toolchain for:
[EXTRA] build = i486-linux-gnu
[EXTRA] host = i486-linux-gnu
[EXTRA] target = arm-unknown-linux-gnueabi
[EXTRA] Dumping internal crosstool-NG configuration: done in 0.08s (at 00:02)

カーネルのソースを取りに行くらしく激しく時間がかかる。他の作業をするのが良い。

終わりそうもないので今日はここまで。

朝起きたら

[INFO ] Installing final compiler
[EXTRA] Configuring final compiler
[EXTRA] Building final compiler
[ERROR] jar: internal error:
[ERROR] make[5]: *** [libgcj-4.3.2.jar] Error 1
[ERROR] make[4]: *** [all-recursive] Error 1
[ERROR] make[3]: *** [all-target-libjava] Error 2
[ERROR] make[2]: *** [all] Error 2
[ERROR] Build failed in step 'Installing final compiler'
[ERROR] Error happened in '/usr/local/lib/ct-ng-1.6.0/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
[ERROR] called from '/usr/local/lib/ct-ng-1.6.0/scripts/build/cc/gcc.sh' at line # 350 in function 'do_cc'
[ERROR] called from '/usr/local/lib/ct-ng-1.6.0/scripts/crosstool-NG.sh' at line # 562 in function 'main'
[ERROR] Look at '/root/x-tools/arm-unknown-linux-gnueabi/build.log' for more info on this error.
[ERROR] (elapsed: 79:32.30)
[79:32] / make[1]: *** [build] エラー 2
make: *** [build.6] エラー 2

でとまってた。無念

Netwalker SDバックアップ [Linux]

Netwalkerが誤って起動しなくなった場合、バックアップのMicroSD2GBを使って元に戻すことができるとのこと。
手持ちのSDをあさってみたらMicroSDではなくMiniSDだったという罠だったのでAmazonで以下のやつを頼む。


Kingston 2GB microSDカード SDC/2GB 東芝製チップ 永久保証

Kingston 2GB microSDカード SDC/2GB 東芝製チップ 永久保証

  • 出版社/メーカー: キングストンテクノロジー
  • メディア: エレクトロニクス



早速バックアップの設定をはじめる。
詳細はNetwalkerのページにあるが、ネットワーク経由でパッケージを落としてきて展開するシェルスクリプトでバックアップMicroSDを作るらしい。なんという力技。

recovery.shを実行すると、SDカードの容量が足りないと言われた。
2GBだというから2GBのメディアを買ったのに理不尽!
ここで4GBを買ってしまっては負けな気がしたので、recovery.shを編集してみる。

まず、使い慣れたvimをインストール。

sudo apt-get install vim vim-scripts


端末を起動してlsをすると、デスクトップのフォルダ名が日本語という悲惨さ。
エイリアスという概念、シンボリックリンクという概念があるのだから、コンソールはすべて英語にしてほしいと思う。

$ cd デスクトップ


などという気持ち悪いコマンドをうつとデスクトップフォルダに移動し編集。

$ vim recovery.sh


で、見てみると

SDSIZE=1921024


とあった。どうみてもこれがくさい。
この変数を参照している部分を見てみるとこの数値より小さい場合はダメということらしい。
ためしに

sdisk -s /dev/mmcblk0p1


としてみたところ1890231と帰ってきた。
限界ギリギリまで必要ということはないだろうと、SDSIZEを1890231にして実行すると、バックアップメディア作成が動き出した。

1時間ほど休憩する。

無事完了。メディアの中身を見てみるとLinuxのルートFSそのもので、416.7MBの空きとあった。
結局シェルがいけてないだけという結論だが、リカバリはまだ実行していないので、もしかしたら不具合があるかもしれない。

Netwalker雑感 [Linux]

まあいろんなところでFirstImpressionなどが書かれているが・・・

・Ubuntsuのカスタマイズ版。
・ウィンドウマネージャはGnome
 LinuxではなぜかWLANの設定に使うNetworkManagerもGnomeでなければならないので
 これをLXDEに変えるときは前もって手順を踏まないと嵌るらしい。
・ブラウザはFirefox3.0
 3.0はパフォーマンスに致命的な欠陥があって、3.5や3.6で改善された経緯がある。
 実際かなり重いので、これを3.6にしたら早くならないだろうか?
 またx86ではかなり軽い、Chromiumも気になるところ。
・2回もユーザー登録させてダウンロードしたFlushはカクカクでまともに再生できず。
 さらにこのAddonを入れたらブラウザが良く落ちるようになった。

ハードウェアがArmなので、Arm版FirefoxやArm版Chromiumをビルドして軽くなるか検証してみたいと思う。

Netwalker [Linux]


SHARP Net Walker (ネットウォーカー) モバイルインターネットツール ブラック系 PC-Z1-B

SHARP Net Walker (ネットウォーカー) モバイルインターネットツール ブラック系 PC-Z1-B

  • 出版社/メーカー: シャープ
  • メディア: エレクトロニクス



前々から気になってはいたが、アマゾンで31Kだったのでポチった。
Linux(Ubuntu)環境なのでいろいろいじってみようと思う。

CFSメモ [Linux]

Linuxのスケジューラ、CFSの解説。

http://www.ibm.com/developerworks/jp/linux/library/l-completely-fair-scheduler/?ca=drs-jp

ちょっと古いが、勉強になる。

応答性とスケーラビリティのトレードオフのために、コア技術としてRed-Black Treeを使っている。単なるBinary Search Treeと違い、Tree構造が高々1段差にしかならないことが特徴。

これが日本のWikipediaだとさっぱりわからなかった。

英語のほうをみたら、ちゃんとサンプルつきで書かれていた。

http://ja.wikipedia.org/wiki/%E8%B5%A4%E9%BB%92%E6%9C%A8

http://en.wikipedia.org/wiki/Red_black_tree

Linuxではプロセスごとに優先度が決められていてプロセスの数が増えても問題ないようにこのような特殊なデータ構造を使っているようだ。

ちなみにCFSでは一度リグレッション(性能劣化)が発生していて、今のバージョンではそれなりに直っている。

http://www.atmarkit.co.jp/flinux/rensai/watch2009/watch09b.html


vimで関数や変数の定義へジャンプする [Linux]

ctagsを使う
apt-get install ctags
拡張されたctagsが入る

vimを使うディレクトリ
ctags -R [target path]
カレントディレクトリも含めるときは[target path]は無くてよい
tagsというファイルができる

vimを起動しソースファイルを開く
CTRL+] で定義へ飛ぶ
CTRL+T で飛んだ後に元に戻る


・VCのようにプロジェクトという概念がないので、tagsがないフォルダでvimを使うとタグジャンプができない
・]とTが対照的ではないのがなぞ

Mercurial メモ [Linux]

・一般的な動作

リポジトリの複製
$hg clone [URL]

このコマンドだけターゲットの親ディレクトリで行う。すると勝手にディレクトリを作ってその中にリポジトリを作成する。

複製元から更新履歴を拾ってくる
$hg pull [URL]

引数を指定することで、複数のリポジトリから更新を引っ張ってこれる。するとhead(終端)が複数できることになる。これを解消するためには後述のmergeを使う

今のバージョンを任意のバージョンに変更する
$hg update [-C] [version]

updateのみの場合、衝突(更新)が起きなかったファイルのみ更新される
hg status -mで表示されたファイルは更新されないことが多い。
問答無用で更新したい場合は-Cをつける

自分のリポジトリのバージョンを確認する
$hg parents


今のバージョンとの変更点を確認する
$hg status [-m]


新しくファイルを追加する
$hg add [file]


変更をリポジトリに反映する
$hg commit


リポジトリに反映した変更を元に戻す
$hg rollback

ちょっとコミットしておいて、前のバージョンで作業とか気楽にできる。ただ、複数人で作業してたりする場合にはdiffで素直にパッチをとっておいたほうがいいかもしれない

変更をリモートリポジトリに反映する
$hg push


変更点を表示する
$hg diff

ここで表示されたものをリダイレクトでファイルとして保存しておくと、次のコマンドでパッチできる
$patch -p 1 -d . < [patch]



・Mercurial(分散リポジトリ)ならではの動作

分岐を確認する
$hg heads

リポジトリのバージョン(一時的、テスト、特定の機能)ごとに分岐しているか確認できる。分岐が無い場合は最新の1つ(おそらくtipになっている)ものが表示される

分岐を確認するor作る
$hg branch [name]

commit前にbranchをすることで、次のコミットが本流ではなくなる。違う分岐同士でバージョンの行き来をする場合は-Cをつけないとupdateできないので、こういう場合は上記のパッチ推奨。

分岐同士を合成する
$hg merge [target]

今いるバージョン(parents)とtargetでマージを行う。衝突が起きると、マージの確認のためにエディタやツールが起動する。失敗した場合はhg rollback, hg update -C。

その他
・updateする前にparents,statusはやるくせはつけたほうがいいと思う。
 特に-Cやrevertするときは特に。把握できていない場合は、diffでパッチを作っておくのも手。

・詳細は
$hg [command] --help

とかやれば出てくる

Linuxでシリアルコンソールを使う [Linux]

昔LinuxでWebサーバやファイルサーバとして使ってたころは、SSHでログインできればいいやと思ってたが、カーネルの動作などを調べようと思うと、シリアルコンソールのほうが何かと便利なので、がんばって設定してみる。

なおシリアルコンソールにはクロスケーブルが必要なので注意。
メインとターゲットの距離や裏側の配線になることを考えると2m弱では心もとない。
3mぐらいがちょうどいいと思う。


SANWA SUPPLY KR-LK3 RS-232Cケーブル

SANWA SUPPLY KR-LK3 RS-232Cケーブル

  • 出版社/メーカー: サンワサプライ
  • メディア: エレクトロニクス



また、最近のPCにはシリアルポートがついていないので、その場合にはUSB-シリアル変換を使う。
だたし、シリアルはターゲット側には絶対についてないといけないので、両方USBだった場合には拡張ボードとかでごまかすしかない。


I-O DATA USB->RS-232C変換アダプターRoHS指令準拠モデル USB-RSAQ5R

I-O DATA USB->RS-232C変換アダプターRoHS指令準拠モデル USB-RSAQ5R

  • 出版社/メーカー: アイ・オー・データ
  • メディア: エレクトロニクス



ハードウェアが整ったところで、ブートローダーの準備。
DebianはGrubなので、Grubのページを参考にする

http://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/

1./boot/grub/menu.lstに以下の行を追加
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=300 serial console

2.カーネルに追記
kernel /boot/vmlinuz-2.6.18-6-686 root=/dev/sda1 ro console=tty0 console=ttyS0,115200, 8n1

3./etc/inittabに追記
c:2345:respawn:/sbin/mingetty ttyS0
mingettyのパッケージが無いかもしれない場合はapt-get install mingetty
init qで強制読み込み

4./etc/security/access.confに追記
ttyS0

これでシリアルからルートでログインできるようになった

Linuxでディスク/ディレクトリの使用/空き容量を調べる [Linux]

duとdfを使う

duはそのまま指定するとどばーっと出て使いにくいので

du --max-depth=1 /

とかやればOK。
シンボリックリンクも追って欲しくないことが多いのでそういうオプションをつければOK

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。