Let's start Scheme

2010-04-30

OS: GRUBの続きの続き

前回GRUBでカーネルイメージが読み込めたと思って喜んでいたのだが、VRAM周りのコードが上手く動いていなかった。
GRUBが最初に読み込む部分はアセンブラで書いているのだが、カーネルのコード(になる予定)から戻ってきたときには文字列が表示されるのに、コード内部で表示しようとしたら意図しない文字が表示されていた。
それでもって、自分で作ったVRAM用のクラスを使うとGRUBが再起動しまくりで、大変なことになっていた。

何が原因か分からなかったので、とりあえずデバッグすることに。
qemuのデバッグってどうやるのかとググって見たら、こんなページに遭遇。
-sと-Sオプションをつけるのね。意味は調べてないけど・・・
っで、gdbをカーネルイメージを引数にして起動。
(gdb) target remote localhost:1234
このコマンドでqemuに接続してすれば、普通にブレークポイントとか設定可能。

っで、動かしてみたところ、GRUBはELF形式にしか対応してないことが判明。
Cygwinで作ってるので、PE形式なイメージなわけで、どうしろと?
クロスコンパイラを作るのか?(GCCのターゲット指定でコンパイルだと思う)
と思っていたが、objcopyでバイナリ形式にしたら動いた。
まぁ、とりあえずこれでいいか。GRUB周りで苦しむのは本意ではないし・・・

どうでもいいが、調べている過程でmultiboot.hを覗いたのだが、カーネルに渡す構造体のなかにVBEの情報が入ってた。
まぁ、そのうち対応する予定なので、自前でなんだかやらなくても済んだかもと期待しておこう。
(でも、先にメモリとか割り込みテーブルとかやることは満載・・・)

2010-04-29

歯のクリーニング

今までの人生ではじめての経験であった。
今までそんなものとは無縁で生きてきたのだが、折角保険に入ってるし使わないともったいないとそそのかされて行って来た。

・・・


・・・・・・


・・・・・・・・・


涙が出るほど痛かった。
おかしいだろ!
歯を削るのと同じ機械だと思われるものでがりがり何かを削られて(多分歯石)、そのあとポリッシャーで表面を磨くという工程だったと思うのだが、
30分が永遠に続くんじゃないかと思えたくらい地獄の時間であった。

歯科衛生士さん(でいいのかな?)話によると、少なくとも6ヶ月に1回は行った方いいそうだ。
年に2回もあの地獄を味わうのかと思うと・・・

歯磨きの重要性を思い知った瞬間だった。

2010-04-16

暗いニュースが多いなぁ・・・

日本の政治関連のニュースを読んでいると暗いニュースしかみない。
まぁ、税金は払ってないし個人的にはあまり関係ないのだがやはり読んでいると辛い。

ポーランド大統領の国葬に出席しない総理大臣とか、
オバマ大統領にLoopyと呼ばれる総理大臣とか、
ジミンガーと叫んで自分の責任を放り出す総理大臣とか、
普天間基地の話はマスコミが報道し過ぎたせいで国民が知りすぎたなんて言っちゃう総理大臣とか、
そのくせ桜を見る会は開く総理大臣とか、
会話全文を読んでも質疑応答になってない回答をする総理大臣とか、
そもそも、国会に出ることが嫌いで仕事するのも嫌いそうに見える総理大臣とか

そんな感じの洒落で済むものから洒落にならないレベルのものまでたくさん。
(どれをとっても洒落にはならんが・・・)

ま、それを報道しない(らしい)マスコミも大問題だろうし、傀儡政権の裏でとんでも法案を無理やり通そうとしている民主党幹事長がいるらしいけど・・・

大丈夫なんだろうか、日本・・・

個人的に一番問題だなと思うのは、こんな状態になってもデモ一つ起こさない国民だろうと思ったり・・・
もはや政治家は役に立たないどころか、敵でしかない状態なのだから何か行動を起こす人がいてもよくないか?
(といって自分が起こすわけでもないので、やはり僕も問題な国民の一人・・・)

