June 04, 2006

Linux Device Driver Kit リリース

Open Tech Pressの記事より
新参Linuxプログラマ向けのドライバ開発キットがリリース

水曜日、カーネル開発者Greg Kroah-Hartmanは、Linuxデバイス・ドライバ開発キット(DDK)のリリースを発表した。開発キットのCDイメージには、デバイス・ドライバの作者がLinuxドライバを作成するために必要とするもの全部が含まれる。キットのリリースは、シアトルで5月26/27日に開催されるFreedomHECカンファレンスに備えて行われた。参加者は全員このキットのフリーなコピーを物理メディアで受け取る。

LinuxのDDKがリリースされたことをこの週末に知る。いったいどんな内容なのか!?
さっそくダウンロードして内容を見てみた。大きく3つに分かれている

(1)カーネルソースのDocumentationディレクトリの文書をDocBook形式に変換したもの
(2)カーネルソース 2.6.16.18
(3)Oreilly本 Linux Device Drivers 3rd Edition の全内容PDFファイル

既存の文書をひとつにまとめたCD-ROMなので新しいものはないのだが、DocBook文書の内容を初めてみた。まだ目次だけしかないものが多い。進化していくカーネルソースに対し、文書がどれだけの更新スピードで追従していくのか、気になるところ。ぜひ全部そろったところを読んでみたい。

Greg Kroah-Hartman氏のブログにもDDKのリリースがアナウンスされていた。今後、以下のようなことをやりたいそうだ

全文書の検索ができるようにする
CSSファイルでカッコイイwebページにする
文書を追加する

CD-ROMのラベルがトップディレクトリに入っているそうなので探したのだが…
どうやらddk_cdrom.odtというファイルがそれみたい。なんだこのodtってのは?
拡張子をzipに変えたら展開できて、xmlやpngなどいくつかファイルが出てきた。
どうやってラベルを印刷するんだろ?

投稿者 salmoon : 03:53 PM | コメント (1) | トラックバック

November 16, 2005

Eclipse CDTでcolinux-daemonをビルド

Windowsと協調して動作するLinuxがcolinuxだ。しかもこのLinuxはプロセッサの特権モードで動作しているという。VMwareとは仕組みが違う。いったいどのようにして動作しているのか?この仕組みを知りたいのである。

colinuxとWindowsの橋渡しをしているのがcolinux-daemon.exeとみている。これはWindowsのコンソールアプリケーションなのだが、幸いソースコードが公開されている。そのソースを見ると、驚いたことにこのアプリケーションはGNUコンパイラ(正確にはMinGW)でビルドしてある。しかもそれだけではなくcolinux用Windowsデバイスドライバのlinux.sysもそうらしい。

MinGWでビルド可能=Cygwinでビルド可能⇒デバッグ情報付きでcolinux-daemon.exeをビルドすればCygwinのgdbでデバッグできる。つまり動作を追うことができると考えた。ちょうどEclipse CDTの使い勝手を調べてみたいところなので、Eclipseでcolinux-daemonビルド&デバッグに挑戦してみることにした。

ワクワクするのう。

投稿者 salmoon : 02:12 AM | コメント (0) | トラックバック

October 29, 2005

Eclipse3.1.1メモリ不足

なんかおかしい。Eclipse本体を終了してもJavaランタイムプロセスが残っていて、メモリ使用量が上がり続ける。ほっといたらメモリ不足でWindows2000に怒られてしまった。こんなメッセージ久々に見た。これじゃ安心して使えんぞ。

CDT3.0でcolinuxのソースをインポートして読んでいたらPCの動作が遅くなり、ハードディスクへのスワップが起こり続ける。何事かと思ってタスクマネージャを見てみた。

ななななんじゃコリャ

Javaランタイムが異様にメモリを消費しとる。おまけにCPU使用率がずっと100%。タスクマネージャからランタイムプロセスを殺したら一気にメモリ解放、CPU使用率も落ち着く。

原因はどこにあるのか?JREか、CDT3.0かな。

Eclipse導入時にJava2 Runtime Environment SE v1.4.2_09 をインストールした。その後Javaの自動アップデートプログラムがバージョンアップを知らせてくれたのでそのまま従ったところ、J2SE Runtime Environment 5.0 Update 5 がインストールされたもよう。その結果コントロールパネルにJavaランタイムが2つ現れることに。2つもいらんちゅうに。この新しいバージョンが怪しそうなのだが。

