2010年01月14日

前回に続きqemuのソースを追いかけたときのメモ。

qemu メインループ

続きを読む

2010年01月12日

Linux のソースコードでは、ユーザ空間とカーネル空間のポインタを区別するために、__user や __iomem などのマクロを変数に付けています。これは最終的には noderef や address_space(n) などの attribute に落ちて、sparse チェッカーというプログラムによってチェックされます。

参考: sparseチェッカー

これと同じように、異なるアドレス空間を指すポインタ変数に、アドレス空間ごとに任意の名前を付け、静的チェックや自動的に適切なコードを生成してくれるようなしくみがコンパイラにあれば、メモリが複数領域に分かれているような環境でのプログラミング時に便利です。これが名前付きアドレス空間サポートです。

時系列は追いきれてないのですが、2008 年 4 月に RFC が GCC の ML に提案されたようです。

RFC: named address space support

named-addr-spaces-branch という branch が存在し、更新はメインラインにマージされるそうです。
今のところは CELL/spu ターゲット限定のようです。

3.17.37 SPU Options

この方の記事が詳しいです。PIC や AVR などのプロセッサでは、ROM/RAM/FLASH というようにメモリ領域が分かれているため、名前付きアドレス空間のサポートが必要になってくるそうです。

ARMにはまった: GCCの名前つきアドレス空間サポート
ARMにはまった: まだまだねばるPIC用GCC、別アドレス空間の話

2010年01月08日

GCC 4.5 から、libstdc++ のみをスタティックリンクするための -static-libstdc++ オプションが追加されたそうです。

「PATCH RFA: Add -static-libstdc++ option to g++」
http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01635.html

g++ は、過去のバージョンアップで何度か ABI が変わっています(2.95、3.1、3.3、4.0 で互換性が失われているそうです)し、これからも変わる可能性があります。

そのため、場合によっては適切な libstdc++ がダイナミックリンクできなくて、プログラムが動かなくなる可能性があります。
例えば上記の patch の説明では、gcc 自身を g++ でブートストラップする場合などが挙げられています。ビルドプロセスの途中で ABI が異なる g++ が複数動くことになると、ダイナミックリンクでは当然上手く動きません。

注意点として、libstdc++ をダイナミックリンクする C++ コードを dlopen() などを経由して使うことができなくなるようです。

「Re: -static-libgcc, static libstdc++.a and dynamicly loaded so files」
http://gcc.gnu.org/ml/gcc-help/2009-12/msg00186.html

2010年01月06日

少し前にqemuのソースを追いかけたときのメモを放出します。

TCG

qemuは高速に実行するためにインタプリタでなくJITのようにターゲットのCPU命令列をホストのCPU列に変換して実行する。 version 0.10の頃からこの部分が従来のトランスレータからTCG(Tiny Code Generator)と呼ばれるものに置き換えられた。

続きを読む

2009年12月25日

弊社は 28 日が仕事納めなので、今日が今年最後の更新となります。

来年は 1 月 6 日からの再開となります。よろしくお願いします。

2009年12月21日

新しいターゲットボードに ARM Linux を移植するとき、何をすれば良いのか、各ファイルにはどのような役割があるのか、なかなかわかりにくいと思います。

自分の経験を元に、以下にまとめてみます。内容は無保証です。

続きを読む

2009年12月17日

辻さんは Linux がバージョン 0.9 の頃から kernel を見てきたそうなのですが、当時は Yggdrasil Linux というディストリビューションを使っていたという話をこの間聞きました。92-3 年あたりとのことです。

続きを読む

2009年12月15日

この間、NOR flash memory にちゃんとデータが書き込めているかを簡単にチェックしようと思ったとき、PARTNER の機能が便利だったので紹介します。

0xa0000000 から 64 MB の NOR flash memory があると仮定します。
また、0x00000000 から十分な DRAM があると仮定します。(今回はターゲットのメモリを直接利用します。)

PARTNER は NOR flash を通常のメモリと同様に読み書きすることができます。(NAND flash は未サポートです。)

l (load) コマンドや rd (file read) で、適当なデータ (c:\nor_flash.bin) を先頭から 0x1000 バイト (セクタサイズ) 書き込んだとします。

- データファイルの内容をメモリに読み込む

> rd c:\nor_flash.bin,0

