ハードウェアを意識したプログラミングの基礎(後編)

荘司靖

tag: 組み込み

技術解説 2008年5月 1日

 platform_match()は,strncmp()でデバイス・ドライバとデバイスのnameメンバ変数の文字列が一致しているかどうかをチェックします.同じだった場合(リスト20),really_probe()に飛びます(リスト21)

194:
195:   pr_debug("%s: Matched Device %s with Driver %s\n",
196:     drv->bus->name, dev->bus_id, drv->name);
197:
198:   ret = really_probe(dev, drv);


リスト20 関数really_probe()を呼び出す(drivers/base/dd.c)

100: static int really_probe(struct device *dev, struct device_driver *drv)
101: {
102:   int ret = 0;
103:
104:   atomic_inc(&probe_count);
105:   pr_debug("%s: Probing driver %s with device %s\n",
106:     drv->bus->name, drv->name, dev->bus_id);
107:   WARN_ON(!list_empty(&dev->devres_head));
108:
109:   dev->driver = drv;
110:   if (driver_sysfs_add(dev)) {
111:     printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n",
112:       __FUNCTION__, dev->bus_id);
113:     goto probe_failed;
114:   }
115:
116:   if (dev->bus->probe) {
117:     ret = dev->bus->probe(dev);
118:     if (ret)
119:       goto probe_failed;
120:   } else if (drv->probe) {
121:     ret = drv->probe(dev);
122:     if (ret)
123:       goto probe_failed;
124:   }
125:
126:   driver_bound(dev);
127:   ret = 1;
128:   pr_debug("%s: Bound Device %s to Driver %s\n",
129:     drv->bus->name, dev->bus_id, drv->name);
130:   goto done;


リスト21 関数really_probe()(drivers/base/dd.c)

 dd.cの109行目で,初めてデバイスにデバイス・ドライバが登録されます.110行目でsysfsへの登録を行います.116行目でbusがprobe関数を持っているかを確認し,あればその関数を使います.しかし,platform busはprobe()を持っていません(リスト22).そのため,120行目でドライバのprobe()が呼び出されます.デバイス・ドライバが正常にデバイスのprobeを行うことができれば,ぶじ登録完了となります.

25: struct device platform_bus = {
26:   .bus_id = "platform",
27: };


リスト22 構造体platform_bus(drivers/base/platform.c)

おわりに

 ハードウェアを意識したプログラミングの基礎ということで,Linuxのコードを借りつつ,筆者の若いころの失敗談をネタにしてみました.記事では,たった1行でオシロスコープを取り出したように読めますが,16ビット・アクセスが二つの8ビット・アクセスになっていたことに気が付いたときは,既に空が白んできていました.何度「このCPU,ありえない!」と叫んだことか(^^; ちゃんと命令通りに動いていたCPUよ,ごめんなさい).

 ハードウェアとの境界面でのプログラミングは,ソフトウェアの世界で最も下層に位置しています 注5 .そのため,幅の広い知識と経験が必要ですが,個人が一定期間で経験できる量には限りがあります.このギャップを埋めるためにLinuxのコードが大活躍します.オープン・ソースというスタイルで開発された結果,膨大な知識と経験が開発の歴史として蓄積されているLinuxは,まさにエンジニアの宝箱です.

注5;筆者は高林哲氏の「普通のやつらの下を行け」が,大好きである.http://0xcc.net/blog/archives/000066.html

 「愚者は経験に学び,賢者は歴史に学ぶ」という言葉を思い出しつつ,これからもこの楽しいプログラミングを満喫したいと思います.皆さんにこの記事を通して楽しさが少しでも伝われば幸いです.

参考・引用*文献 (1)中森 章;TECH I vol.20 マイクロプロセッサ・アーキテクチャ入門,CQ出版,2004年4月.


しょうじ・やすし
(株)アットマークテクノ

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日