これからsys/kern/init_main.c読んでみます。
【参考】
・「The Design and Implementation of the 4.4BSD Operating System」
の第2章
http://www.freebsd.org/doc/en_US.ISO8859-1/books/design-44bsd/index.html
・*BSDでのアセンブリ
http://www.int80h.org/bsdasm/
なんか検索してみてもあんまりハックサイトひっかからないね。
Linuxより伝統あるはずなのに。
探検
お前ら*BSDのカーネルをハックしますか?
1見習デーモン
NGNG102100
NGNG nullfs は読むのに layerfs と行ったり来たりしなきゃ
いけないので面倒かもと思ったので。(NetBSD)
よく見たら >98 はFreeBSDか。
てゆーか msdosfs あたりでも見たほうがむしろ分りやすいかもとか
思ったり。
いけないので面倒かもと思ったので。(NetBSD)
よく見たら >98 はFreeBSDか。
てゆーか msdosfs あたりでも見たほうがむしろ分りやすいかもとか
思ったり。
10398
NGNG なんだこれ、ちょーかんたんじゃん! というわけでメモメモ。
/sys/conf/files に追加。
miscfs/orefs/orefs_vfsops.c standard
miscfs/orefs/orefs_vnops.c standard
/sys/sys/vnode.h に VT_OREFS を追加。
enum vtagtype {
...
VT_OREFS, /* 追加 */
};
# mkdir /sys/miscfs/orefs && cp /sys/miscfs/kernfs/* /sys/miscfs/orefs
/sys/miscfs/orefs/* を片っ端から s/kern/ore/
# cd /sys/i386/conf && config GENRIC && cd ../../compile/GENERIC
# make depend && make make install
# ln -s /sbin/mount_kernfs mount_orefs
# reboot
# mkdir /ore
# mount_orefs orefs /ore
# ls -l /ore
-r--r--r-- 1 root wheel 9 Apr 9 20:30 oresama
# cat /ore/oresama
oresama!
/sys/conf/files に追加。
miscfs/orefs/orefs_vfsops.c standard
miscfs/orefs/orefs_vnops.c standard
/sys/sys/vnode.h に VT_OREFS を追加。
enum vtagtype {
...
VT_OREFS, /* 追加 */
};
# mkdir /sys/miscfs/orefs && cp /sys/miscfs/kernfs/* /sys/miscfs/orefs
/sys/miscfs/orefs/* を片っ端から s/kern/ore/
# cd /sys/i386/conf && config GENRIC && cd ../../compile/GENERIC
# make depend && make make install
# ln -s /sbin/mount_kernfs mount_orefs
# reboot
# mkdir /ore
# mount_orefs orefs /ore
# ls -l /ore
-r--r--r-- 1 root wheel 9 Apr 9 20:30 oresama
# cat /ore/oresama
oresama!
10498
NGNG UNIX 使い始めて はや7年。やっとカーネルの世界にちょっとだけ足を踏み入れる
ことができたかな…。漏れみたいなヘタレには一生無理かとおもてたよ。感激。
というわけで、とりあえずの目標は
rootvfs/da0s1a -> vnode/1
rootvfs/ad0c -> vnode/2
vnode/1/v_flag
vnode/1/v_count
みたいな (まだわかってないので構成は適当)、各種構造体をマッピングした
ファイルシステムを作ろうと思います。
> やっぱnullfsが基本では。
nullfs の本来の使い方がいまいちわからないので、
一番サイズの小さい kernfs で行くことにしましたっす。
ことができたかな…。漏れみたいなヘタレには一生無理かとおもてたよ。感激。
というわけで、とりあえずの目標は
rootvfs/da0s1a -> vnode/1
rootvfs/ad0c -> vnode/2
vnode/1/v_flag
vnode/1/v_count
みたいな (まだわかってないので構成は適当)、各種構造体をマッピングした
ファイルシステムを作ろうと思います。
> やっぱnullfsが基本では。
nullfs の本来の使い方がいまいちわからないので、
一番サイズの小さい kernfs で行くことにしましたっす。
105名無しさん
NGNG カーネルのコンパイルについて質問です。
FreeBSD4.5でカーネルをいじってmake && make installを
しているんですが不要な部分を除いてコンパイルの時間を
短くできないでしょうか?そんな都合のいい話は
ないかもしれませんがよろしくお願いします。
FreeBSD4.5でカーネルをいじってmake && make installを
しているんですが不要な部分を除いてコンパイルの時間を
短くできないでしょうか?そんな都合のいい話は
ないかもしれませんがよろしくお願いします。
106あぼーん
NGNGあぼーん
107名無しさん@お腹いっぱい。
NGNGNGNG
>>105
本来スレ違いなんだけど…
http://www.jp.freebsd.org/www.FreeBSD.org/ja/handbook/kernelconfig.html
さらに何か疑問があればFreeBSD質問スレにGo
本来スレ違いなんだけど…
http://www.jp.freebsd.org/www.FreeBSD.org/ja/handbook/kernelconfig.html
さらに何か疑問があればFreeBSD質問スレにGo
109名無しさん@お腹いっぱい。
NGNG NULLFSは正直お勧めできない。
あれは、スタッカブルファイルシステムのテンプレ。
そうそう。Linuxネタだけど、これどうよ。(カーネル空間でORBit動かす)
http://korbit.sourceforge.net/
これ一瞬移植しようかと思ったけど、geom入ったせいで
glibと名前空間がぶつかりそう。
あれは、スタッカブルファイルシステムのテンプレ。
そうそう。Linuxネタだけど、これどうよ。(カーネル空間でORBit動かす)
http://korbit.sourceforge.net/
これ一瞬移植しようかと思ったけど、geom入ったせいで
glibと名前空間がぶつかりそう。
110名無しさん@お腹いっぱい。
NGNG うーん。
NetBSDからスタッカブルファイルシステム系全部持ってきたほうが
面白いかなぁ。
NetBSDからスタッカブルファイルシステム系全部持ってきたほうが
面白いかなぁ。
NGNG
112学生
NGNG カーネル書けるとスゴいって書き込みよく見かけますが
学生で書けたらすごいですか?
ウチの教授は書けますかね?
学生で書けたらすごいですか?
ウチの教授は書けますかね?
NGNG
NGNG
115学生
NGNG ビンゴです。
あと、以前他のスレでも見ました。
で、どうなんですか。
カーネルは上級のプロじゃないと書けないんですか?
お前ら真面目にレス下さい。
あと、以前他のスレでも見ました。
で、どうなんですか。
カーネルは上級のプロじゃないと書けないんですか?
お前ら真面目にレス下さい。
NGNG
>>115
べつにプロである必要はこれっぽっちもないわけだが
べつにプロである必要はこれっぽっちもないわけだが
117学生
NGNGNGNG
NGNG
NGNG
121117
NGNG レスありがとうございます。
ここで言う「書ける」というのは、白紙からの状態から自分で書けるという意味ですよね?
既存のプログラムを改造するとか、書籍を見て書くとか、そういう意味ではないですよね?
ここで言う「書ける」というのは、白紙からの状態から自分で書けるという意味ですよね?
既存のプログラムを改造するとか、書籍を見て書くとか、そういう意味ではないですよね?
NGNG
123名無しさん@お腹いっぱい。
NGNG >>122
UNIX使いになるためには、やっといて損はないですか?
UNIX使いになるためには、やっといて損はないですか?
NGNG
NGNG
126T大理系
NGNG みんな理系?
凄いです
尊敬します
凄いです
尊敬します
NGNG
NGNG
俺的にはドライバをバリバリ書き捲くってるような人が
プログラマとして尊敬に値すると思ってる。
カーネルはどっちかって言うと設計するものって感じだしねぇ。
プログラマとして尊敬に値すると思ってる。
カーネルはどっちかって言うと設計するものって感じだしねぇ。
NGNG
>>128
実務家っぽい御意見…
実務家っぽい御意見…
NGNG
人に訊いてからじゃないと始められない奴は結局何もできない。
hackなんてのは気づいたらやっているか、やらないと夜が明けないかのどちらかだ。
hackなんてのは気づいたらやっているか、やらないと夜が明けないかのどちらかだ。
NGNG
>>125
ネットゲーのサーバとかのように、非同期に発生する大量の要求を
うまく捌かなければならないプログラムを書くのは、
カーネルを書くのと似たようなセンスが必要な気がする。
# RDBMSとかもそうだな。
こういうシステムをうまく設計できる奴は
非常に使えるね。
ネットゲーのサーバとかのように、非同期に発生する大量の要求を
うまく捌かなければならないプログラムを書くのは、
カーネルを書くのと似たようなセンスが必要な気がする。
# RDBMSとかもそうだな。
こういうシステムをうまく設計できる奴は
非常に使えるね。
NGNG
>>130 がいいこと言った。
133学生
NGNG みなさんどうもありがとう
ところでみなさん理系ですか?
もしくはコンピュータで飯を食っている人達ですか?
ところでみなさん理系ですか?
もしくはコンピュータで飯を食っている人達ですか?
NGNG
NGNG
NGNG
あーあ
カーネルいじって遊んでたら
もー朝だよ...
寝よーっと。
カーネルいじって遊んでたら
もー朝だよ...
寝よーっと。
NGNG
カーネル・ハッカースおじさんのAAキボンヌ
NGNG
hack より fuck だと最近痛感 おっかけさぼりすぎで make world 不能状態
13926=52=.....
NGNG 某誌のネタにしますた。
140名無しさん@お腹いっぱい。
NGNG 保守age
NGNG
見習いデーモンは死んだのか?
142名無しさん@お腹いっぱい。
NGNG ど
な
たか、いらっしゃい
ま
せ
ん
か
?
な
たか、いらっしゃい
ま
せ
ん
か
?
NGNG
誰かハックしてる人いますかー。
BSDのkernel読み始めるとしたら、手をつけるところは
どこがおすすめですかねぇ
BSDのkernel読み始めるとしたら、手をつけるところは
どこがおすすめですかねぇ
NGNG
>>143
過去ログ
過去ログ
NGNG
>>143
current の SMPng
current の SMPng
146名無しさん@お腹いっぱい。
NGNGNGNG
NGNG
>>146
FreeBSD以外の*BSDってperforce使っているんですか?
FreeBSDのperforce treeってanonymousでソースを取れるんでしょうか?
できるんなら見てみたいと思っています。
FreeBSD以外の*BSDってperforce使っているんですか?
FreeBSDのperforce treeってanonymousでソースを取れるんでしょうか?
できるんなら見てみたいと思っています。
149名無しさん@お腹いっぱい。
NGNG >>148 他の*BSDでは使ってないです。
でもSMPngっていったらFreeBSDでしょ。
リポジトリのブラウズならここでどうぞ。
http://people.freebsd.org/~peter/p4db/
手元に置きたければ
http://people.freebsd.org/~peter/p4cookbook.txt
に取り方が書いてある。
でもSMPngっていったらFreeBSDでしょ。
リポジトリのブラウズならここでどうぞ。
http://people.freebsd.org/~peter/p4db/
手元に置きたければ
http://people.freebsd.org/~peter/p4cookbook.txt
に取り方が書いてある。
150名無しさん@お腹いっぱい。
NGNG FreeBSDのブートについて質問させてください。
sys/boot/common/load_elf.c を読んでるんですが、
/kernelのエントリアドレス(当方では0xc012b130)に0xff000000をマスクして
符号反転してオフセット(off)を0x40000000にしている意味がわからないです。
コメントの「i386 relocates after locore」っていうのも呪文ですし…
で、結局/kernelのプログラムヘッダの仮想アドレス(当方では0xc0100000)と
さっきのoffを加算して桁あふれさせて0x100000にして、
最終的にはこのアドレスに/kernelをロードしてるようなんですが、
なんかえらくまわりくどくないですか?私の読みが浅いだけでしょうか。
sys/boot/common/load_elf.c を読んでるんですが、
/kernelのエントリアドレス(当方では0xc012b130)に0xff000000をマスクして
符号反転してオフセット(off)を0x40000000にしている意味がわからないです。
コメントの「i386 relocates after locore」っていうのも呪文ですし…
で、結局/kernelのプログラムヘッダの仮想アドレス(当方では0xc0100000)と
さっきのoffを加算して桁あふれさせて0x100000にして、
最終的にはこのアドレスに/kernelをロードしてるようなんですが、
なんかえらくまわりくどくないですか?私の読みが浅いだけでしょうか。
151@夜勤雀棟 ◆YaKINcTg
NGNG >>150
sys/boot/common/load_elf.c
> off = - (off & 0xff000000u); /* i386 relocates after locore */
offの最上位の1バイトをクリアするだけだと。
e.g. 0xc012b130 -> 0x0012b130
>/* i386 relocates after locore */
boot2内で/kernelを16MB以下のリニアアドレス(0x00100000-)へ展開しておき、
locore.sにおいて適切なアドレス(0xc0100000-)へmapするのだと思われます。
(locore.s内でページングをenableにしている)
#ざっと眺めただけなので保証はしませんが :-p
sys/boot/common/load_elf.c
> off = - (off & 0xff000000u); /* i386 relocates after locore */
offの最上位の1バイトをクリアするだけだと。
e.g. 0xc012b130 -> 0x0012b130
>/* i386 relocates after locore */
boot2内で/kernelを16MB以下のリニアアドレス(0x00100000-)へ展開しておき、
locore.sにおいて適切なアドレス(0xc0100000-)へmapするのだと思われます。
(locore.s内でページングをenableにしている)
#ざっと眺めただけなので保証はしませんが :-p
NGNG
NGNG
NGNG
アドレスの最後の方のgameがgmakeに見えて、見に行っちゃったよ。。
155名無しさん@お腹いっぱい。
NGNG >>151
その通り。なぜ、&= ~(0xff000000)じゃないのかよう分からんけど。
で、じゃあ何故ELFヘッダの開始番地が0x100XXXなんかじゃ無くて
0xc01000XXになってるかっていうと、paging開始後はカーネル仮想メモリ
アドレスは全て0xc0000000以降になっていて、 カーネルで使用している
メモリアドレスは全てそこにマップされるから。(リンカとELFフォーマット
の機能を使えばそういう状況にも実は対応できたりするような気もするけど)
特にkernelとISAメモリ空間は(物理アドレス+0xc0000000)の位置にマップされます。
locore.sでページングを開始するまでに絶対アドレッシングが必要な
時は
#define R(foo) ((foo)-KERNBASE)
定義されるマクロを使ってアクセスしてます。
その通り。なぜ、&= ~(0xff000000)じゃないのかよう分からんけど。
で、じゃあ何故ELFヘッダの開始番地が0x100XXXなんかじゃ無くて
0xc01000XXになってるかっていうと、paging開始後はカーネル仮想メモリ
アドレスは全て0xc0000000以降になっていて、 カーネルで使用している
メモリアドレスは全てそこにマップされるから。(リンカとELFフォーマット
の機能を使えばそういう状況にも実は対応できたりするような気もするけど)
特にkernelとISAメモリ空間は(物理アドレス+0xc0000000)の位置にマップされます。
locore.sでページングを開始するまでに絶対アドレッシングが必要な
時は
#define R(foo) ((foo)-KERNBASE)
定義されるマクロを使ってアクセスしてます。
156150
NGNG >>151, >>155
お二人のレスを見ると自分がはずしまくってるのかニアミスなのか
すげぇ悩みます。
load_elf.cに↓のようにコード追加して
--
228行目あたり
if (kernel) {
printf("before [%p]\n", (void *)off); ←これを追加
#ifdef __i386__
off = - (off & 0xff000000u); /* i386 relocates after locore */
printf("after [%p]\n", (void *)off); ←これを追加
--
# make
# make install
として祭起動すると
before [0xc012b130]
after [0x40000000]
となるんで、あぁそうかと思ってたんですけど、お二人は
最上位の1バイトをクリアしてるとおっしゃてますし。
でも/kernelを0x100000へマップするのはあってるんですよね?
お二人のレスを見ると自分がはずしまくってるのかニアミスなのか
すげぇ悩みます。
load_elf.cに↓のようにコード追加して
--
228行目あたり
if (kernel) {
printf("before [%p]\n", (void *)off); ←これを追加
#ifdef __i386__
off = - (off & 0xff000000u); /* i386 relocates after locore */
printf("after [%p]\n", (void *)off); ←これを追加
--
# make
# make install
として祭起動すると
before [0xc012b130]
after [0x40000000]
となるんで、あぁそうかと思ってたんですけど、お二人は
最上位の1バイトをクリアしてるとおっしゃてますし。
でも/kernelを0x100000へマップするのはあってるんですよね?
157@夜勤雀棟 ◆YaKINcTg
NGNG >>156
> off = - (off & 0xff000000u); /* i386 relocates after locore */
スマソ。コードを読み違えました。
off -= (off & 0xff000000u);
だったら最上位バイトのクリアですね。
> off = - (off & 0xff000000u); /* i386 relocates after locore */
スマソ。コードを読み違えました。
off -= (off & 0xff000000u);
だったら最上位バイトのクリアですね。
159名無しさん@お腹いっぱい。
NGNG せっかくだから俺は、ed0からtcpパケットがユーザランドまで行くまでを追って見るぜ
edintr-> ed_rint(dev/ed/if_ed.c)-> ether_input
->ether_demux(net/if_ethersubr.c)->(queueへ)
(queueからnetisrで)->ipintr->ip_input(netinet/ip_input.c)->
tcp_input->(順序を組み立てる為のqueueへ?)
ぐらいまで読めましたが、そっからどうなってるのかわかりますか?
edintr-> ed_rint(dev/ed/if_ed.c)-> ether_input
->ether_demux(net/if_ethersubr.c)->(queueへ)
(queueからnetisrで)->ipintr->ip_input(netinet/ip_input.c)->
tcp_input->(順序を組み立てる為のqueueへ?)
ぐらいまで読めましたが、そっからどうなってるのかわかりますか?
NGNG
上から来るぞ! 気をつけろ!
TCP は置いといてとりあえず UDP 追ってみては?
TCP は置いといてとりあえず UDP 追ってみては?
161名無しさん@お腹いっぱい。
NGNG おい、>>160,見習いデーモン,生きてるか?
udpの場合ip_inputの後
udp_input@udp_usrreqで配送先のプロセスを探して、sowakeupで起こす
そうすると、sbwait()で待ってた
soreceive()(uipc_socket.c)->recvit()でcopyoutされ、
recvitからはrecvfromに戻ってシステムコール完了と言った感じですか。
udpの場合ip_inputの後
udp_input@udp_usrreqで配送先のプロセスを探して、sowakeupで起こす
そうすると、sbwait()で待ってた
soreceive()(uipc_socket.c)->recvit()でcopyoutされ、
recvitからはrecvfromに戻ってシステムコール完了と言った感じですか。
162名無しさん@お腹いっぱい。
NGNG ここなかなか良さそう。ただしSimplified Chinese。
http://opensource.zjonline.com.cn/
http://opensource.zjonline.com.cn/
163150
NGNG おはようございます。
PICの解説で参考になるページ見つけたんで貼っておきます。
http://www.asahi-net.or.jp/~WR7S-NKMR/BeOS/Documents/IRQ.html
http://www.cqpub.co.jp/column/books/2001a/34331PC_Legacy/default.htm
で、また質問させてください。
sys/boot/i386/btx/btx/btx.s を読んでるんですが、
220行目あたりの「Launch user task」からがサッパリわかりません。
TSSの働きとタスク切替えがよく理解できてないからだと思うんですが、
248行目のiret命令で何が起こるのかわかりません。
(コメントには「To user mode」って書いてあるんですが…)
iretでタスクを切替える場合はフラグレジスタにNTビットがセットされて
なければならない、とインテルのマニュアルにも「はじめて読む486」にも
書いてあるんですが、248行目に到達するまでにNTビットがセットされたような
様子もないんですが…
何かヒントだけでもお願いします。
PICの解説で参考になるページ見つけたんで貼っておきます。
http://www.asahi-net.or.jp/~WR7S-NKMR/BeOS/Documents/IRQ.html
http://www.cqpub.co.jp/column/books/2001a/34331PC_Legacy/default.htm
で、また質問させてください。
sys/boot/i386/btx/btx/btx.s を読んでるんですが、
220行目あたりの「Launch user task」からがサッパリわかりません。
TSSの働きとタスク切替えがよく理解できてないからだと思うんですが、
248行目のiret命令で何が起こるのかわかりません。
(コメントには「To user mode」って書いてあるんですが…)
iretでタスクを切替える場合はフラグレジスタにNTビットがセットされて
なければならない、とインテルのマニュアルにも「はじめて読む486」にも
書いてあるんですが、248行目に到達するまでにNTビットがセットされたような
様子もないんですが…
何かヒントだけでもお願いします。
164名無しさん@お腹いっぱい。
NGNG 基本的にはbtxではタスク切替え使ってない筈。(そんな豪勢なことする
ほどのサイズも無いし)単純に、EFLAGSもPOPすることで、
特権を切替えてbtx_hdrにあるモニタルーチンのエントリーへ
飛んでるだけのことと思う。
ほどのサイズも無いし)単純に、EFLAGSもPOPすることで、
特権を切替えてbtx_hdrにあるモニタルーチンのエントリーへ
飛んでるだけのことと思う。
166150=163
NGNG レスどうもです。
はやとちりしてました。iretはタスク切替えだけで使うものではなかったんですね。
インテルのマニュアルの命令リファレンスで確認しました。
でも、pushしておいたEIP(btx_hdr+0xc)がiretで特権を切替えたあと
実行される番地みたいですけど、btx_hdr+0xcって
btx_hdr: .byte 0xeb # Machine ID
.byte 0xe # Header size
.ascii "BTX" # Magic
.byte 0x1 # Major version
.byte 0x1 # Minor version
.byte BTX_FLAGS # Flags
.word PAG_CNT-MEM_ORG>>0xc # Paging control
.word break-start # Text size
.long 0x0 # Entry address ←ここですか?
特権を切替えて、また同じコードを辿ってくってこと???
はやとちりしてました。iretはタスク切替えだけで使うものではなかったんですね。
インテルのマニュアルの命令リファレンスで確認しました。
でも、pushしておいたEIP(btx_hdr+0xc)がiretで特権を切替えたあと
実行される番地みたいですけど、btx_hdr+0xcって
btx_hdr: .byte 0xeb # Machine ID
.byte 0xe # Header size
.ascii "BTX" # Magic
.byte 0x1 # Major version
.byte 0x1 # Minor version
.byte BTX_FLAGS # Flags
.word PAG_CNT-MEM_ORG>>0xc # Paging control
.word break-start # Text size
.long 0x0 # Entry address ←ここですか?
特権を切替えて、また同じコードを辿ってくってこと???
167@夜勤雀棟 ◆YaKINcTg
NGNG >>166
>でも、pushしておいたEIP(btx_hdr+0xc)がiretで特権を切替えたあと
>実行される番地みたいですけど
>pushl btx_hdr+0xc# Set EIP
これは間接参照でbtx_hdr+0xc番地の内容(long)をpushするという意味です。
# operandに'$'が付いていないことに留意。
>でも、pushしておいたEIP(btx_hdr+0xc)がiretで特権を切替えたあと
>実行される番地みたいですけど
>pushl btx_hdr+0xc# Set EIP
これは間接参照でbtx_hdr+0xc番地の内容(long)をpushするという意味です。
# operandに'$'が付いていないことに留意。
168150
NGNG >>これは間接参照でbtx_hdr+0xc番地の内容(long)をpushするという意味です。
にしても、特権切替えたあとはどのコードが走るのか全然わからないです。
EIPが0x0なんですよね?0x0番地のコードって…?
にしても、特権切替えたあとはどのコードが走るのか全然わからないです。
EIPが0x0なんですよね?0x0番地のコードって…?
NGNG
実際のバイナリをhexdumpしないとダメっすよ。ローダがいじるに決まってるでしょ。
/boot/boot2より
00000200 eb 0e 42 54 58 01 01 80 f6 0f 80 07 00 10 00 00 |..BTX...........|
<eb> btx_hdr: . byte 0xeb
<0e> . byte 0xe
<42 54 58 > . ascii "BTX"
<01> .byte 0x1
<01> . byte 0x1
<80> .byte BTX_FLAGS
<f6 0f> .word PAG_CNT-MEM_ORG>>0xc
<80 07> .word break-start
<00 10 00 00> .long 0x00001000
簡単にするならコメントを信じて次のbtxクライアント(boot2又は/boot/loader本体)
へ進めってことです。ちなみに/boot/loaderは更にbtxldrが走ったりするっす。
/boot/boot2より
00000200 eb 0e 42 54 58 01 01 80 f6 0f 80 07 00 10 00 00 |..BTX...........|
<eb> btx_hdr: . byte 0xeb
<0e> . byte 0xe
<42 54 58 > . ascii "BTX"
<01> .byte 0x1
<01> . byte 0x1
<80> .byte BTX_FLAGS
<f6 0f> .word PAG_CNT-MEM_ORG>>0xc
<80 07> .word break-start
<00 10 00 00> .long 0x00001000
簡単にするならコメントを信じて次のbtxクライアント(boot2又は/boot/loader本体)
へ進めってことです。ちなみに/boot/loaderは更にbtxldrが走ったりするっす。
170名無しさん@お腹いっぱい。
NGNG >>実際のバイナリをhexdumpしないとダメっすよ。ローダがいじるに決まってるでしょ。
おぉ、盲点でした。
こういうのはMakefileを丁寧に追っていけばわかることですか?
今ちらっとsys/boot/i386/boot2/Makefileを見たら
ORG2に代入された0x1000がbtxldコマンドのオプションとかに使われてて
「ほうほう」と思ってたんですけど。
ソースにとらわれすぎて本質を見失ってました。
でも>>169さんのおかげでまた少し前進できそうです。ありがとうございました。
おぉ、盲点でした。
こういうのはMakefileを丁寧に追っていけばわかることですか?
今ちらっとsys/boot/i386/boot2/Makefileを見たら
ORG2に代入された0x1000がbtxldコマンドのオプションとかに使われてて
「ほうほう」と思ってたんですけど。
ソースにとらわれすぎて本質を見失ってました。
でも>>169さんのおかげでまた少し前進できそうです。ありがとうございました。
171150=170
NGNG sage忘れ欝だ死のう…
172名無しさん@お腹いっぱい。
NGNG sageなくても良いんじゃない?
まぁ、強いていえば「特殊なローダを必要とする」「0x0なんて番地に飛ぼうとする」
という2点から勘を働かせた結果かな。
まぁ、強いていえば「特殊なローダを必要とする」「0x0なんて番地に飛ぼうとする」
という2点から勘を働かせた結果かな。
173見習デーモンへ
NGNG スレ キトク スグカエレ
〜ハハヨリ〜
〜ハハヨリ〜
NGNG
175名無しさん@お腹いっぱい。
NGNG もし!毒蛇に噛まれたら、
切り口を素早くナイフでえぐり、
急いで口で吸え!
ほら、言ってみろ!!
切り口を素早くナイフでえぐり、
急いで口で吸え!
ほら、言ってみろ!!
NGNG
虫歯がある時にそれやったら死んでしまう罠。
177名無しさん@お腹いっぱい。
NGNG ごめんなさい
クックロビンを殺したのは私です。。。。
クックロビンを殺したのは私です。。。。
178名無しさん@お腹いっぱい。
NGNG boot0.sコードので分らない部分があるのですが、
61 movw $LOAD,%sp # stack
66 movw %sp,%si # Source
67 movw $start,%di # Destination
68 movw $0x100,%cx # Word count
69 rep # Relocate
70 movsw # code
この部分は、MBRを再配置するコードだと考えているのですが、
アドレスLOAD(0x7c00)からの512バイトの領域を、現在実行して
いるstartで表されるアドレスからの512バイトの領域にコピーする
という意味なのでしょうか?
61 movw $LOAD,%sp # stack
66 movw %sp,%si # Source
67 movw $start,%di # Destination
68 movw $0x100,%cx # Word count
69 rep # Relocate
70 movsw # code
この部分は、MBRを再配置するコードだと考えているのですが、
アドレスLOAD(0x7c00)からの512バイトの領域を、現在実行して
いるstartで表されるアドレスからの512バイトの領域にコピーする
という意味なのでしょうか?
NGNG
>>178
MBRが読み込み・実行される際のセレクタの値
引用してるコードの上の方で設定してるセレクタの値
セレクタとオフセットから得られる実効アドレス
について調べましょう。
# 個人的には、今さらIA32の16bitモードについて勉強しても
# 得る物はあまり多くない気がする。
MBRが読み込み・実行される際のセレクタの値
引用してるコードの上の方で設定してるセレクタの値
セレクタとオフセットから得られる実効アドレス
について調べましょう。
# 個人的には、今さらIA32の16bitモードについて勉強しても
# 得る物はあまり多くない気がする。
180見習いデーモン
NGNG むしょうにデバイスドライバを書いてみたくなって、
http://www.jp.freebsd.org/www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/x10069.html
↑やってみたらすげー簡単でびっくりしました。
秋月のLCDキットとかをシリアルかなんかでつなげて、
echo "Hello" > /dev/mylcd
とかできるようになりたいんですけど、あとは↓
http://www.daemonnews.org/200010/blueprints.html
とか読んどけばできるようになりますか?
実際のドライバってどんななんだろうと思って/sys/dev/fxp/if_fxp.c
なんかのぞいてみて頭から煙だしたりしてます…
http://www.jp.freebsd.org/www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/x10069.html
↑やってみたらすげー簡単でびっくりしました。
秋月のLCDキットとかをシリアルかなんかでつなげて、
echo "Hello" > /dev/mylcd
とかできるようになりたいんですけど、あとは↓
http://www.daemonnews.org/200010/blueprints.html
とか読んどけばできるようになりますか?
実際のドライバってどんななんだろうと思って/sys/dev/fxp/if_fxp.c
なんかのぞいてみて頭から煙だしたりしてます…
NGNG
おまえの見てるのデバドラのつくり方じゃねぇじゃん。(藁
182見習いデーモン
NGNG うお、もしかして空回りですか…
でもKLDでカーネル領域に自分のコード置けるとおもうとワクワクするんですが
でもKLDでカーネル領域に自分のコード置けるとおもうとワクワクするんですが
NGNG
カーネルを再構築しても自分のコードは置けますが何か?
184名無しさん@お腹いっぱい。
NGNG >>181
ハンドブックで解説されている部分は部分はデバイスドライバ
(ツリーを形成する実デバイスを叩くもの)ではデフォルトで呼ばれる
ものがあるので気にしなくていいです。
おまいさんの目的ではどう見てもfxpを見るのは間違いだと
思いますし、そもそもシリアルならsio使ってtermios
叩いたほうが.......
で、ご希望にそえるものなら例えば、spic(4)あたり簡単そうかな?
ハンドブックで解説されている部分は部分はデバイスドライバ
(ツリーを形成する実デバイスを叩くもの)ではデフォルトで呼ばれる
ものがあるので気にしなくていいです。
おまいさんの目的ではどう見てもfxpを見るのは間違いだと
思いますし、そもそもシリアルならsio使ってtermios
叩いたほうが.......
で、ご希望にそえるものなら例えば、spic(4)あたり簡単そうかな?
NGNG
spic は デバイスの仕様が不明なので、
読んでもあまりピンとこないのでは。
読んでもあまりピンとこないのでは。
186鬼軍曹
NGNG ============ お知らせ ==================
あー、只今よりこのスレは、見習デーモンの学習を見張るスレになりました。
====================================
あー、只今よりこのスレは、見習デーモンの学習を見張るスレになりました。
====================================
187名無しさん@お腹いっぱい。
NGNG 保守
188名無しさん@お腹いっぱい。
NGNG NETBSD入れたらまずカーネルハックするぞぉ!
NGNG
おまえのいうハックってカーネルの再構築のことだろ?ぷ
NGNG
千里の道も一歩から
NGNG
千里の道を一歩だけ
NGNG
千里を歩き通すのは大変だよ……。
NGNG
千里ちゃんって誰?
NGNG
NGNG
>>196
それはちとローカルではないかと。
それはちとローカルではないかと。
NGNG
なかおくんだろ?
199山崎渉
NGNG (^^)
200山崎渉
NGNG (^^)
NGNG
レスを投稿する
ニュース
- 日本と中国を結ぶ12航空路線で全便欠航 中国人に最も人気の海外旅行先は日本から韓国に [ぐれ★]
- 【速報】トランプ大統領、中国の習近平国家主席を「国賓」として招待することに ★2 [ニョキニョキ★]
- 米中電話会談、トランプ氏は「米国側は中国にとっての台湾問題の重要性を理解する」 [1ゲットロボ★]
- 【国際】トランプ氏、来年4月に中国を訪問する招待を受け入れる 習氏も国賓で訪米へ 電話会談 [ぐれ★]
- 【音楽】「なんでこんなバカが国のトップなの?」 若者に人気のバンド「GEZAN」のマヒトゥ・ザ・ピーポーが高市総理に苦言 [シャチ★]
- 【東京・足立の車暴走】赤信号無視か 危険運転致死傷疑いも視野に捜査 逮捕された職業不詳の男性(37)は精神疾患で通院歴も ★3 [ぐれ★]
- スマホのやつこの動画見てくれ [577451214]
- 【高市悲報】来年、習近平主席がアメリカに「国賓」として訪米。どうするんだよ高市・・・アメリカも敵に回すのか? [483862913]
- フィフィ「外国人だろうが日本人だろうが反日は要らんのよ、この国に…自分にとって住みやすい国に行け。」 [856698234]
- うええええええん仕事いぎだくないよぉ
- 【高市悲報】トランプおやびん「偉大な指導者である習近平首席、米国は中国にとっての台湾問題の重要性を理解しています」 [115996789]
- 【速報】足立ひき逃げ犯、精神病持ちだった [329271814]