CDT3.0はソースインデクサが気になる。いつもソースを検索してるし。ソース量が増えたのが原因かもしれない。

マイマシンはEclipseの動作が遅い。メモリ196MBはつらいのう。会社マシンだとメモリ1GBなのでサクサク動く。メモリ買うか。512MBくらいは欲しいのう。

投稿者 salmoon : 12:38 AM | コメント (3) | トラックバック

October 25, 2005

Eclipse3.1.1インストール

組み込み業界でも話題になりつつあるEclipse。仕事で使う、あるいはプラグインを開発することになりそうな予感。内部構造をいちはやく見極めるためWindows版をインストールしてみた。

eclipse_tour.png

ようこそメニューをたどりつつ概要をみる。
フィーチャー、ワークベンチ、パースペクティブ、リソース、ビューなどEclipse特有の用語が憶えきれんほど出てきてとまどう。システム全体をみても、JRE、SDK、JDT、CDT、PDEなど3文字の略名がこれまたたくさんある。まあそのうち慣れるだろ〜

Language Pack をインストールすることでメニューやヘルプが日本語化される。ヘルプは読みやすい日本語じゃないけどかなりの量が揃っている。それこそ入門者向けEclipseの概要から、開発者向けのプラグイン作成手引きまで。

eclipse_help.png

醍醐味はプラグイン開発ですな。デバッグに役立つオリジナルプラグインを早いとここさえてみたいのである。これはJavaでコードを書くことになる。組み込みエンジニアもついにJavaですか。いちはやく慣れちゃえば一歩進んだ組み込みエンジニア気分を味わえそう。社内にJavaでコード書くやつなんていないし。

インストールメモ

Eclipse wikiを参考に

1. Eclipse本体をインストール
eclipse downloadsからEclipse本体をダウンロードし、適当なフォルダに解凍。D:\eclipseにした。これがシステムフォルダになる。インストーラはない。システムフォルダ内のeclipse.exeをクリックするとEclipseが起動する。
eclipse-SDK-3.1.1-win32.zip (100MB程度)

2. 言語パックをインストール
Language Packs: 3.1.xから下記のファイルをダウンロードし手順1のフォルダ内に解凍。(pluginsフォルダとfeaturesフォルダ)ちなみに手順1の既存ファイルとは重複しないので安心。
NLpack1-eclipse-SDK-3.1.1a-win32.zip (50MB程度)
NLpack1_FeatureOverlay-eclipse-SDK-3.1.1.zip

3. JREのインストール
Java runtimesのリンクをたどり、SunのページからJREをダウンロードし、インストール。SDKありとSDKなしのファイルがある。とりあえずSDKなしのほうを選ぶ。インストーラがあるので楽。インストール方法を説明したSunのページを参考にWindowsの環境変数を設定する。ちなみにこのJRE、会社のWindowsXPマシンには標準でインストールされていた。これまで何に使うのか正直わからんかった。
JavaTM 2 Runtime Environment, Standard Edition Version 1.4.2
j2re-1_4_2_09-windows-i586-p.exe

4. CDT 3.0.0プラグインのインストール
Eclipseを一度起動してヘルプメニューからプラグインのリモートインストール設定をするのが簡単。手作業でインストールした後でこのことに気付く。

Installing from the Update Site

To install CDT from the update site, in the Help menu select Software Updates and then Find and Install, Select Search for new features to install and click Next. Click New Remote Site to add an update site with the URL:

http://download.eclipse.org/tools/cdt/releases/eclipse3.1

Select the appropriate CDT entry and click next to show the list of features for this release. The features for the CDT have been simplified and now only defines two features, the CDT runtime and the CDT SDK. The SDK feature is a superset of the CDT runtime with the addition of the CDT source. Place a check mark next to the desired entry and click through the rest of the pages to get the install started. After the install is completed, please make sure you accept the workbench restart.

あるいは、手作業でもできる
CDT(C/C++ Development Toolkit)からリンクをたどり、下記ファイルをダウンロードして手順1のフォルダ内に解凍する。このときも手順1の既存ファイルとは重複しないので安心。
org.eclipse.cdt.sdk-3.0.0-win32.x86.zip

