お前ら*BSDのカーネルをハックしますか?

1見習デーモン
垢版 |
NGNG
これから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より伝統あるはずなのに。
5950
垢版 |
NGNG
26さん、ありがとう!!

objdump --all-headersの出力は、はっきり言って分からなかった
んですが、ヒントは掴めたです。
______________________________
// a.c
extern int __start_my;
extern int __stop_my;
static void test1(void)
{
printf("test1\n");
}
static void test2(void)
{
printf("test2\n");
}
static void (*__p1)(void) __attribute__ ((section ("my"))) = test1;
static void (*__p2)(void) __attribute__ ((section ("my"))) = test2;
int main(void)
{
void (**p)(void);
for (p = &__start_my; p < &__stop_my; p++) {
(**p)();
}
return 0;
}
______________________________
// b.c
static void test3(void)
{
printf("test3\n");
}
static void test4(void)
{
printf("test4\n");
}
static void (*__p3)(void) __attribute__ ((section ("my"))) = test3;
static void (*__p4)(void) __attribute__ ((section ("my"))) = test4;

が動いて一人感動しております。
最初、関数のコード部分もmyセクションに入れてしまって
core吐きまくったです。
NGNG
>58
既存のソゥースについたBSD スタァイルのコピーライトオンを改変しなけれヴぁ
問題にないはずです。
頑張ってくださイね。
61見習いデーモン
垢版 |
NGNG
おひさしぶりです。
己の能力不足ですっかりカーネルの深海に溺れて土左衛門になって
スレに出入りすることもなかったんですが、
まだ地味に続いてたんですね。

26さんが情報提供してくださったりして、スレの雰囲気は良い方向
に向かってますね。
全然ついていけないんですけど、今MINIXいじって基本を勉強してるんで
いつか追いつければなぁと思ってます。

っつーかみなさんどうやってそんなにスキルつけたんですか。
62名無しさん@お腹いっぱい。
垢版 |
NGNG
>>61
oskitで遊ぶ
6326
垢版 |
NGNG
>>58

どんな簡単な物でもいいから、とりあえずドライバ書いて見たら?
今まであるドライバからコピペしたり、/usr/share/examples/にある
スクリプトを使ったテンプレートを元に書けばそんなに難しくないよ。
頭から追っていくってのは正直言うとかなり効率の悪い方法だと思う。
カーネルがprintf(9)で吐くメッセージをたよりにしたりしながら
調べるのが吉。そうすれば例えばSYSINITの実装はとりあえず理解しなくても
先に進むことが出来るし。
NGNG
なんか面白そうだな。
*BSD 入れたくなってきた。
65名無しさん@お腹いっぱい。
垢版 |
NGNG
Solarisのカーネルハックもここでいいの?
66名無しさん@お腹いっぱい。
垢版 |
NGNG
Solarisの kernel source見ると、変な copyrightに汚染されませんか?
# 会社の決算期にあたって、bladeが来ない...

67age
垢版 |
NGNG
age
NGNG
>>63
日本人がBSDにドライバ書くのは見飽きたにょ
VFSとかに挑んでみてくれ

NGNG
Uniform Driver Interfaceどうよ?
NGNG
えと、えと。そうしてほしいの?おにいちゃん。ってのはともかく。
要はいじりたいコンポネントからせめて行くのが得策なわけで。
頭から見ても良い事はあんまり無いと言うのが本質ですな。
他機種移植だったらそれが一番大事だけど。
(もっとも、例にだしたのがドライバなのは私がその見飽きた事を
しているからでして。)次はportalfs元にいじるかな。小さくて簡単そうだし。
kernfsあたりも簡単そうだったけど。FreeBSDからは消えたし。

UDIですかぁ。うーん。努力は認めるけど....
7168
垢版 |
NGNG
>>70
個々のファイルシステムじゃなくてVFS。
VMいじれとまでは言わないっす。ドライバ書きは多いけど、そっから
昇格するやつがいないと思ったみょ。
わしも、しょうもないドライバを昔書いたけど、それいらいカーネルは
いじってないでし。(もはや一介の犬厨です)
72名無しさん
垢版 |
NGNG
ソラリスのカーネルスレッドがマッチするよう
Sparcは設計されているのですか?
73名無しさん@お腹いっぱい。
垢版 |
NGNG
あげ
NGNG
ドライバ書きより VFS いじる方が格が上だとでも?
ただのレイヤ違いじゃん。
NGNG
>>74
本当にそう思う?
みなさまもそう思う?
NGNG
禿同 >>74
7774
垢版 |
NGNG
>>75
心からそう思っております。
78名無しさん@お腹いっぱい。
垢版 |
NGNG
age
79仕様書無しさん
垢版 |
NGNG
これも
80名無しさん@お腹いっぱい。
垢版 |
NGNG
つづきプリーズ揚げ
81名無しさん
垢版 |
NGNG

BSDに誰か じゃーなりんぐできるFS実装してくれたまへ。
あと、圧縮できるFSもキボンヌ
NGNG
http://jfs4bsd.sourceforge.net/
NGNG
>>82
ライセンスどうするんだろ? JFSもGPLだったよね?
NGNG
>>83
コードの再利用をせずにスクラッチで書けば良いんではないかい?
8583
垢版 |
NGNG
うーんやっぱそうなるよねぇ。先が長そうだ...
とりあえず応援age
NGNG
JFS ってわざわざスクラッチから作るほどイイの?
NGNG
とりあえずジャーナリングするファイルシステムがひとつは欲しい
NGNG
JFS for Linux を移植するよりスクラッチから書いた方が早い
NGNG
>>88
その情熱をLFSに注いでクレ
NGNG
LFSとかsoftupdateみたいなディスクへのリクエストの順序で整合性を保つ方式は
そろそろダメというのが世間のコンセンサスな気がする
NGNG
ジャーナリングって
ディスクへのリクエストの順番と
実際書き込まれる順番が
デタラメになっても問題ないの?
NGNG
>>91
そんなことはないが、ディスクキャッシュのフラッシュなどの
同期命令の発行がかなり少なくてすむ
少なくともメタデータ一個書くごとにフラッシュする必要は無い
NGNG
書き込み順序保証ってSCSIやATAのtagged queuingじゃダメなの?
NGNG
>>93
その手の機能をすべてのメタデータの書き込みに対して使うと遅いよ
NGNG
>>90
LFS はセグメント毎にフラッシュすれば十分なんでないの?
ダメ?
NGNG
>>95
そうですな。すまんかった
97名無しさん@お腹いっぱい。
垢版 |
NGNG
age てみよう。
98名無しさん@お腹いっぱい。
垢版 |
NGNG
勉強のため、FreeBSD 4.5-RELEASE 上で俺ファイルシステムを
作りたいと思っています。とりあえず、procfs のように、カーネルの
覗き穴的な fs がいいかなと。

が、サパーリわかりません。というわけで、fs のスケルトンが欲しい
のですが、よいスケルトンはどれでしょうか。

ファイルサイズ的に miscfs/deadfs/ かなぁと思うのですが、deadfs は
どういう目的の fs なのかがわかりません。ぜひアドバイスをお願いします。
9998
垢版 |
NGNG
deadfs は mount 方法もわからないし (そもそも mount できるのか
どうかもわからん) kernfs の方がいいかな…。
NGNG
procfs を換骨奪胎すればいいのでは?
101名無しさん@お腹いっぱい。
垢版 |
NGNG
やっぱnullfsが基本では。

procfsはpseudofsレイヤができたから応用ききづらいかも。
102100
垢版 |
NGNG
nullfs は読むのに layerfs と行ったり来たりしなきゃ
いけないので面倒かもと思ったので。(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!
10498
垢版 |
NGNG
UNIX 使い始めて はや7年。やっとカーネルの世界にちょっとだけ足を踏み入れる
ことができたかな…。漏れみたいなヘタレには一生無理かとおもてたよ。感激。

というわけで、とりあえずの目標は
 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を
しているんですが不要な部分を除いてコンパイルの時間を
短くできないでしょうか?そんな都合のいい話は
ないかもしれませんがよろしくお願いします。
106あぼーん
垢版 |
NGNG
あぼーん
107名無しさん@お腹いっぱい。
垢版 |
NGNG
>>105
パソコンかえればはやくなるんじゃないかな。
PentiumIII1G以上だったら1分ぐらいで終わるし。

NGNG
>>105
本来スレ違いなんだけど…

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と名前空間がぶつかりそう。
110名無しさん@お腹いっぱい。
垢版 |
NGNG
うーん。
NetBSDからスタッカブルファイルシステム系全部持ってきたほうが
面白いかなぁ。
NGNG
>>109
ORBit カーネルで動かすとなんかいいことあるの?

> you can write Linux device drivers in Perl
とか言われてもなあ(w
112学生
垢版 |
NGNG
カーネル書けるとスゴいって書き込みよく見かけますが
学生で書けたらすごいですか?
ウチの教授は書けますかね?
NGNG
>>112
そんな書き込みどこで見かけた?

2ちゃんねるぢゃあないよな?
NGNG
>>113
ここと思われ:

Free Unix での経験は職歴に入らないか? (428)
http://pc.2ch.net/test/read.cgi/unix/995637081/12
115学生
垢版 |
NGNG
ビンゴです。
あと、以前他のスレでも見ました。

で、どうなんですか。
カーネルは上級のプロじゃないと書けないんですか?
お前ら真面目にレス下さい。
NGNG
>>115
べつにプロである必要はこれっぽっちもないわけだが
117学生
垢版 |
NGNG
>>116
どのくらい難しいのでしょうか
3年間くらい勉強すれば学生でもかけますか
NGNG
>>117
やってみりゃ自分でわかるだろ?
つべこべ言ってないでさっさとカーネルをハク汁
NGNG
>>117
自分の頭の中のフローチャートを実際にプログラムに
起こせる人間であれば、多分1年くらいで出来ると思う。

漏れは3年くらいかかったけど(鬱
NGNG
>>117
学生かどーかは関係ないし。
1ヶ月くらいやってみて無理そうなら当分無理。
121117
垢版 |
NGNG
レスありがとうございます。
ここで言う「書ける」というのは、白紙からの状態から自分で書けるという意味ですよね?
既存のプログラムを改造するとか、書籍を見て書くとか、そういう意味ではないですよね?
NGNG
>>115
むしろカーネルをスクラッチから書くなんてこと
学生にしかできないから、今のうちに頑張れ。
「上級のプロ」にそんな暇なんてありません。
123名無しさん@お腹いっぱい。
垢版 |
NGNG
>>122
UNIX使いになるためには、やっといて損はないですか?
NGNG
>>123
人によって"損"の感じ方が異なります
私の損とあなたの損は違います
NGNG
>>124
うーん
将来ネットワーク関係のソフトウェアを開発したいのですけども。
そーゆー人にとっては有益でしょうか?
126T大理系
垢版 |
NGNG
みんな理系?
凄いです
尊敬します
NGNG
>>125
そういう具体的な目標があるのなら、カーネルに拘らずに最初から
ネット周りのプログラムをハクした方がいいと思われ。

カーネル書ける奴はスゴイが、カーネル書ける奴だけがスゴイわけじゃない。
NGNG
俺的にはドライバをバリバリ書き捲くってるような人が
プログラマとして尊敬に値すると思ってる。
カーネルはどっちかって言うと設計するものって感じだしねぇ。
NGNG
>>128
実務家っぽい御意見…
NGNG
人に訊いてからじゃないと始められない奴は結局何もできない。
hackなんてのは気づいたらやっているか、やらないと夜が明けないかのどちらかだ。
NGNG
>>125
ネットゲーのサーバとかのように、非同期に発生する大量の要求を
うまく捌かなければならないプログラムを書くのは、
カーネルを書くのと似たようなセンスが必要な気がする。
# RDBMSとかもそうだな。

こういうシステムをうまく設計できる奴は
非常に使えるね。
NGNG
>>130 がいいこと言った。
133学生
垢版 |
NGNG
みなさんどうもありがとう
ところでみなさん理系ですか?
もしくはコンピュータで飯を食っている人達ですか?
NGNG
>>133
理系かそうでないかなんてどうでもいいことだ。
とりあえずやってみろ

>>130
どっかで聞いた気がするが、イイね
NGNG
>>133
俺も学生。経営情報学科というとこにいる。
理系だか文系だかわからん。
NGNG
あーあ
カーネルいじって遊んでたら
もー朝だよ...
寝よーっと。
NGNG
カーネル・ハッカースおじさんのAAキボンヌ
NGNG
hack より fuck だと最近痛感 おっかけさぼりすぎで make world 不能状態
13926=52=.....
垢版 |
NGNG
某誌のネタにしますた。
140名無しさん@お腹いっぱい。
垢版 |
NGNG
保守age
NGNG
見習いデーモンは死んだのか?
142名無しさん@お腹いっぱい。
垢版 |
NGNG


たか、いらっしゃい
        ま
        せ
        ん
        か
        ?
NGNG
誰かハックしてる人いますかー。


BSDのkernel読み始めるとしたら、手をつけるところは
どこがおすすめですかねぇ
NGNG
>>143
過去ログ
NGNG
>>143
current の SMPng
146名無しさん@お腹いっぱい。
垢版 |
NGNG
>>143
まぁ、過去ログにもいろいろあるけど、手足から見て行くのがいいと思うね。
デバイスドライバ、ファイルフォーマット毎のプロセス実行サブシステム(imgact_*)、
簡単なファイルシステム、低水準の初期化部あたりは割とコンパクトに
まとまってて読みやすいんじゃないの?

>>145

ほぅ。じゃぁ、具体的に何処のファイルがSMPngに関係してるのか言ってみ。
PERFORCEのリポジトリは見てるんだろうね。
NGNG
>>146 の後半
ネタにマジレスカコワルイ
NGNG
>>146
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
に取り方が書いてある。
150名無しさん@お腹いっぱい。
垢版 |
NGNG
FreeBSDのブートについて質問させてください。

sys/boot/common/load_elf.c を読んでるんですが、
/kernelのエントリアドレス(当方では0xc012b130)に0xff000000をマスクして
符号反転してオフセット(off)を0x40000000にしている意味がわからないです。
コメントの「i386 relocates after locore」っていうのも呪文ですし…

で、結局/kernelのプログラムヘッダの仮想アドレス(当方では0xc0100000)と
さっきのoffを加算して桁あふれさせて0x100000にして、
最終的にはこのアドレスに/kernelをロードしてるようなんですが、
なんかえらくまわりくどくないですか?私の読みが浅いだけでしょうか。
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
NGNG
良サイト宣伝中〜〜。

http://www.interone.jp/~game-k/

注)私はサイト関係者とは無関係ですよ。
NGNG
>>152
BSD カーネルのハックに関する良サイトかと思って見に行っちゃったよ :-)
NGNG
アドレスの最後の方のgameがgmakeに見えて、見に行っちゃったよ。。
155名無しさん@お腹いっぱい。
垢版 |
NGNG
>>151
その通り。なぜ、&= ~(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へマップするのはあってるんですよね?
NGNG
>>156
> off = - (off & 0xff000000u); /* i386 relocates after locore */

スマソ。コードを読み違えました。
off -= (off & 0xff000000u);
だったら最上位バイトのクリアですね。
158150
垢版 |
NGNG
>>157
まぁ「保証はしない」っておっしゃってましたしね =)

さてすっきりしたところでつぎはbtx.sでものぞいてみますか…
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況