でのSargeその後

安定して動作しているようなので、python関係を追加する。

# apt-get install python python2.3 libbz2-1.0 libreadline4 python2.3-cjkcodecs


/usr/local/bin/mkimageも入れる。


デフォルトで入っているkernel modulesを追加。
USBまわりはkernel埋め込みなんだな。

lib/modules/2.6.12.6-arm1/build
lib/modules/2.6.12.6-arm1/kernel/
lib/modules/2.6.12.6-arm1/kernel/crypto/
lib/modules/2.6.12.6-arm1/kernel/crypto/aes.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/anubis.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/arc4.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/blowfish.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/cast5.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/cast6.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/crc32c.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/crypto_null.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/deflate.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/des.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/khazad.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/md4.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/md5.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/michael_mic.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/serpent.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/sha1.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/sha256.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/sha512.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/tcrypt.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/tea.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/tgr192.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/twofish.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/wp512.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/ocf/
lib/modules/2.6.12.6-arm1/kernel/crypto/ocf/cryptodev.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/ocf/cryptosoft.ko
lib/modules/2.6.12.6-arm1/kernel/crypto/ocf/ocf-bench.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/
lib/modules/2.6.12.6-arm1/kernel/drivers/block/
lib/modules/2.6.12.6-arm1/kernel/drivers/block/as-iosched.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/block/cfq-iosched.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/block/cryptoloop.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/block/deadline-iosched.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/block/loop.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/cdrom/
lib/modules/2.6.12.6-arm1/kernel/drivers/cdrom/cdrom.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/md/
lib/modules/2.6.12.6-arm1/kernel/drivers/md/dm-crypt.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/md/dm-mirror.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/md/dm-mod.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/md/dm-snapshot.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/md/dm-zero.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/md/faulty.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/md/raid10.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/md/raid6.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/scsi/
lib/modules/2.6.12.6-arm1/kernel/drivers/scsi/sr_mod.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/net/
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/net/catc.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/net/kaweth.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/net/pegasus.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/net/rtl8150.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/net/usbnet.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/serial/
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/serial/pl2303.ko
lib/modules/2.6.12.6-arm1/kernel/drivers/usb/serial/usbserial.ko
lib/modules/2.6.12.6-arm1/kernel/fs/
lib/modules/2.6.12.6-arm1/kernel/fs/autofs/
lib/modules/2.6.12.6-arm1/kernel/fs/autofs/autofs.ko
lib/modules/2.6.12.6-arm1/kernel/fs/autofs4/
lib/modules/2.6.12.6-arm1/kernel/fs/autofs4/autofs4.ko
lib/modules/2.6.12.6-arm1/kernel/fs/binfmt_aout.ko
lib/modules/2.6.12.6-arm1/kernel/fs/binfmt_misc.ko
lib/modules/2.6.12.6-arm1/kernel/fs/cramfs/
lib/modules/2.6.12.6-arm1/kernel/fs/cramfs/cramfs.ko
lib/modules/2.6.12.6-arm1/kernel/fs/fat/
lib/modules/2.6.12.6-arm1/kernel/fs/fat/fat.ko
lib/modules/2.6.12.6-arm1/kernel/fs/isofs/
lib/modules/2.6.12.6-arm1/kernel/fs/isofs/isofs.ko
lib/modules/2.6.12.6-arm1/kernel/fs/minix/
lib/modules/2.6.12.6-arm1/kernel/fs/minix/minix.ko
lib/modules/2.6.12.6-arm1/kernel/fs/msdos/
lib/modules/2.6.12.6-arm1/kernel/fs/msdos/msdos.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_ascii.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp1250.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp1251.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp1255.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp437.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp737.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp775.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp850.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp852.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp855.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp857.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp860.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp861.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp862.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp863.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp864.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp865.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp866.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp869.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp874.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp936.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp949.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_cp950.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-1.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-13.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-14.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-15.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-2.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-3.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-4.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-5.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-6.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-7.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_iso8859-9.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_koi8-r.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_koi8-ru.ko
lib/modules/2.6.12.6-arm1/kernel/fs/nls/nls_koi8-u.ko
lib/modules/2.6.12.6-arm1/kernel/fs/ntfs/
lib/modules/2.6.12.6-arm1/kernel/fs/ntfs/ntfs.ko
lib/modules/2.6.12.6-arm1/kernel/fs/romfs/
lib/modules/2.6.12.6-arm1/kernel/fs/romfs/romfs.ko
lib/modules/2.6.12.6-arm1/kernel/fs/udf/
lib/modules/2.6.12.6-arm1/kernel/fs/udf/udf.ko
lib/modules/2.6.12.6-arm1/kernel/fs/vfat/
lib/modules/2.6.12.6-arm1/kernel/fs/vfat/vfat.ko
lib/modules/2.6.12.6-arm1/kernel/fs/quota_v1.ko
lib/modules/2.6.12.6-arm1/kernel/fs/quota_v2.ko
lib/modules/2.6.12.6-arm1/kernel/lib/
lib/modules/2.6.12.6-arm1/kernel/lib/crc-ccitt.ko
lib/modules/2.6.12.6-arm1/kernel/lib/libcrc32c.ko
lib/modules/2.6.12.6-arm1/kernel/sound/
lib/modules/2.6.12.6-arm1/kernel/sound/core/
lib/modules/2.6.12.6-arm1/kernel/sound/core/oss/
lib/modules/2.6.12.6-arm1/kernel/sound/core/oss/snd-mixer-oss.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/oss/snd-pcm-oss.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/seq/
lib/modules/2.6.12.6-arm1/kernel/sound/core/seq/oss/
lib/modules/2.6.12.6-arm1/kernel/sound/core/seq/oss/snd-seq-oss.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/seq/snd-seq-device.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/seq/snd-seq-dummy.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/seq/snd-seq-midi-event.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/seq/snd-seq-midi.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/seq/snd-seq.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/snd-page-alloc.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/snd-pcm.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/snd-rawmidi.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/snd-timer.ko
lib/modules/2.6.12.6-arm1/kernel/sound/core/snd.ko
lib/modules/2.6.12.6-arm1/kernel/sound/soundcore.ko
lib/modules/2.6.12.6-arm1/kernel/sound/usb/
lib/modules/2.6.12.6-arm1/kernel/sound/usb/snd-usb-audio.ko
lib/modules/2.6.12.6-arm1/kernel/sound/usb/snd-usb-lib.ko
lib/modules/2.6.12.6-arm1/modules.alias
lib/modules/2.6.12.6-arm1/modules.ccwmap
lib/modules/2.6.12.6-arm1/modules.dep
lib/modules/2.6.12.6-arm1/modules.ieee1394map
lib/modules/2.6.12.6-arm1/modules.inputmap
lib/modules/2.6.12.6-arm1/modules.isapnpmap
lib/modules/2.6.12.6-arm1/modules.pcimap
lib/modules/2.6.12.6-arm1/modules.symbols
lib/modules/2.6.12.6-arm1/modules.usbmap
lib/modules/2.6.12.6-arm1/source


GT固有のデバイスディレクトリの中身はこんな感じ。

GT only
lrwxrwxrwx   1 root root           7 2007-04-17 04:13 btndrv -> btndrv0
crw-rw-r--   1 root uucp    251,   0 2006-09-06 04:51 btndrv0
lrwxrwxrwx   1 root root           7 2007-04-17 04:13 buzdrv -> buzdrv0
crw-rw-r--   1 root uucp    252,   0 2006-09-06 04:51 buzdrv0
lrwxrwxrwx   1 root root           7 2007-04-17 04:13 leddrv -> leddrv0
crw-rw-r--   1 root uucp    253,   0 2006-09-06 04:51 leddrv0
drwxr-xr-x   2 root root        4096 2006-10-31 13:08 mapper
prw-rw-rw-   1 root root           0 2006-10-27 11:02 r8read
prw-rw-rw-   1 root root           0 2006-10-31 13:08 r8write
brw-r--r--   1 root root     31,   0 2005-06-23 05:42 rom0
brw-r--r--   1 root root     31,   1 2006-06-19 09:42 rom1
crw-------   1 root root     21,  17 2005-06-23 05:42 sg17
crw-------   1 root root     21,  18 2005-06-23 05:42 sg18
crw-------   1 root root     21,  19 2005-06-23 05:42 sg19
crw-------   1 root root     21,  20 2005-06-23 05:42 sg20
crw-------   1 root root     21,  21 2005-06-23 05:42 sg21
crw-------   1 root root     21,  22 2005-06-23 05:42 sg22
crw-------   1 root root     21,  23 2005-06-23 05:42 sg23
crw-------   1 root root     21,  24 2005-06-23 05:42 sg24
crw-------   1 root root     21,  25 2005-06-23 05:42 sg25
crw-------   1 root root     21,  26 2005-06-23 05:42 sg26
crw-------   1 root root     21,  27 2005-06-23 05:42 sg27
crw-------   1 root root     21,  28 2005-06-23 05:42 sg28
crw-------   1 root root     21,  29 2005-06-23 05:42 sg29
crw-------   1 root root     21,  30 2005-06-23 05:42 sg30
crw-------   1 root root     21,  31 2005-06-23 05:42 sg31

Debian only
srw-rw-rw-   1 root root           0 Apr 16 14:56 log

sgが多く作ってあるのはいいとして、r8read/writeはFIFOかな?
rom0/1はなんだろう。Flash操作の時にでも使うのかな?
btndrv,buzdrv,leddrvは作っておく必要があるのね。

kernelをビルドしてみる

せっかくパッケージ管理下にあるので、制限はあるけどkernelもパッケージにしてみる。
chroot環境を作って、そこでkernelをビルド。
uImageにするには、どのみち後処理が必要なので、make-kpkgを使う。

# apt-get build-dep linux-kernel-headers
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  binutils build-essential cdbs cpp cpp-3.3 debconf-utils debhelper dpkg-dev file g++
  g++-3.3 gcc gcc-3.3 gettext html2text intltool-debian libc6-dev libmagic1
  libstdc++5-3.3-dev linux-kernel-headers make patch perl perl-modules po-debconf
# apt-get install kernel-package
# apt-get install cpp-3.4 gcc-3.4 gcc-3.4-base

# tar zxvf linux-2.6.12.6.tar.gz
# cp config.gt linux-2.6.12.6/.config
# cd linux-2.6.12.6
# make oldconfig
# make-kpkg clean
# make-kpkg --revision=OLP.0.1 kernel_image

warningはいくつか出ていたが、特に問題なく出来てしまった。
ビルド時間は2時間ほど。結構かかるな...

kernel-image-2.6.12.6-arm1_OLP.0.1_arm.deb

こいつでuImageを作って、本当に使えるものなのか、続きは明日だな。

民生品NASに見る組み込みLinuxの世界

liloのマンスリーセミナで組み込みネタをやるというのに触発されて、自分でやることを想定してちょっと書いてみた。去年からliloセミナ講師に立候補してみようと思ったりしているのだけど、神戸や大阪まで出るのは億劫になってしまって決心がつかない。
それと、最近、なんか大勢の聴衆の前でしゃべる事をやってないので、プレゼン体力が落ちているかもしれないと思う。去年の札幌は少人数だったし。今年に入ってからも社外でも数名のプロジェクト内部だけ。先月は10人くらいの自分のじゃないプレゼンの手伝いはしたけど、それは所詮手伝いだし、私の色が出ても困るのでそんなに気合入れてなかった。
プレゼンとしては40%くらいは完成している。あとは絵と裏取りとPPTに仕上げるだけ。今の内容だと、90分くらいかな。
トピックだけ列挙してみる。

民生品NASに見る組み込みLinuxの世界

  • わたしは何をやってきたか?
  • 組み込みLinuxの歴史
    • 10年前は「寝言は寝て言え」
    • 今では「ネコも杓子も」
  • なぜ組み込みなのか?
    • 低消費電力
    • 価格が安い 多目的->単機能
    • 小さい
    • 発熱が低い
    • 環境耐性が高い
    • 専用設計のSoC
  • CPUアーキテクチャ
    • IA(Intel Architecture)だけがコンピュータじゃない
    • 昔はいろいろなCPUがありました
    • 今のメジャーはARM,MIPS,SHあたり? IA-32クローンもあるよ
  • だいたいこんな構造です
    • CPU
    • Flash ROM
    • RTC
    • DRAM
    • 外部バス
    • シリアル
    • JTAG
    • I2C
    • GPIO
    • リファレンスとなる設計とテスト用ボードはメーカーから借りたり買ったりできる
  • JTAGとシリアルコンソール
    • 大抵はVGAのような豪華なものは付いていません
    • CPUのデバッグにはJTAGが使えます
    • Flashの書き込み
  • 起動の仕組み
    • IPLとは何か?
    • IPLにはどんなものがあるのか?
    • initrdという独特の仕組み -> いまはinitramfsに
    • Flash上に置くもの
    • Flashメモリ用のROMファイルシステム
  • 組み込みの制約とその解決
    • メモリ容量
    • CPUパワーがない マルチメディア用の拡張命令などもない 浮動小数点演算できない
    • MMUなし? -> 仮想記憶が使えない uClinux
    • Flashメモリからの起動による容量の制約 -> ライブラリやツールが大きすぎる busybox
    • ROMしか利用できない -> UNIXではそんなこと考えられていない! ramdisk
    • ガチャ切りされてもけな気に起動する -> ジャーナルなんて最近ですよ 保護されないファイルシステム
  • ソフトウエアの開発
    • 何は無くともtoolchain
    • ミニマムの起動環境を作る Buildroot
    • ドライバは誰かが書かなくちゃね
    • kernelのバグは誰が直すのさ
    • 上流へのマージは?
    • GPLの理解が進んで楽になってきた
    • どこで差別化を行うのか
    • ソフトとハードの確執 ってほどのこともない
  • 組み込みLinuxで遊べるデバイスたち
  • 情報源とコミュニティ

パワーとリソースに余裕ができたのだけど、10年くらい中身は変わっていない感じもする。
ソフトコアとか、MMUなしが再び(AVR)なんかで、これから大きく変わるのだろうな。


書いていて、この内容なら「市販製品の解析とDebian化」みたいなののほうが聴衆ウケがいいような気がした。