投稿者 salmoon : 10:17 PM | コメント (1) | トラックバック

May 03, 2005

USL-5P ファームウェア更新のしくみ

  1. 管理画面でファイルupdate.tgzを選択してファームウェア更新ボタンを押す
  2. ファイルupdate.tgzがUSL-5Pの/mnt/ram1/に保存される
  3. 管理画面でファームウェア更新確認OKボタンを押す
  4. cgiが動作し、/home/LANDISK/scripts/verup.shを実行
  5. update.tgzが/mnt/ram1/に展開される
  6. 展開されたファイル/mnt/ram1/landisk-update.shを実行

投稿者 salmoon : 03:16 AM | コメント (0) | トラックバック

USL-5P オリジナルファームウェア作成

ファームウェアのなかみと更新の仕組みを調べて、オリジナルファームウェアを作ってみた。ファームウェアといっても、シェルスクリプトと更新したいファイルのtarballを準備するだけだ。コンパクトフラッシュ内のルートファイルシステムに変更を加えるときに使える。

つくりかた
(1) シェルスクリプト landisk-update.sh を準備
(2) 更新ファイル update-files.tar.gz を準備
(3) (1)と(2)をtarで圧縮して update.tgz をつくっておしまい
(4) I/ODATAのファームウェア更新方法と同様に(3)のファイルを選択して更新

注意点
(1)は必須で、ファイル名も決まっている。このスクリプト中に実行したいコマンドを書く
(2)はUSL-5P本体内でファイルをまとめて更新するのに使う。(1)のスクリプト内部で展開する
(3)のファイル名もこの名前にする

サンプル
Makefile(update.tgz作成用)
landisk-update.sh(I/ODATA配布のファームウェアをもとに作成。バージョンのチェックと更新を削除)

作成例
ホームディレクトリ下にmyfirmディレクトリをつくり、Makefileとlandisk-update.shを置く
landisk-update.shを適宜修正
make実行

I/ODATAの最新ファームウェアver1.02を適用するとカーネルイメージzImageが入れ替わる。また、vmlinuxとSystem.mapが削除される。容量節約のためか。

思いついたのだが、管理画面に自作メニューを付け足して、ファイルマネージャをつけたらさらに便利そうだ。初期導入時、コンパクトフラッシュを取り出して/etc/passwordファイルをいじり、さらにシリアルコンソールをつけないとログインできないのはめんどうくさい。もっと手軽にLinuxに触れられるようにしたい。

投稿者 salmoon : 01:44 AM | コメント (0) | トラックバック

April 14, 2005

USL-5P 共有ライブラリ入れ替え実験

試しにリンカローダとglibc本体をデフォルトのバージョン2.3.1から構築した2.3.2に入れ替えてみた。

-sh-2.05b# cd /lib
-sh-2.05b# ls -l libc.so.6 ld-linux.so.2
lrwxrwxrwx 1 root root 11 Oct 12 2004 ld-linux.so.2 -> ld-2.3.1.so
lrwxrwxrwx 1 root root 13 Apr 14 02:26 libc.so.6 -> libc-2.3.1.so

-sh-2.05b# ln -sf libc-2.3.2.so libc.so.6
-sh-2.05b# ln -sf ld-2.3.2.so ld-linux.so.2

-sh-2.05b# ls -l libc.so.6 ld-linux.so.2
lrwxrwxrwx 1 root root 11 Apr 14 02:57 ld-linux.so.2 -> ld-2.3.2.so
lrwxrwxrwx 1 root root 13 Apr 14 03:05 libc.so.6 -> libc-2.3.2.so

このあとコマンドをいくつか実行したところ問題なかったのでリブート。すると起動はしたものの途中で一ヶ所リロケーションエラーが起こる。ブザーが鳴って赤いLED点滅。それでもログインしてlsとかpsなどのコマンドは実行OK。

Starting httpd: /usr/sbin/httpd: relocation error: /lib/libpthread.so.0: symbol __rpc_thread_destroy, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
[FAILED]

シンボル参照に失敗している。このlibpthreadを含め、他の共有ライブラリも入れ替える必要があるようだ。

USL-5Pデフォルトのシステム内にはldconfigコマンドが存在しない。ld.so.cache、ld.so.confもない。この状態でlibc.so.6がなくなると、以降glibcを必要とするコマンドは全て使えなくなるので注意