2010-04-10

OS: GRUBの続き

昨日のエントリーで、いまいち動かないと書いたが、少し前進した。

マルチブートに関してヘッダー等がいるので、GRUBのサイトからmultiboot-0.6.96をダウンロード。その中にboot.Sというファイルとkernel.cというファイルがあるのでコピー。
(とりあえず、動作確認できればいいので・・・)
っで、普通にビルド。
_edataが定義されてないと怒られる。

なんだこれ?

Google先生に聞いてみる。

・・・

・・・・・・

・・・・・・・・・

.dataセクションの終わりを示すポインタらしい。
うわさによるとリンカーが自動で作るものらしいが、CygwinのGCCではなのかGCC 3.4.4ではなのかは知らないが作ってくれないらしい。
とうことで、リンカスクリプトを書く。
というか、ここから拝借。
cygwinではelf-i386はサポートされてない(というかpe-i386しかサポートされてない)ので、OUTPUT_FORMATの行を削除。OUTPUT_ARCHも、まぁいらんかなと思い、削除。
っで、make。
なんか表示された。

激しく文字化けというか、意味不明の文字ばかり見えるが、とりあえず何か表示されているのでよしとしよう。
あとはカーネルっぽくいろいろ作るだか(というかそれが一番大変だと思うが・・・)

2010-04-09

OS: GRUBをCygwinで無理やり使う

ここ3日くらい調べてようやくなんとかなった。

ひょっとして同じところで躓いてる人がいるかもしれないので、メモ。
用意するもの:
Cygwin(当然か)
VFD(ここから)

あらかじめ、fstabに以下を記述。
a: /cygdrive/a vfat binary,posix=0 0 0
っで、ddでFDサイズのファイルを作って、VFDで開いてフォーマットしたら、
grub-installでFDイメージにインストール。このとき、デバイスは/dev/fd0を指定する。

面倒なので、スクリプト書いた。
#!/bin/sh -x
# generate floppy image with grub2.

grub=/lib/grub/i386-pc
file=fd.img
vfd=/cygdrive/d/bin/vfd/vfd
fd0=/cygdrive/a

# create floppy image.
dd if=/dev/zero of=$file bs=1k count=1440
$vfd open $file
# format
$vfd format
# いらないかも・・・
mkdir -p $fd0/boot/grub
# 適当にモジュールを指定しているので、必要なもの不必要なものは調べる。
grub-install --modules="_chain ls pc multiboot gpt fat boot reboot configfile cat help " --root-directory=$fd0 /dev/fd0
# grub.cfgは作ってくれないので、別途コピー
cp grub.cfg $fd0/boot/grub

$vfd save
$vfd close
こんな感じ。
きっと必要に応じて、イメージのdevice.mapとかを編集すればいいはず。とりあえず、GRUBが起動するところまでは確認。

あとは、自前のカーネルを読み込むだけなのだが、grub.cfgの書き方がいまいち分かっていない・・・
それとも、カーネルの方がまずいのかな?
「error: attempt to seek outside of file」
ってエラーだからカーネルかな・・・
調べないと・・・

2010-04-03

小ネタ

あまりに書いてないので小ネタを小出しに・・・
(半分くらい下ネタかも・・・)

日本にいたときのこと。
(こないだの帰省の時です)
栄スカイルのABCマートに靴を買いにいった。ものすごい勢いで地域が特定されているが気にしない・・・
大抵そういう店はBGMが流れているが、そのとき流れていた曲の一部に「ピーナッツ」って言っていると思われる部分があった。
でも、どう聞いても聞こえ方がNGな聞こえ方・・・
「ッツ」が「ス」に聞こえる・・・

どう考えてもアウトだろうと思った瞬間だった。

気合で探してみた。
くるりの愉快なピーナッツという曲みたい。

3:58秒くらいが個人的にはアウト・・・
いい曲だとは思うのだが、そこが印象に残りすぎる・・・