- 0xa0000000-0xa0000fff 番地までの内容を、0 番地からの内容と比較

> c a0000000,a0000fff,0

大容量のダンプを比較する場合には、以下のようにファイルに書き出して (RAM Disk などの高速なディスク領域が望ましいです) 外部ツールを使うべきですが、ちょっとしたデバイスの確認などには、PARTNER のこれらのコマンドを使用するのが便利だと思います。

- ファイルにメモリの内容をダンプ

> wr c:\nor_flash.data,a0000000,a0000fff

2009年12月11日

2 ちゃんねる発祥の Mona OS の開発者 higepon さんが、Mona OS のデバッグ環境を整えようと努力されているようです。

Mona OS は QEMU 上で開発されていて、QEMU は gdbstub.c というプログラムで GDB と接続し、ICE のように使うことができます。

ひげぽん OSとか作っちゃうかMona- 2009/12/08 GDB スタブを書いてみよう その1
GDB スタブを書いてみよう その2
目的

達成したいのは Mona 中のユーザープロセスのデバッグ。ユーザープロセスが出来れば Kernel は簡単だと思う。
特にユーザープロセスが死んだときにソースコード上のどこで死んだかが GDB 一発で分かるようにしたい。

弊社の JTAG デバッガ PARTNER-Jet は、まさしくこのような機能を備えていて、弊社ではそれを「OS 対応」と呼んでいます。Linux、Win CE、(T-Kernel などの各種) RTOS、などに対応しており、オプションとして購入可能です。

続きを読む

2009年12月09日

遅くなりましたが、先週行われたAndroidのイベントで話した発表資料をここに貼っておきます。

内容的にはGoldfishの説明はほんのさわりだけで、大部分はEclairのソースの面白そうなところの紹介です。

続きを読む

2009年12月07日

ET 2009 のパネルディスカッション「組込みマルチコア技術の着地点は見えたか? Part 2」で、辻さんが少し Google の Go というプログラミング言語に触れていました。

この言語はいきなりぽっと出てきたわけではなく、ベル研究所におけるポスト UNIX としての長い研究の歴史があります。(そもそも、Ken Tompson 氏、Rob Pike 氏などの Plan9 の有名人が直接関わっています。)

続きを読む

2009年12月03日

おとといの月例会議中に、社長から突然社長賞(表彰 + 特別ボーナス)という制度の設立が発表され、誰もが納得する 3 人の先輩が第 1 回目を受賞されました。おめでとうございます。

弊社のように、全体で 10 数人という規模の会社では、案件の種類によっては、特定の人に大きな負担がかかってしまうことが避けられない側面があります。

だからこそ全員で助け合い、負荷を分散する必要があるのですが、やはり技術に重点をおく会社の性質上、特定の人以外には手が出せない(アウトソースもなかなか難しい)領域というものが存在し、その工数が多い時期というものが存在してしまうのが現実です。

小さな組織は、柔軟で効率的な運営ができる反面、なあなあになりがちで、ともすれば特定の人への仕事の偏りが常習化してしまうという弊害もあると思います。定期的に組織編成を見直し、正当に働きを評価をする機会として、このような会議中の表彰制度というのは有効なのではないかと思いました。

# そのほかにも、ちゃんと会社から評価されているということを、ご家族の方々にも知らせて、ご理解をいただくことを期待する、というような心理面でのケアという側面もあると思います。

もちろん、お金さえ出せば万事解決、などとは誰も思っていません。
ちゃんと若手を育成し、複数人でのバックアップ体制を作っていくという組織改善の努力が重要ですし、これはみんなで考えていかなければいけない問題です。しかし、そのような本質的な解決にはやはり時間がかかります。社長は常にここらへんを気にかけ、どうしたものかと苦悩されているようで、社長賞などの各種表彰制度の整備も、様々な対策のうちの一つなのでしょう。

続きを読む

2009年12月01日

最近 twitter 関連の本が何冊も出版され、徐々にメジャー (?) になりつつあるように感じます。

amazon.co.jp - 和書 検索 > "twitter"

詳細は割愛しますが、twitter というのはマイクロブログサービスです。