-sh-2.05b# ls -l libc.so.6
lrwxrwxrwx 1 root root 13 Oct 12 2004 libc.so.6 -> libc-2.3.1.so
-sh-2.05b# rm libc.so.6
-sh-2.05b# ls
ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

投稿者 salmoon : 03:34 AM | コメント (0) | トラックバック

April 12, 2005

USL-5P カーネル起動成功

ついにコンパイルしたカーネルから起動した。
製品版カーネルと起動メッセージを比較し、/lib/modulesディレクトリのモジュールを参考にしてmake menuconfigで設定を合わせこみ。

gccのバージョンが違うため開発版カーネルと製品版モジュールとの相性が心配だったが、どうやら動いているらしい。電源ボタンを押してシャットダウンもOK、ブザーも鳴っている。

また、例のブザーピーピーとLEDピコピコの原因がわかった。CONFIG_HEARTBEATが定義されているとカーネル起動時に発動する。ここのソースを参考にすればLEDとブザーの制御はできることに気付く。

arch/sh/kernel/setup_julian.c: heartbeat_julian( )
make menuconfig時の設定
Character devices --> Heartbeat LED

あとは/libディレクトリ内のダイナミックリンカローダやglibc本体などのバージョンを2.3.1から2.3.2に置き換えて既存の各種アプリケーションが動けばバンザイだが、どうかな?

●/lib/modulesディレクトリ内のファイル

-sh-2.05b# find /lib/modules/
/lib/modules/
/lib/modules/noversion
/lib/modules/noversion/giodrv.o
/lib/modules/noversion/leddrv.o
/lib/modules/noversion/buzdrv.o
/lib/modules/noversion/btndrv.o
/lib/modules/noversion/faultdrv.o
/lib/modules/2.4.21
/lib/modules/2.4.21/kernel
/lib/modules/2.4.21/kernel/drivers
/lib/modules/2.4.21/kernel/drivers/block
/lib/modules/2.4.21/kernel/drivers/block/rd.o
/lib/modules/2.4.21/kernel/drivers/net
/lib/modules/2.4.21/kernel/drivers/net/8139cp.o
/lib/modules/2.4.21/kernel/drivers/net/mii.o
/lib/modules/2.4.21/kernel/drivers/usb
/lib/modules/2.4.21/kernel/drivers/usb/host
/lib/modules/2.4.21/kernel/drivers/usb/host/ehci-hcd.o
/lib/modules/2.4.21/kernel/drivers/usb/host/usb-ohci.o
/lib/modules/2.4.21/kernel/drivers/usb/printer.o
/lib/modules/2.4.21/kernel/drivers/usb/storage
/lib/modules/2.4.21/kernel/drivers/usb/storage/usb-storage.o
/lib/modules/2.4.21/kernel/drivers/usb/usbcore.o
/lib/modules/2.4.21/modules.dep
/lib/modules/2.4.21/pcmcia
/lib/modules/2.4.21/modules.generic_string
/lib/modules/2.4.21/modules.pcimap
/lib/modules/2.4.21/modules.isapnpmap
/lib/modules/2.4.21/modules.usbmap
/lib/modules/2.4.21/modules.parportmap
/lib/modules/2.4.21/modules.ieee1394map
/lib/modules/2.4.21/modules.pnpbiosmap

●起動直後のモジュールロード状態

-sh-2.05b# lsmod
Module Size Used by Tainted: PF
buzdrv 2344 0
leddrv 2376 0
btndrv 5140 2
faultdrv 2536 2
usb-storage 69720 0 (unused)
usb-ohci 21480 0 (unused)
ehci-hcd 21744 0 (unused)
usbcore 76460 1 [usb-storage usb-ohci ehci-hcd]
rd 4536 2
8139cp 17416 1
mii 3880 0 [8139cp]

投稿者 salmoon : 03:06 AM | コメント (0) | トラックバック

April 10, 2005

USL-5P 配布ソースのカーネルで起動テスト

I/ODATAが配布するLinuxカーネルソースをコンパイル、USL-5Pで実機起動テストしてみた。結果、起動途中で止まってしまった。おまけにブザーはピーピー鳴りっぱなし、ボタンのLEDはナイトライダー状態でピコピコ点滅している…なんじゃこりゃ!
製品版カーネルの起動メッセージと比較したところ、ドライバに相違があることやモジュール化の有無の設定が異なることが判明。.configファイルはソースツリー内にあるconfigs/Kernel-2.4.21-iodata.configを使ったのだが、どうもそのままではだめらしい。ブザーピーピー状態もなんか設定がありそうな予感。

開発環境は次の通り

ホスト
Windows2000, cygwin-1.5.12

クロス開発ツールチェーン
gcc-3.3.3, glibc-2.3.2, binutils-2.15
SH4 リトルエンディアン

ターゲットルートファイルシステム
製品内蔵コンパクトフラッシュ内のファイルシステム

ブートローダ
セレクタ付きsh-lilo(細渕さんに感謝)

製品版カーネルはgcc-3.2.3, glibc-2.3.1の環境で構築されていると判断したのでこれに近い開発環境を準備してみた。この環境を準備するのに一苦労、カーネルのコンパイルが通るまでまた一苦労、起動メッセージを見るまでさらに一苦労あった。でももう少しで動きそうだ。

IPL+g version 0.9, Copyright (C) 2000 Free Software Foundation, Inc.

This software comes with ABSOLUTELY NO WARRANTY; for details type `w'.
This is free software, and you are welcome to redistribute it under
certain conditions; type `l' for details.

2002/09/09 Making. 2004/09/08 I-O DATA NSU Update.
266:133:33 on base clock 22.22MHz and SDRAM 4 burst. CF boot.

PCIC initialization done.
MASTER:48bit LBA mode non support
Disk drive detected: Hitachi XXM2.3.0 Rev 3.00 X0305 20041011062926
LBA: 0001E900
DiskSize: 64094208Byte
PIO MODE1
Set Transfer Mode result: 51
> b
Set Transfer Mode result: 51
Initialize Device Parameters result: 50
IDLE result: 50
LILO boot:

1 : linux
2 : linux-new
3 : linux-0409

Select boot image -> 3
Loading linux-0409.....................done.
(文字化け省略)
66.24 BogoMIPS
Memory: 62640k/65536k available (1676k kernel code, 2896k reserved, 130k data, 2
08k init)
Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
Inode cache hash table entries: 4096 (order: 3, 32768 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
CPU: SH7751R
POSIX conformance testing by UNIFIX
PCI: Using configuration type 1
SH7751R PCI: Finished initialization of the PCI controller
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Allocate Area5/6 success.
Julian Shutdown button driver initialized
Starting kswapd
Journalled Block Device driver loaded
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
SuperH SCI(F) driver initialized
ttySC0 at 0xffe00000 is a SCI
ttySC1 at 0xffe80000 is a SCIF
Real Time Clock Driver v1.10e
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
8139too Fast Ethernet driver 0.9.26
8139too: pci dev 00:00.0 (id 10ec:8139 rev 20) is an enhanced 8139C+ chip
8139too: Use the "8139cp" driver for improved performance and stability.
PCI: Enabling device Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (0000
-> 0003)
PCI: Setting latency timer of device Realtek Semiconductor Co., Ltd. RTL-8139/81
39C/8139C+ to 64
eth0: RealTek RTL8139 Fast Ethernet at 0xfd000000, 00:a0:b0:65:03:6d, IRQ 5
Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
hda: Hitachi XXM2.3.0, CFA DISK drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 10
hda: attached ide-disk driver.
hda: task_no_data_intr: status=0x51 { DriveReady SeekComplete Error }
hda: task_no_data_intr: error=0x04 { DriveStatusError }
hda: 125184 sectors (64 MB) w/1KiB Cache, CHS=978/4/32
ide-floppy driver 0.99.newide
Partition check:
hda: hda1
ide-floppy driver 0.99.newide
SCSI subsystem driver Revision: 1.00
scsi0 : SCSI host adapter emulation for IDE ATAPI devices
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
PCI: Enabling device NEC Corporation USB 2.0 (0000 -> 0002)
ehci-hcd 00:02.2: NEC Corporation USB 2.0
ehci-hcd 00:02.2: irq 5, pci mem fd000100
usb.c: new USB bus registered, assigned bus number 1
PCI: 00:02.2 PCI cache line size set incorrectly (0 bytes) by BIOS/FW.
PCI: 00:02.2 PCI cache line size corrected to 32.
ehci-hcd 00:02.2: USB 2.0 enabled, EHCI 1.00, driver 2003-Jan-22
hub.c: USB hub found
hub.c: 5 ports detected
PCI: Enabling device NEC Corporation USB (0000 -> 0002)
PCI: Setting latency timer of device NEC Corporation USB to 64
host/usb-ohci.c: USB OHCI at membase 0xfd001000, IRQ 7
host/usb-ohci.c: usb-00:02.0, NEC Corporation USB
usb.c: new USB bus registered, assigned bus number 2
hub.c: USB hub found
hub.c: 3 ports detected
PCI: Enabling device NEC Corporation USB (#2) (0000 -> 0002)
PCI: Setting latency timer of device NEC Corporation USB (#2) to 64
host/usb-ohci.c: USB OHCI at membase 0xfd002000, IRQ 8
host/usb-ohci.c: usb-00:02.1, NEC Corporation USB (#2)
usb.c: new USB bus registered, assigned bus number 3
hub.c: USB hub found
hub.c: 2 ports detected
Initializing USB Mass Storage driver...
usb.c: registered new driver usb-storage
USB Mass Storage support registered.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 4096 bind 8192)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NET4: AppleTalk 0.18a for Linux NET4.0
hda: hda1
hda: hda1
hda: hda1
hda: hda1
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 208k freed
・nit started: BusyBox v0.60.5 (2004.07.22-09:20+0000) multi-call binary
Mounting proc filesystem: [ OK ]

無念ここでストップ

投稿者 salmoon : 02:21 PM | コメント (0) | トラックバック

March 26, 2005

USL-5P マスターブートレコード

内蔵コンパクトフラッシュのMBRをダンプしてみた。

LILOがインストールされており、バージョンは 21.3

 ADDRESS : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000000 : 30 A0 03 6C 62 61 4C 49 4C 4F 01 00 15 03 5A 00

パーティションテーブルエントリは1つで、構成は下記の通り
ブートフラグ 0x00
開始位置(CHS) 0x010100 シリンダ0x0 ヘッド0x1 セクタ0x1
パーティションタイプ 0x83 ext2fs
終了位置(CHS) 0x01FEF0 シリンダ0x3F0 ヘッド0x1 セクタ0x3E
開始位置(LBA) 0x0000003E 62セクタ
総セクタ数 0x0001E87E 125054セクタ

 ADDRESS : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
000001B0 : 09 00 09 00 09 00 00 00 00 00 00 00 00 00 00 01
000001C0 : 01 00 83 01 FE F0 3E 00 00 00 7E E8 01 00 00 00   
000001D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000001F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA

ブートフラグが0x80ではなく0x00のままなのに起動するのはなぜ?

MBR解析に役立つ情報
ブートとハードディスクのすべてマスターブートレコードの解析
sh-liloのソース(取得方法はこちらを参照)
sh-liloの動作シーケンス解説

投稿者 salmoon : 06:28 PM | コメント (0) | トラックバック

February 28, 2005

リンカを100%使いこなそう!

CQ出版社の月刊誌Interfaceの連載記事「リンカを100%使いこなそう!」がおもしろい。ELFフォーマットとかライブラリ、リンカのしくみをわかりやすく説明してあって、毎回楽しみだ。2004/12月号から始まって現在は第5回まで進んでいる。これまでほとんど扱われることのなかった分野だからなおさら興味深い。唯一扱ったのはUNIX USER誌の過去連載「GCCプログラミング工房」(西田亙さん)くらいだ。あとは本のLinkers&Loadersだが、これは前述の2連載よりとっつきにくい。

組込みLinuxのメモリ管理機構やプロセスメモリ空間を調べるには、カーネルやドライバ、ユーザアプリ、共有ライブラリがメモリ上でどのように展開されるか知っておかないとつらい。このあたりはまさにリンカ、ローダが担っている部分なのだ。

連載の執筆者は坂井弘亮さんで、富士通アイ・ネットワークシステムズの方らしい。むかし技術評論社のC言語 入門書の次に読む本を買った。一般のC言語解説本と違って開発の現場に一歩踏み込んだ実践的なところが気に入った。実はこの本、坂井さんの書かれた本だったのだ。

投稿者 salmoon : 12:56 AM | コメント (0) | トラックバック

December 11, 2004

USL-5Pのソース到着

アイオーデータからCD-ROMが送られてきた。CDの中に入っていたのは下記2つのファイルで合計50MB程度
  README.TXT
  USLSRC100.TGZ

メールで問い合わせたときは

 ※GPL/LGPLに基づき、本製品を構成しているプログラム・ドライバのうち
  USL-5P向けに独自に作成された部分を除くオープンソースソフトウェアのみと
  なっております。

という回答だった。いったいどの部分が除かれているのか?ソースとコンパクトフラッシュ内のファイルを比較すれば何かわかりそうだ。

usl-5p_cd.jpg

投稿者 salmoon : 03:41 AM | コメント (0) | トラックバック

December 07, 2004

USL-5Pのソース配布

アイオーデータのQ&Aでソース配布していることを知り、問い合わせてみた。

Q1) 入手方法は?
切手500円分を送るとCD-ROM発送。

Q2) LANDISKとUSL-5Pのソースは同じか?
異なる

Q3) 他にLinuxを採用している製品はあるか?
こちらの製品ページのファイルサーバは全てOSにLinuxを採用

Q4) LANDISKとUSL-5Pのソース同時発送を希望するが、切手500円分でよいか?
だめ。あわせて1000円分

LANDISKみたいにWEBで配布されるかもしれないが、はっきりわからないので切手500円分を送った。いつくるかな。それまで開発用ツールチェーンを準備しとくか。

投稿者 salmoon : 03:00 AM | コメント (0) | トラックバック

December 06, 2004

USL-5Pのシリアルコンソール

hosoさんのwikiページに触発され、アイ・オー・データのUSL-5Pをちょっと前に買った。このたびUSL-5Pを分解してシリアルポートを増設してみた。部品は秋月電子で購入、下記4点で600円。
1) DSUB9pinメスコネクタ
2) DSUB9pinコネクタカバー
3) RS232CインターフェースIC ADM3202AN
4) DSUB9pinストレートケーブル

久しぶりにはんだごてを握る…
シリアルケーブルでPCに接続してTeraTerm起動、本体スイッチオン…

usl-5p_boot.png

起動メッセージ出た――――!!!

Lineo Linuxだったのね。カーネル2.4.21か。
rootでログインしようとするが、パスワードがわからないのでNG。コンパクトフラッシュにファイルシステムが保存されているらしい。なので取り出して別のLinuxマシンにマウントし、パスワードファイルを削除すればログインできるはずだ。

投稿者 salmoon : 02:05 AM | コメント (0) | トラックバック

December 01, 2004

サンがSolaris 10発表,4CPU以下は無償に

IT Pro ニュースより

サン・マイクロシステムズは2004年11月30日,同社が開発・販売するOSの新版「Solaris 10」を発表した。600項目以上の機能改良を施したほか,Javaと同じようにソースコードを改良するコミュニティを設立し,オープンソースに基づく開発プロセスへ移行する。2005年1月31日に無償ダウンロード提供を開始し,有償のメディアキットを同年2月に発売する予定。関連記事米Sun,新OS「Solaris 10」を2005年1月リリース,商用目的でも無償利用が可能に : IT Pro US News Flash

なんと、Sunにとって生命線といえるOSをオープンソースに!しかも商用目的でも無償利用可能。なぜそうするのか、背景を知りたい。

関連記事に
新版は「Linux Application Environment」(開発コード名は「Project Janus」)と呼ぶ機能により,Linuxアプリケーションをバイナリ・コードのまま未変更で実行することが可能になった。

とあることから、Linuxをかなり意識していることは間違いなさそう。LANDISKやUSL-5PにSolaris 10ポーティングも夢ではない。

投稿者 salmoon : 02:41 AM | コメント (0) | トラックバック

November 25, 2004

NINTENDO DS 分解記事

NE ONLINE【DS続報】筐体を開けてみた(2004/11/23)より

11/21アメリカでNINTENDO DS発売開始。現地で買ったスタッフが分解して写真を撮っている。ARM9とARM7のデュアルコアMPU、32メガビットのFCRAMを搭載。アクセス速度がDRAMより高速とな。DSって無線通信できるのか。どんなふうに使うんだろ。無線通信で対戦とか?それだけじゃつまらんなぁ。日本で発売されたら内部仕様をいろいろ解析されるんだろうな。どう遊べるのか楽しみ。ちなみに日本での発売は12/2だ。

NE ONLINEのDS分解記事は何回か続くらしい。

投稿者 salmoon : 01:59 AM | コメント (0) | トラックバック

November 18, 2004

アイ・オー・データ製品USL-5Pの分解記事

iohackのメーリングリストでUSL-5Pの分解記事を知る。うほっLANDISK同様、SH4とLinuxを使った製品だ。違うのはハードディスクの替わりに64MBのコンパクトフラッシュを搭載している点。すると、Linuxカーネルとルートファイルシステムはコンパクトフラッシュの中に保存されていることになる。起動時にコンパクトフラッシュからRAMへ転送されているのか?RAMはどれだけ搭載されてるんだろうか。はっ!?それともXIPなのか?

LANDISK同様、シリアルポート用パターンが基板にあるのでシリアルコンソール拡張OKみたい。これまたおもしろそうだ。ET2004が終わったら自分へのご褒美に買って分解してみようかなっと。

投稿者 salmoon : 12:41 AM | コメント (0) | トラックバック

October 31, 2004

世界初、超小型USB-JTAGモジュール

なひたふ新聞より

ノートパソコンでもJTAGが使いたい!! JTAGを部品として組み込みたい!! そんな皆様のご要望にお答えして、世界初、超小型USB-JTAGモジュールを開発しました。 SmartJTAGは、お客様のボードに「部品として」組み込むことができる新しいコンセプトのUSB-JTAGインタフェースです。

おおっ!このモジュールとフリーソフトのMITOUJTAGを組み合わせればLANDISKでJTAGデバッグ可能か!?と思いきや、SH4未対応だった…

投稿者 salmoon : 12:20 AM | コメント (0) | トラックバック

October 23, 2004

ソースコードを読むための技術

ソースコードを読むための技術より

この文書を書いた動機
ソースコードを読みなさい、あるいは読んでいく、という話題はわりとあるけども、どう読んだらいいか書いたものは見たことがない。プログラマならプログラムの読みかたは当然わかっているものだということなのだろうか?

しかし自分には人の書いたプログラムを読むことがそんなに簡単なことだとは思えない。プログラムを書くのと同じくらい、読むことにだって技術や定石があるはずだし、必要だと思う。そこで、コードをどう読むべきか、とりあえずは C 言語を前提として、無意識のうちにやっていることを明示的に整理してみる。

上記ページでは、ソースコードの解析方法やツールをコンパクトにまとめて紹介してある。なかなかイイ。最近は仕事で既存ファームウェアへ新機能を追加しているのだが…ファームプログラミングは初めてにもかかわらず比較的大きな規模、しかも納期は早めで頼む、ときたもんだ。どうしろというのか?既存コードを効率よく理解したいのだが、以下の点を把握するのに苦労している。

全体像(機能の繋がり)
各関数の機能
関数の呼び出し関係
データ構造
データの持つ意味

ドキュメントも大切だよ。適切な仕様書、少なくも多くもない適量のコメントがあれば助かる。コメント多すぎるとフローが読みづらいのなんのって。業務効率向上のためいろいろ模索しているところ。これは美しく健康なコードを書くための通過点なのだきっと。

書籍では以下のものがおすすめ。
Code Reading―オープンソースから学ぶプログラミングテクニック
達人プログラマー―システム開発の職人から名匠への道
プログラミング作法

投稿者 salmoon : 02:27 AM | コメント (0) | トラックバック

October 21, 2004

LANDISKのLinuxソース公開

SourceForge.jp: Project Info - iohackでアイ・オー・データ機器の製品LANDISKのソースコード集がつい先ほど公開された。いまダウンロード中(^^)。管理者kinnekoさんによると、Yahoo groupsから情報交換の場を移動するそうだ。

iohackプロジェクトは、市販のハードウエアを使って FreeOS で遊ぶためのノウハウを交換する。動作報告、ドライバhack、ファームウエアのカスタム、ハードウエアhackなどを扱う。

まさに、まさにィィィィ おれのためのォォプロジェクトだッッッ!!!!(荒木飛呂彦ふうに)

大喜びですよ。さっそくメーリングリストに登録した。

投稿者 salmoon : 01:33 AM | コメント (0) | トラックバック