ブログは誰でも見ることができる開かれたメディアで、情報の鮮度やまとまり具合がほどよく、コメントやトラックバックなどのしくみも充実しています。
しかしその反面、少し固いメディアでもあるので、記事をまとめるというのは、それなりに手間がかかります。
チャットや IRC は手軽に思ったことを書き込めますが、身内だけで話題が閉じてしまいがちで、情報が表に出てきません。
twitter は、その両者の間のニッチを上手く埋めるサービスだと思います。

twitter には、ハッシュタグというサービスがあります。これにより、自分が follwo している人々だけではなく、twitter 全体から共通の話題に関するポストだけを読むことができます。

この間の ET 2009 の時には、#et2009 というタグが作られ、これがけっこう便利だと個人的に感じました。今年は、どこで何を展示していて、何が面白いのか、などの情報を横断的に見ることができました。

#et2009
(現在、一時的に過去のつぶやきが見えなくなってるようで、何も表示されていませんが…)

また、さまざまな外部サービスを利用するのも便利です。例えば以下のサービスを利用すると、特定のタグを使用した人のリストを見ることができるようです。

ハッシュタグクラウド #et2009

一時的なタグの他にも、例えば #embedded_jp などの永続的なタグもあり、共通の話題を持つ人々 (twitter では、クラスタと呼ばれます。) を素早く見つけ、話題をフォローすることができて楽しいと思います。これから twitter を始めてみようという方は、まずはここらへんから攻めてみると良いかと思います。

#embedded_jp

参考: twitterでの組み込み系話題のハッシュタグ #embedded_jp ができました

ウェブ系やオープンソース系に比べると、組み込み系は (ハードウェアに近い世界では、必然的に NDA が多くなるという仕事の性質もあるのですが) なかなか情報が表に出てこなくて、技術者同士の接点も少ない印象があります。そのため、知名度も低く、なかなか新しい人が入ってこないため、業界全体の高齢化が進んでいるという現状があるのではないかと思います。(弊社もかなり平均年齢は高めだと思います。私はそろそろ 20 代も後半なので、世間的にはけして若い方ではないと思いますが、弊社では最年少です。1 つ上の佐藤さんの次は、もういきなり 10 歳以上年齢層が上がります。)

このブログも、そのような現状を変えたいという思いから続けているわけなので、この twitter のような情報共有の流れは好ましいと思い、紹介させていただきました。

2009年11月27日

主にセマフォの実装などに使用されてきた SWP/SWPB 命令は、もともと ARM v6 アーキテクチャ以降では廃止予定扱い(deprecated) になっていたのですが、ついに v7 からは、デフォルトで未定義命令扱いになり、実行すると例外が飛ぶようになったようです。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204gj/Chdbbbai.html

例えば v7 アーキテクチャ向けに Linux や root filesystem をビルドする時、コンパイラのターゲットアーキテクチャオプションが v7 になっていないと、これが生成されてしまい、システムの奥底で突然謎の例外が発生してクラッシュしたりという、わかりにくい不具合の原因にも成り得るので注意が必要です。

より正確には、v7 でも完全に廃止されたわけではないようです。ARM Architecture Reference Manual (ARMARM) v7-A and v7-R を紐解いてみると、ARM v7-A の場合は System Control Register (SCTLR) というレジスタが存在し、bit[10] が SWP/SWPB Enable bit ということで、これが 1 の場合は実行が可能なようです。(reset 時は 0 。)

v6 以降では、新しく追加された LDREX/STREX を使うことが推奨されています。

それにしても、x86 に慣れた身からすると、プロセッサが後方互換性を捨てるなんていうのはありえない気がします。しかも完全に廃止したわけではなく、回路は残していて、実行も一応は可能というのも不思議です。

この変更は multiprocessing 向け対応の 1 つなのだそうです。ARM はこれからますますマルチコアやマルチプロセッサに対してアグレッシブに取り組んでいくぞという意思表示なのでしょうか。

2009年11月25日

前回の記事に対して、浜地さんからD が若いかどうかは微妙なラインという指摘をいただきました。

言われてみればその通りです。最近(?) Ruby on Rails などで話題になっている Ruby も、開発が始まったのは 1993 年からということで、実は Java (1996) よりも歴史があったりします。

# Java の前身の Oak は 1990 年から開発が始まっていたりと、また微妙ですが。

というわけで、DWARF 3 の対応言語の登場時期を、ざっくりと並べてみました。

続きを読む

記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード