お前ら*BSDのカーネルをハックしますか? (356) TOP カテ一覧 スレ一覧 2ch元 削除依頼
1がUNIXユーザーに全力で質問するスレ (124)
■Solaris9 ってどうよ?■ (249)
NetBSDをデスクトップ環境として常用するスレ (315)
エスパーが次の人にアドバイスするスレ (355)
タイピング速い奴らの数→ (217)
構造化テキスト (114)

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


1 :01/10/17 〜 最終レス :2013/09/22
これから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より伝統あるはずなのに。

2 :
2

3 :
> これからsys/kern/init_main.c読んでみます。
つーか、sys/arch/${MACHINE}/${MACHINE}/locore.s の start か、
せめて sys/arch/${MACHINE}/${MACHINE}/machdep.c の initなんとか() の
方を先に読んだほうがいいぞ。init_main.c の main() は、locore.s から
呼ばれてるわけだが、locore の初期化処理と initなんとか() の方が
main() より先に走って、機種依存の低レベルの初期化を行うので。
上のパス名は NetBSD の場合だけど、FreeBSD や OpenBSD でも、
だいたい似たような場所でしょ。

4 :
>>3
アセンブラはちょっとしんどいかな、と思って。(もちろん理解する努力はしますが)
とりあえずカーネルの動きの概要がしりたいんで、init_main.cからかな?と思って読んでます。
#GLOBALでタグ作るのに意外と時間かかった・・・

5 :
>>1
そんな根性があるんだったら、フリーのエロゲー作ってよ。
OpenGLバリバリ使って動くやつをお願い。

6 :
>>5
http://piza2.2ch.net/test/read.cgi/tech/996199538/l50

7 :
VM_*の定義追いかけてたらCPU寄りなところまできてしまった・・・
結局>>3さんが言う通り機種依存なところも目を通してみたり。

8 :
デバドラ書きたい君です
手っ取り早く書けるようになるには何を読むべきですか?
sys 以下、書籍、URL 問わず。
ターゲットは NetBSD/i386

9 :
> 手っ取り早く書けるようになるには何を読むべきですか?
似たような種類のデバイスドライバのソース。
で、ハードウェア仕様的に違う部分だけ書き換える。
できるだけ移植物じゃなくて、NetBSD で書き下ろされたデバイス、
それもバス依存部と、バス独立部がちゃんと分離されている奴を
参考にすると良い。
ただし、既にサポートされているデバイスの中に、仕様的に似たチップがある
かどうか (同じチップメーカからの新版とか、メーカは違うけど、互換品があ
るとか) を、まず最初に調べるべき。そもそもデバイスドライバを書かなくて
済むとか、既存のドライバに処理を付け加えるだけで済むことも多いので。
あと、悪魔本は全く読まくてもなんとかなる気もするけど、Bach 本 ("UNIX
カーネルの設計"、Maurice J.Bach、共立出版) くらいは常識として、ざっと
流し読みしておいた方がいいと思われ。もはや実装は全然違うので、細かい部
分は全く違うんだけど、それなりに役にたつぞ。
あとは、section 9 の man page と、一般的な基礎知識と、気合いがあれば
なんとかなるだろう。

10 :
>>8
鶏と卵になるけど、とりあえず書いちゃえば、書けますよ。
仮想デバイスとか小一時間あればできちゃうし、思ったより
敷居は低いと思います。

11 :
>>9
man 9 盲点でした。見てみたら情報の宝庫だ・・・
(日本語訳されてるともっとうれしいんだけど)
man のあるsectionの一覧を得る方法ってあります?
とりあえず本家サイトに一覧あったんでそれでみたんですけど、
ローカルでも何かコマンドで見れそうな気が・・・

12 :
ところで、「お前ら○○しますか?」というフレーズが
微妙に流行ってるのか?

13 :
>>12
すでに微妙に流行遅れ。

14 :
こっちにも飛び火してます
http://mentai.2ch.net/test/read.cgi/network/1003037538/

15 :
>>11 /usr/manとかそのあたり探してみれば?

16 :
>>15
鬱だ・・・単純に覗けばいいんだった・・・
init_main.c:start_init()がなんとなくわかってきた。
prepare_usermode()の定義が見つからないのが鬱だけど、そろそろ寝よう

17 :
あへ

18 :
#先日の情報処理試験のためハック休んでました。今日から再開。
/sbin に myinit を作って(へろーわーるどの後whileで停止するだけ)、
start_init() の init 探すパスを myinit 指すように書き換えてみたけど、
kern_exit.c の exit1() で止まるねぇ。
どういう経路でここまで来たのかまだちょっとわからん。
global + Namazu 駆使して頑張ります。おー

19 :
kern_exec.c: execve() の exit1() で止まることがわかった。
vmspace_destroyedフラグがたっちゃってるのね。
image_params にセットされる値追いかけなくちゃ・・・

20 :
おやおや、こんなスレが。僕もちょうど読もうとしてた(のに2ヶ月間ほ
ったらかしてた)から参加しよう。
arch/include/pmap.h 以外で、全arch共通の pmap インタフェースを記述
した文書なりファイルってありますか?

21 :
あげ

22 :
man page に pmap(9) がある。(NetBSD-current の場合)

23 :
BSDマガジンの第4号はカーネル初心者必携です。

24 :
ソフトウェアRAIDなのですが
/dev/hda5 7GB (/home)
/dev/hdb1 7GB (linuxraid)
としたばあいで
RAID0を組みたいのですが
詳しいページご存知無いでしょうか?
赤帽7.1を使っているのですが…
/etc/raidtabが変なようで
起動時にこけます
raidtabを一旦削除した後の再起動でまともに起動しますが
RAID0は手動でしか動きません

25 :
>>22
おお、ありがとう。でもこれってuvmのやつだよね。
http://cvsweb.netbsd.org/bsdweb.cgi/sharesrc/share/man/man9/pmap.9?rev=1.9&content-type=text/x-cvsweb-markup
NetBSDを読む機会があったら参考にするよ。
>>24
板&スレ違い。

26 :
>>3
えっと、もうmain()って名前じゃなくてmi_startup()という
名前に代わってるよん>init_main.cの関数。
FreeBSDの場合だと、mi_startup()はSYSINITマクロで作られた配列を
順番に実行するように作られてます。割と追いにくいです。
/sys/sys/linker_set.h
/sys/sys/kernel.h
あたりに小細工があります。

27 :
>>19
あのー、ルートファイルシステムは切ってあります?
切ってあればld-elf.so並びに共有ライブラリにアクセス
できてないんじゃないの?

28 :
ttp://unix.za.net/~kobz/freebsd.jpg
デーモン萌え

29 :
そういやビルくんを f*** する画像もどっかにあったな...
しかしスレ違いでは。
GNUのウシ
http://pc.2ch.net/test/read.cgi/unix/1002725230/
が適切か?(w

30 :
で〜もん君のイラストって、キモくないですか?
BSD関連のよさげな本には(よさげでない本にもですが)必ずあれが
あって鬱になるんですけど。

31 :
>>30
オレもそう思う。

32 :
8頭身のデーモンはキモい!

33 :
確かになー
Linuxのペンギンのがかわいいよなぁ

34 :
僕は linux user だがデーモン君の方が好きだな.

35 :
netbsdのサイトのメイン画面は好きだよ

36 :
>>35
あれは誰かがバタくさいといってて笑った.

37 :
>>36
あれはアメリカ軍の硫黄島占領をパクったもので、だいぶ前に
「他にいい絵があったら差し替えてもいいよー」
という話になってますが、いまだに代わりになる「いい絵」がないようです。

38 :
>>37
これか。
ttp://shinkiro.com/paro/191/
ttp://www.fsinet.or.jp/~news101/usa11.htm
ttp://www.ne.jp/asahi/hp/sumei/anno/art/m_iwojima.htm

39 :
>>37
なんかのパロディっぽいとは思ってたけど、勉強になりました。
アメリカ人ならみんな知ってる有名な銅像なのだろうか。

40 :
>>39
銅像より元ネタになった報道写真のほうが
著名なんではないかと。

41 :
そもそも元ネタがヤラセなんだよねw?

42 :
ヤラセっつーより仕込みのような。
報道写真なんてそんなもの〜♪

43 :
そんな絵を使ってるのに日本人 committer の多い NetBSD 萌え。

44 :
そういう絵だったのか...

45 :
http://www.mainichi.co.jp/life/family/syuppan/chronicle/1945_3.html

46 :
>>43-44
変えようとかいう話も以前出てた気もするけどどーなったんだろ(w

47 :
おせーてくださいませ。
caddr_t ってどーいう意味なのですか。
ヘッダファイル見たら core address ってコメントしてあったけど、
よくわかりませんです。
ってこれはカーネルの話題じゃないのかな?

48 :
>>33
ペンギンかわいいか?目にまったく生気がなくてうつむいてるし、
ぐったりしてるように見えるんだけど。カモメの方が好きだった。

49 :
正直、linuxペンギンは気持ち悪い。

50 :
>>26
SYSINITの所で、つまずいたです。
出来れば簡単に説明して頂けるとうれしいのですが。。

51 :
ager

52 :
以下の実験は実行ファイル形式としてELFを使用しgccをコンパイラとして
利用している事が前提である。
実験1.
まず以下のソースをコンパイルし結果を見よ。
--------a.c
extern int __start_b;
extern int __stop_b;
static int a1 __attribute__((__section__("b"))) = 0;
main()
{
int *a;
for(a = &__start_b; a < &__stop_b; a++){
printf("%d\n",*a);
}
}
-------
実験2
上のソースと次に挙げるソースをリンクし、結果を見よ。
----b.c
int a2 __attribute__((__section__("b")))=1;
int a3 __attribute__((__section__("b")))=2;
-----
実験3
/boot/kernel/kernelと、今作った実行ファイルそれぞれに対し
objdump --all-headers
をかけて結果を見よ。
考察欄

53 :
$ objdump --all-headers /boot/kernel/kernel
/usr/libexec/elf/objdump: /boot/kernel/kernel: No such file or directory
$ uname -sr
FreeBSD 4.4-RELEASE

54 :
みゅ。悪い。4系だと/kernelだね。

55 :
Linux(ELF)でも、(おそらく)同じ結果になった。
__attribute__や__section__の定義を探して
/usr/includeなんかをfind+grepしたけど見つからない。どこかなー

56 :
>>55
>>26参照。

57 :
それから、__attribute__はgccの拡張だよ。info参照。

58 :
僕は、超研究員大学生でありウィザドですが、
既存のOSはしょーもないので新しく作ります。
そこで質問です。
FreeBSDってカーネルとか弄ったりして、
ソフトとか入れて整形したものを
Linuxのディストリビュージオンみたいに配ってもいいですか?
または、FreeBSDなどを参考にして、
一から作ったOSウォ、VokuBSDみたいに名乗ってもいいですか。

59 :
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吐きまくったです。

60 :
>58
既存のソゥースについたBSD スタァイルのコピーライトオンを改変しなけれヴぁ
問題にないはずです。
頑張ってくださイね。

61 :
おひさしぶりです。
己の能力不足ですっかりカーネルの深海に溺れて土左衛門になって
スレに出入りすることもなかったんですが、
まだ地味に続いてたんですね。
26さんが情報提供してくださったりして、スレの雰囲気は良い方向
に向かってますね。
全然ついていけないんですけど、今MINIXいじって基本を勉強してるんで
いつか追いつければなぁと思ってます。
っつーかみなさんどうやってそんなにスキルつけたんですか。

62 :
>>61
oskitで遊ぶ

63 :
>>58

どんな簡単な物でもいいから、とりあえずドライバ書いて見たら?
今まであるドライバからコピペしたり、/usr/share/examples/にある
スクリプトを使ったテンプレートを元に書けばそんなに難しくないよ。
頭から追っていくってのは正直言うとかなり効率の悪い方法だと思う。
カーネルがprintf(9)で吐くメッセージをたよりにしたりしながら
調べるのが吉。そうすれば例えばSYSINITの実装はとりあえず理解しなくても
先に進むことが出来るし。

64 :
なんか面白そうだな。
*BSD 入れたくなってきた。

65 :
Solarisのカーネルハックもここでいいの?

66 :
Solarisの kernel source見ると、変な copyrightに汚染されませんか?
# 会社の決算期にあたって、bladeが来ない...


67 :
age

68 :
>>63
日本人がBSDにドライバ書くのは見飽きたにょ
VFSとかに挑んでみてくれ


69 :
Uniform Driver Interfaceどうよ?

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

71 :
>>70
個々のファイルシステムじゃなくてVFS。
VMいじれとまでは言わないっす。ドライバ書きは多いけど、そっから
昇格するやつがいないと思ったみょ。
わしも、しょうもないドライバを昔書いたけど、それいらいカーネルは
いじってないでし。(もはや一介の犬厨です)

72 :
ソラリスのカーネルスレッドがマッチするよう
Sparcは設計されているのですか?

73 :
あげ

74 :
ドライバ書きより VFS いじる方が格が上だとでも?
ただのレイヤ違いじゃん。

75 :
>>74
本当にそう思う?
みなさまもそう思う?

76 :
禿同 >>74

77 :
>>75
心からそう思っております。

78 :
age

79 :
これも

80 :
つづきプリーズ揚げ

81 :

BSDに誰か じゃーなりんぐできるFS実装してくれたまへ。
あと、圧縮できるFSもキボンヌ

82 :
http://jfs4bsd.sourceforge.net/

83 :
>>82
ライセンスどうするんだろ? JFSもGPLだったよね?

84 :
>>83
コードの再利用をせずにスクラッチで書けば良いんではないかい?

85 :
うーんやっぱそうなるよねぇ。先が長そうだ...
とりあえず応援age

86 :
JFS ってわざわざスクラッチから作るほどイイの?

87 :
とりあえずジャーナリングするファイルシステムがひとつは欲しい

88 :
JFS for Linux を移植するよりスクラッチから書いた方が早い


89 :
>>88
その情熱をLFSに注いでクレ

90 :
LFSとかsoftupdateみたいなディスクへのリクエストの順序で整合性を保つ方式は
そろそろダメというのが世間のコンセンサスな気がする

91 :
ジャーナリングって
ディスクへのリクエストの順番と
実際書き込まれる順番が
デタラメになっても問題ないの?

92 :
>>91
そんなことはないが、ディスクキャッシュのフラッシュなどの
同期命令の発行がかなり少なくてすむ
少なくともメタデータ一個書くごとにフラッシュする必要は無い

93 :
書き込み順序保証ってSCSIやATAのtagged queuingじゃダメなの?

94 :
>>93
その手の機能をすべてのメタデータの書き込みに対して使うと遅いよ

95 :
>>90
LFS はセグメント毎にフラッシュすれば十分なんでないの?
ダメ?

96 :
>>95
そうですな。すまんかった

97 :
age てみよう。

98 :
勉強のため、FreeBSD 4.5-RELEASE 上で俺ファイルシステムを
作りたいと思っています。とりあえず、procfs のように、カーネルの
覗き穴的な fs がいいかなと。
が、サパーリわかりません。というわけで、fs のスケルトンが欲しい
のですが、よいスケルトンはどれでしょうか。
ファイルサイズ的に miscfs/deadfs/ かなぁと思うのですが、deadfs は
どういう目的の fs なのかがわかりません。ぜひアドバイスをお願いします。

99 :
deadfs は mount 方法もわからないし (そもそも mount できるのか
どうかもわからん) kernfs の方がいいかな…。

100 :
procfs を換骨奪胎すればいいのでは?

101 :
やっぱnullfsが基本では。

procfsはpseudofsレイヤができたから応用ききづらいかも。

102 :
nullfs は読むのに layerfs と行ったり来たりしなきゃ
いけないので面倒かもと思ったので。(NetBSD)
よく見たら >98 はFreeBSDか。
てゆーか msdosfs あたりでも見たほうがむしろ分りやすいかもとか
思ったり。

103 :
なんだこれ、ちょーかんたんじゃん! というわけでメモメモ。
 /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!

104 :
UNIX 使い始めて はや7年。やっとカーネルの世界にちょっとだけ足を踏み入れる
ことができたかな…。漏れみたいなヘタレには一生無理かとおもてたよ。感激。
というわけで、とりあえずの目標は
 rootvfs/da0s1a -> vnode/1
 rootvfs/ad0c -> vnode/2
 vnode/1/v_flag
 vnode/1/v_count
みたいな (まだわかってないので構成は適当)、各種構造体をマッピングした
ファイルシステムを作ろうと思います。
> やっぱnullfsが基本では。
nullfs の本来の使い方がいまいちわからないので、
一番サイズの小さい kernfs で行くことにしましたっす。

105 :
カーネルのコンパイルについて質問です。
FreeBSD4.5でカーネルをいじってmake && make installを
しているんですが不要な部分を除いてコンパイルの時間を
短くできないでしょうか?そんな都合のいい話は
ないかもしれませんがよろしくお願いします。
106 :あぼーん:あぼーん
あぼーん

107 :
>>105
パソコンかえればはやくなるんじゃないかな。
PentiumIII1G以上だったら1分ぐらいで終わるし。


108 :
>>105
本来スレ違いなんだけど…
http://www.jp.freebsd.org/www.FreeBSD.org/ja/handbook/kernelconfig.html
さらに何か疑問があればFreeBSD質問スレにGo

109 :
NULLFSは正直お勧めできない。
あれは、スタッカブルファイルシステムのテンプレ。
そうそう。Linuxネタだけど、これどうよ。(カーネル空間でORBit動かす)
http://korbit.sourceforge.net/
これ一瞬移植しようかと思ったけど、geom入ったせいで
glibと名前空間がぶつかりそう。

110 :
うーん。
NetBSDからスタッカブルファイルシステム系全部持ってきたほうが
面白いかなぁ。

111 :
>>109
ORBit カーネルで動かすとなんかいいことあるの?
> you can write Linux device drivers in Perl
とか言われてもなあ(w

112 :
カーネル書けるとスゴいって書き込みよく見かけますが
学生で書けたらすごいですか?
ウチの教授は書けますかね?

113 :
>>112
そんな書き込みどこで見かけた?
2ちゃんねるぢゃあないよな?

114 :
>>113
ここと思われ:
Free Unix での経験は職歴に入らないか? (428)
http://pc.2ch.net/test/read.cgi/unix/995637081/12

115 :
ビンゴです。
あと、以前他のスレでも見ました。
で、どうなんですか。
カーネルは上級のプロじゃないと書けないんですか?
お前ら真面目にレス下さい。

116 :
>>115
べつにプロである必要はこれっぽっちもないわけだが

117 :
>>116
どのくらい難しいのでしょうか
3年間くらい勉強すれば学生でもかけますか

118 :
>>117
やってみりゃ自分でわかるだろ?
つべこべ言ってないでさっさとカーネルをハク汁

119 :
>>117
自分の頭の中のフローチャートを実際にプログラムに
起こせる人間であれば、多分1年くらいで出来ると思う。
漏れは3年くらいかかったけど(鬱

120 :
>>117
学生かどーかは関係ないし。
1ヶ月くらいやってみて無理そうなら当分無理。

121 :
レスありがとうございます。
ここで言う「書ける」というのは、白紙からの状態から自分で書けるという意味ですよね?
既存のプログラムを改造するとか、書籍を見て書くとか、そういう意味ではないですよね?

122 :
>>115
むしろカーネルをスクラッチから書くなんてこと
学生にしかできないから、今のうちに頑張れ。
「上級のプロ」にそんな暇なんてありません。

123 :
>>122
UNIX使いになるためには、やっといて損はないですか?

124 :
>>123
人によって"損"の感じ方が異なります
私の損とあなたの損は違います

125 :
>>124
うーん
将来ネットワーク関係のソフトウェアを開発したいのですけども。
そーゆー人にとっては有益でしょうか?

126 :
みんな理系?
凄いです
尊敬します

127 :
>>125
そういう具体的な目標があるのなら、カーネルに拘らずに最初から
ネット周りのプログラムをハクした方がいいと思われ。
カーネル書ける奴はスゴイが、カーネル書ける奴だけがスゴイわけじゃない。

128 :
俺的にはドライバをバリバリ書き捲くってるような人が
プログラマとして尊敬に値すると思ってる。
カーネルはどっちかって言うと設計するものって感じだしねぇ。

129 :
>>128
実務家っぽい御意見…

130 :
人に訊いてからじゃないと始められない奴は結局何もできない。
hackなんてのは気づいたらやっているか、やらないと夜が明けないかのどちらかだ。

131 :
>>125
ネットゲーのサーバとかのように、非同期に発生する大量の要求を
うまく捌かなければならないプログラムを書くのは、
カーネルを書くのと似たようなセンスが必要な気がする。
# RDBMSとかもそうだな。
こういうシステムをうまく設計できる奴は
非常に使えるね。

132 :
>>130 がいいこと言った。

133 :
みなさんどうもありがとう
ところでみなさん理系ですか?
もしくはコンピュータで飯を食っている人達ですか?

134 :
>>133
理系かそうでないかなんてどうでもいいことだ。
とりあえずやってみろ
>>130
どっかで聞いた気がするが、イイね

135 :
>>133
俺も学生。経営情報学科というとこにいる。
理系だか文系だかわからん。

136 :
あーあ
カーネルいじって遊んでたら
もー朝だよ...
寝よーっと。

137 :
カーネル・ハッカースおじさんのAAキボンヌ

138 :
hack より fuck だと最近痛感 おっかけさぼりすぎで make world 不能状態

139 :
某誌のネタにしますた。

140 :
保守age

141 :
見習いデーモンは死んだのか?

142 :


たか、いらっしゃい
        ま
        せ
        ん
        か
        ?

143 :
誰かハックしてる人いますかー。

BSDのkernel読み始めるとしたら、手をつけるところは
どこがおすすめですかねぇ

144 :
>>143
過去ログ

145 :
>>143
current の SMPng

146 :
>>143
まぁ、過去ログにもいろいろあるけど、手足から見て行くのがいいと思うね。
デバイスドライバ、ファイルフォーマット毎のプロセス実行サブシステム(imgact_*)、
簡単なファイルシステム、低水準の初期化部あたりは割とコンパクトに
まとまってて読みやすいんじゃないの?
>>145
ほぅ。じゃぁ、具体的に何処のファイルがSMPngに関係してるのか言ってみ。
PERFORCEのリポジトリは見てるんだろうね。

147 :
>>146 の後半
ネタにマジレスカコワルイ

148 :
>>146
FreeBSD以外の*BSDってperforce使っているんですか?
FreeBSDのperforce treeってanonymousでソースを取れるんでしょうか?
できるんなら見てみたいと思っています。

149 :
>>148 他の*BSDでは使ってないです。
でもSMPngっていったらFreeBSDでしょ。
リポジトリのブラウズならここでどうぞ。
http://people.freebsd.org/~peter/p4db/
手元に置きたければ
http://people.freebsd.org/~peter/p4cookbook.txt
に取り方が書いてある。

150 :
FreeBSDのブートについて質問させてください。
sys/boot/common/load_elf.c を読んでるんですが、
/kernelのエントリアドレス(当方では0xc012b130)に0xff000000をマスクして
符号反転してオフセット(off)を0x40000000にしている意味がわからないです。
コメントの「i386 relocates after locore」っていうのも呪文ですし…
で、結局/kernelのプログラムヘッダの仮想アドレス(当方では0xc0100000)と
さっきのoffを加算して桁あふれさせて0x100000にして、
最終的にはこのアドレスに/kernelをロードしてるようなんですが、
なんかえらくまわりくどくないですか?私の読みが浅いだけでしょうか。

151 :
>>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

152 :
良サイト宣伝中〜〜。

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

注)私はサイト関係者とは無関係ですよ。

153 :
>>152
BSD カーネルのハックに関する良サイトかと思って見に行っちゃったよ :-)

154 :
アドレスの最後の方のgameがgmakeに見えて、見に行っちゃったよ。。

155 :
>>151
その通り。なぜ、&= ~(0xff000000)じゃないのかよう分からんけど。
で、じゃあ何故ELFヘッダの開始番地が0x100XXXなんかじゃ無くて
0xc01000XXになってるかっていうと、paging開始後はカーネル仮想メモリ
アドレスは全て0xc0000000以降になっていて、 カーネルで使用している
メモリアドレスは全てそこにマップされるから。(リンカとELFフォーマット
の機能を使えばそういう状況にも実は対応できたりするような気もするけど)
特にkernelとISAメモリ空間は(物理アドレス+0xc0000000)の位置にマップされます。
locore.sでページングを開始するまでに絶対アドレッシングが必要な
時は
#define R(foo) ((foo)-KERNBASE)
定義されるマクロを使ってアクセスしてます。

156 :
>>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へマップするのはあってるんですよね?

157 :
>>156
> off = - (off & 0xff000000u); /* i386 relocates after locore */
スマソ。コードを読み違えました。
off -= (off & 0xff000000u);
だったら最上位バイトのクリアですね。

158 :
>>157
まぁ「保証はしない」っておっしゃってましたしね =)
さてすっきりしたところでつぎはbtx.sでものぞいてみますか…

159 :
せっかくだから俺は、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へ?)
ぐらいまで読めましたが、そっからどうなってるのかわかりますか?

160 :
上から来るぞ! 気をつけろ!
TCP は置いといてとりあえず UDP 追ってみては?

161 :
おい、>>160,見習いデーモン,生きてるか?
udpの場合ip_inputの後
udp_input@udp_usrreqで配送先のプロセスを探して、sowakeupで起こす
そうすると、sbwait()で待ってた
soreceive()(uipc_socket.c)->recvit()でcopyoutされ、
recvitからはrecvfromに戻ってシステムコール完了と言った感じですか。

162 :
ここなかなか良さそう。ただしSimplified Chinese。
http://opensource.zjonline.com.cn/

163 :
おはようございます。
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 :
基本的にはbtxではタスク切替え使ってない筈。(そんな豪勢なことする
ほどのサイズも無いし)単純に、EFLAGSもPOPすることで、
特権を切替えてbtx_hdrにあるモニタルーチンのエントリーへ
飛んでるだけのことと思う。

165 :
>>163
この場合はTSSは関係ないですね。(V86用に使うだけ)
割り込みが起こったことにしてiretしているだけです。

166 :
レスどうもです。

はやとちりしてました。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 :
>>166
>でも、pushしておいたEIP(btx_hdr+0xc)がiretで特権を切替えたあと
>実行される番地みたいですけど
>pushl btx_hdr+0xc# Set EIP
これは間接参照でbtx_hdr+0xc番地の内容(long)をpushするという意味です。
# operandに'$'が付いていないことに留意。

168 :
>>これは間接参照でbtx_hdr+0xc番地の内容(long)をpushするという意味です。
にしても、特権切替えたあとはどのコードが走るのか全然わからないです。
EIPが0x0なんですよね?0x0番地のコードって…?


169 :
実際のバイナリを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が走ったりするっす。

170 :
>>実際のバイナリをhexdumpしないとダメっすよ。ローダがいじるに決まってるでしょ。

おぉ、盲点でした。
こういうのはMakefileを丁寧に追っていけばわかることですか?
今ちらっとsys/boot/i386/boot2/Makefileを見たら
ORG2に代入された0x1000がbtxldコマンドのオプションとかに使われてて
「ほうほう」と思ってたんですけど。

ソースにとらわれすぎて本質を見失ってました。
でも>>169さんのおかげでまた少し前進できそうです。ありがとうございました。

171 :
sage忘れ欝だ死のう…

172 :
sageなくても良いんじゃない?
まぁ、強いていえば「特殊なローダを必要とする」「0x0なんて番地に飛ぼうとする」
という2点から勘を働かせた結果かな。

173 :
スレ キトク スグカエレ

           〜ハハヨリ〜


174 :
>>173
知らなかったのか?見習いデーモンは
半年前に勇者に殺されたんだぞ。

175 :
もし!毒蛇に噛まれたら、
切り口を素早くナイフでえぐり、
急いで口で吸え!
ほら、言ってみろ!!

176 :
虫歯がある時にそれやったら死んでしまう罠。

177 :
ごめんなさい
クックロビンを殺したのは私です。。。。

178 :
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バイトの領域にコピーする
という意味なのでしょうか?

179 :
>>178
MBRが読み込み・実行される際のセレクタの値
引用してるコードの上の方で設定してるセレクタの値
セレクタとオフセットから得られる実効アドレス
について調べましょう。
# 個人的には、今さらIA32の16bitモードについて勉強しても
# 得る物はあまり多くない気がする。

180 :
むしょうにデバイスドライバを書いてみたくなって、
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
なんかのぞいてみて頭から煙だしたりしてます…

181 :
おまえの見てるのデバドラのつくり方じゃねぇじゃん。(藁

182 :
うお、もしかして空回りですか…
でもKLDでカーネル領域に自分のコード置けるとおもうとワクワクするんですが

183 :
カーネルを再構築しても自分のコードは置けますが何か?

184 :
>>181
ハンドブックで解説されている部分は部分はデバイスドライバ
(ツリーを形成する実デバイスを叩くもの)ではデフォルトで呼ばれる
ものがあるので気にしなくていいです。
おまいさんの目的ではどう見てもfxpを見るのは間違いだと
思いますし、そもそもシリアルならsio使ってtermios
叩いたほうが.......
で、ご希望にそえるものなら例えば、spic(4)あたり簡単そうかな?



185 :
spic は デバイスの仕様が不明なので、
読んでもあまりピンとこないのでは。

186 :
============ お知らせ ==================
あー、只今よりこのスレは、見習デーモンの学習を見張るスレになりました。
====================================

187 :
保守

188 :
NETBSD入れたらまずカーネルハックするぞぉ!

189 :
おまえのいうハックってカーネルの再構築のことだろ?ぷ

190 :
千里の道も一歩から

191 :
千里の道を一歩だけ

192 :
千里を歩き通すのは大変だよ……。

193 :
千里ちゃんって誰?

194 :
http://homepage3.nifty.com/senri/

195 :
>>194
そんなの僕の千里ちゃんじゃないやい。

196 :
>>193
千里中央に行くには新御堂筋に一歩踏み出せばあとは
北上するだけで着くので解りやすいと言う諺だよ。

197 :
>>196
それはちとローカルではないかと。

198 :
なかおくんだろ?

199 :
(^^)

200 :
(^^)

201 :
>>194
大江千里も随分としけたもんだね。オフィシャルサイトが
niftyとは。。。

202 :
(^^)オレダッテ タマニハ マジデ ホシュ スルyo!!

203 :
(^^)
204 :あぼーん:あぼーん
あぼーん
205 :あぼーん:あぼーん
あぼーん

206 :
カーネル内で、擬似的ではないランダムな値を使うにはどうすればいいですか??

207 :
ガイガーカウンタをつないでカウントして乱数を発生させる

208 :
ガイガーカウンタは計数するんじゃなくて時間を測るんだよね。
線源なしのバックグラウンドが相手だとパルス数が少なすぎて
ちょっとトロい。

209 :
つーか、Intelチップセットの乱数ジェネレータとか使えばいいんでないの?
OpenBSDがサポートしてるのは知ってるけど、他はどう?

210 :
カーネル内で擬似的ではないランダムな値を使うためにはどうしたらいいですか??

211 :
すいません、ダブってしまいました。m(_ _)m

212 :
NetBSD の場合、キーボードやシリアルその他のデバイスから
エントロピーを集めている。
この結果から得られた乱数は rnd_extract_data(9) で取得できる。
例えば sys/netinet/tcp_subr.c では、TCP の初期シーケンス番号
を、この乱数源から得るようになってるので、ここを見てみれば
使い方は分かる筈だ。

213 :
当方FreeBSDで「TCPの初期シーケンス番号」からヒントを得て、
そこからip識別子(ip_id)の初期化の手順へ行き、そこからシステムクロックをとるtime.tv_secを
知ることができました。
ありがとうございました。

214 :
それちがうやろ....

215 :
確かに違いました。^^;
利用したい値の有効桁数が少なかったのでこれでも乱数として利用できるかと思ったんですが、
他の関数に利用する場合も考えてTCPの初期シーケンス番号の関数を利用したいと思います。
ご指摘ありがとうございました。

216 :
>>210
どういう目的に使うの?

217 :
>>212
「エントロピーを集める」という表現は気持ち悪いな。NetBSDの世界では普通に使うのか?

218 :
別に NetBSD に限らず、乱数のセキュリティ方面への利用では、
普通に使います。試しに "collect entropy" でググってみるべし。

219 :
マルチキャスト通信においてNAKにより信頼性を持たせようと思っているのですが、
そのとき全ての受信者がNAKを出すタイミングが重なるとトラフィックが一気に
増大するのでそのタイミングをずらすために乱数が必要となりました。
アプリケーションプログラムと違い、カーネルでの乱数の求め方がわかりませんでした。^^;

220 :
ただいまBSDのKernel SoruceをReadしてるので
Context Switchするわけにはいかぬ。

221 :
擬似的でない乱数って…

222 :
自分でnumerical recipe使って書け

223 :
プ > numerical recipe

224 :
UDPのudp_inputにおいて ユニキャストとマルチキャスト・ブロードキャストで
処理が分かれいるところで、ユニキャストの方は分かるのですが、
マルチキャスト・ブロードキャストの方でUDPPCBをfor文でスキャンして
いくのはなぜですか? 同じPCBは複数存在するのですか?
225 :あぼーん:あぼーん
あぼーん
226 :あぼーん:あぼーん
あぼーん

227 :
>>224
ブロードキャストの方はaliasついてりゃ、それぞれ同じポートつかえる。
マルチキャストは良くわからない。

228 :
>>227

229 :
>>227
もしよろしければブロードキャストにおける同じポートを使える
クライアントサーバのプログラムをいただけないでしょうか?

230 :
>ブロードキャストの方はaliasついてりゃ
これ嘘。複数使えるけどブロードキャスト宛を受信できなかった。
↓ブロードキャストアドレス宛は受信できるけど、ユニキャストアドレス宛は受信できない。
foreach (リモートアドレス) {
udpソケット作る。
SO_REUSEADDRする。
ローカルアドレスとしてブロードキャストアドレスにbindする。
リモートアドレスにコネクトする。
}
231 :あぼーん:あぼーん
あぼーん

232 :
FreeBSD4.7のカーネル内の関数についてお聞きしたいんですが、
timeout(ftn, arg, to_ticks)
  timeout_t *ftn;
  void *arg;
  register int to_ticks;

において ftnの引数の数を任意の数にしたいのですが
やり方がわかりません。どなたか教えてください。よろしくお願いします。

233 :
マルチuzeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!!!!!!!!!!!!!!!!!!!!!!

234 :
>>232
できませんが、構造体を定義して、それを確保してポインタで渡すというのは
だめですか。こんな感じ
struct example_arg {
   int arg1;
   char *arg2;
};
void example_ftn(void *arg)
{
   struct example_arg *ea = arg;
   /*Some useful stuff*/
}
235 :あぼーん:あぼーん
あぼーん
236 :あぼーん:あぼーん
あぼーん

237 :
ついに
キタ━━━━━━(   )(゚  )(∀゚ )(゚∀゚)( ゚∀)(  ゚)(   )━━━━━━ !!!!!
【4.4BSDの設計と実装】
アスキー  ISBN: 4-7561-4346-6
価格: \5,800  発売日: 2003/9/18

238 :
>>237
おお、とうとう出るのか。
ソースが見たいな。

239 :
自分で調べてみたけど、確かに出るみたいだね。
http://www.fukkan.com/sell/index.php3?mode=detail&i_no=14024728

240 :
復刊??

241 :
【4.4BSDの設計と実装】
記念あげ

242 :
おまえら、洩れが書いたカーネルをハックしてどうするつもり???

243 :
         みのるの超流行語では、
流行語大将になりそうな言葉を紹介していきたいと思います(^‥^)。
オヒャヒャ           僕、みのる様が使用している笑い方です。
(^‥^)          僕、みのる様が愛用している顔文字です。
トライブット        僕、みのる様のサイトがある所の偉い所の人。
みのる様ファン倶楽部    会員数がもう100億人超えた超えてます。
マヨネーズ         僕様の大好きなマヨネーズの一種です
スペシャルギニア      世界共通語で、誰でも分かります
応援ありがとう!!!    皆が僕様を応援してくれるから、僕様も返信します
           俺様の素晴らしいサイト↓
         http://minoru_god.tripod.co.jp/
        UNIX板のバカドモはこっちに来て勉強しな
                    BYE みのる様
   

244 :
訳が糞だって聞いたけど、そのへんも直して出るのかね?

245 :
それはむりだろう
英語読め

246 :
改訂するって書いてるから直るかと思ったんだけど。
http://www.fukkan.com/column/?msgdate=msg030815
で、だれかこれ読んだ人いない?
http://www.amazon.co.jp/exec/obidos/ASIN/1589950046/ref=sr_aps_eb_/249-5632084-1864337

247 :
砂ちゃん監訳だから、翻訳しなおしたんじゃないか?
248 :あぼーん:あぼーん
あぼーん
249 :あぼーん:あぼーん
あぼーん

250 :
>>222
禿同
話は変わるけど、携帯ゲーム機"プレイステーションポータブル(PSP)
 久夛良木氏は,“PSPはゲーム業界が待ち望んだ究極の携帯機”として説明。「ここまでやるかと言われるスペックを投入した」という。
 発表によれば「PSP」は,曲面描画エンジン機能を有し,3Dグラフィックでゲームが楽しめる。
7.1chによるサラウンド,E3での発表以来,クリエイターたちにリクエストが高かった無線LANも搭載(802.11)。
MPEG-4(ACV)による美しい動画も楽しめるという。これによりゲーム以外の映画などでのニーズも期待する。
 外部端子で将来,GPSやデジタルチューナーにも接続したいとする。
また,久夛良木氏は,繰り返し「コピープロテクトがしっかりしていること」と力説。会場に集まった開発者たちにアピールしていた。
 さらに,ボタン設定なども明らかにされ,PS同様「○△□×」ボタン,R1・L1,アナログスティックが採用される。
この際、スク・エニもGBAからPSPに乗り換えたらどうでしょう。スク・エニの場合、PSPの方が実力を出しやすいような気がするんですが。
任天堂が携帯ゲーム機で圧倒的なシェアをもってるなら、スク・エニがそれを崩してみるのもおもしろいですし。かつて、PS人気の引き金となったFF7のように。
突然変なこと言い出してスマソ・・
GBAと比較してみてどうですかね?(シェアの事は抜きで)

251 :
カーネルソースをいじって printfでパラメータを表示しながら
状況を把握したいんですが、typescriptもパイプでファイルに
保存することもできないのですが、カーネルをイジっているひとは
どうやってプログラミングしてるんですか?
カーネルを扱うに当たって便利なやり方や、アプリケーションがあれば教えてください。

252 :
出力先をシリアルポートやら、メモリやら。

253 :
最近だとsimokawaさん謹製dconsって奴があるね。
特定のメモリに書いておいてIEEE1394 OHCI
ホストコントローラが勝手にDMAしにくるってやつ。
シリアルコンソールはシリアルコンソールでも
IEEE1394シリアルだから速い。

254 :
別に機器を買う必要があるということですか。
kgdbはカーネルのコンパイル時にしか使えないのですか?
なんとかgdbなどのデバッグツールでカーネル関数の動きを追っていきたいのですが。。。
よろしくお願いします。

255 :
>>254
( ´д)ヒソ(´д`)ヒソ(д` )
256 :あぼーん:あぼーん
あぼーん
257 :あぼーん:あぼーん
あぼーん

258 :
知らなかったよ。kgdbを使ってカーネルのコンパイルができるのか.....

259 :
>>254
通常のgdbのように扱えるよ
gdbのカーネルモードだからね
基本的に大きな違いはないはず。ただ、カーネルをデバッグしているから
端末が二つあった方がいいね
もし一台でデバッグできる方法があったら教えてくれ。

260 :
誰も自分の死体を見ることはできないというお話ですた。

261 :
死体は見れるよ。来世で。
できないのは、自分自身の解剖。

262 :
いや、自分の癌の摘出をやった外科医はいたし、ある程度は可能だろう

263 :
最近のはやりだとbochsやvmwareなどの仮想マシン上でデバッグする
という手もあるな。bochsにも一応デバッグ支援のための機能はある
ようだ。もっともエミュレーションに起因する問題が出る可能性は
あってどんな場合でも使えるわけじゃない。
動きを追うぐらいならそこそこ使えるかもね。
ま、詰めなきゃならん所は昔ながらのメモリ上に値を置く、かな。

264 :
*BSDで、一台でもある程度はできるよ。Linuxでも最近できるかな。
options DDBを入れてCtl-Alt-Breakを押すと
ddbのモードに入る。ここで、命令ごとのステップ実行
callの終了までの実行、シンボルで指定できるブレークポイント設定
変数参照、レジスタ参照、等々。ddb(8)は印刷しといたほうがいいな。

265 :
i heard that you can use /dev/kmem, instead of /var/crash/vmcore.*,
fore core-file argument of kgdb, though i've never tried.
just fyi.

266 :
カーネルモジュールはどうやってデバッグするんでしょうか?
特にインターフェース部分。
デバッグ用のシンボルはどうやっていれれば?

267 :
>>1
これは実際に重要なことである。
開いたソースはあなたのためになり私のためになり、可能性をもたらす。
多くの危惧の中の一つは、しばしば現実となるが、世界の協力はそれを直すだろう。
もしあなたやあなたの友人が開いたソースを悪意で使うなら、それは停止して欲しい。

268 :
>>267


269 :
BSDのソース読んでみようと思うんだけど、NetBSDがいいかな?

270 :
(´-`).。oO(でっかい釣り針がぶら下がっております…)

271 :
inferno

272 :
inferno

273 :
くだ質スレからの流れでしょう。

274 :
漏れじゃネーよ(w カーネルくらい黙って読むし
でもって、NetBSDをちらっと読んでるんだけど、なんか得体の知れない
マクロだらけ…。ちゃんとヘッダファイルから読まなきゃダメか。
あと、NetBSDのカーネルハック本(和訳)って全然出てないよね?
おおまかな構造を理解してからソース読まないとサッパリだよ。
この前出た4.4BSD赤本じゃあ古すぎるような気がするので読んで
ないけど…


275 :
>>274
今までどんなの読んでたの?
得体の知れないマクロってのはbus_spaceとかの事かな。

276 :
ヘッダファイルこそがソースの肝なのに。。。

277 :
NetBSD のカーネルハック本(和訳)って、
BSD Magazine の Vol.13 のことじゃないのか?

278 :
>>276
そうなんだよね。本当に。

279 :
/usr/includeの下は丸暗記するぐらいの勢いで読みまくった。
これはいきなりカーネル読み始めるよりも、効率的だし、
実用的だったよ。

280 :
へたれプログラマなんですが、なんでそんなにヘッダファイルが重要なのか
わからないんですが、理由を教えていただけませんか?

281 :
>>280
これは計算機科学の教科書の練習問題だと思うぞ。
こんなものかな。採点キボンヌ(配点20点)
ヘッダファイルにはデータ構造、関数定義など、モジュール間のインターフェイスと
なるものが記述されており実装の詳細を見ずに全体を把握する事が可能である。
また、一つのプロジェクト内のモジュールのインターフェイスというだけでなく、
異なるシステムとの間の相互運用性を確保するためにも必要である。



282 :

俺の採点だと20点満点。素直に。
敢えてアラ探しやればできるだろが、練習問題という設定なら十分な回答だろ。
2ch的でない(奇をてらわない保守的な)回答だけど、そういう地味さにも好感。

283 :
>>281
ありがとうございます。
なんか目から鱗でした。

284 :
そうか、ヘッダファイルってそんなに重要なんだ…。言われて
みればたしかに。
漏れも>>279みたいに凄い勢いでヘッダ読んでみまつ。勉強に
なったサンクスコ。

285 :
重要は重要だけど、本で言えば目次だけ読むようなもんだから
偏食にならないようにネ

286 :
>>280
頭(head)だからです。
頭だけとか体だけとかは駄目なんです。

287 :
sys/kernel.h --
#defineSYSINIT(uniquifier, subsystem, order, func, ident)\
C_SYSINIT(uniquifier, subsystem, order,\
(sysinit_cfunc_t)(sysinit_nfunc_t)func, (void *)(ident))
funcを2重にキャストする意味って何?

288 :
興味ありあげ

289 :
BSDがSCOによって血祭りにあげられるまであと何日ですか?

290 :
BSDによってSCOが血祭り、なんだろうな

291 :
というか既に血まみれで死にそうなSCOが
あちこちに血しぶきを撒き散らして嫌がらせしてるんだろ。

292 :
>>290-291
おまいら何もわかってないな
技術泥棒なんだよ
ギ ジ ュ ツ ド ロ ボ ウ
わかるか?

293 :
>>292 煽り乙。どうせなら犬板のSCOスレ逝った方が人多くて楽しいと思われ

294 :
同感

295 :
BSDのカーネル読むにはどのBSDのソースがとっつきやすいですか?

296 :
あなたの使っているものが一番じゃない?

297 :
ソースなんて綺麗とか汚いとかほざくまえに、
動いてるコードなんだから黙って読むんだよ!
今じゃろくなコード書けない人間までコードが
云々なんて言い出す始末だからな。もうブチキレですよ。

298 :
カーネルによって違うのかもしれませんが、
各種スレッドというのは、スタックセグメントだけを
スレッドごとに固有にもち、それ以外のセグメントは
プロセス内の全てのスレッドで共有するという感じなのでしょうか?
そうすると、ページディレクトリテーブルも共有で、
スタックセグメントだけを仮想メモリの機能として
別々の物理ページに割り当てるといった感じになっているのでしょうか?
それとも全てのスレッドに対してCR3を割り当てるのかな?
どうもプロセス内のスレッドとVMの関係がよく分りません。

299 :
>>298
実装にもよるんだろうけど、スタックも含め、スレッドがいくつあろうと
アドレス空間は1プロセスで同じもの。スタックはスレッド毎に
切り替えて違うアドレスを指してあるだけ。

300 :
>>298
コンテクストスイッチ発生させると、プロセスのコンテクストスイッチと
変わらんし...それじゃあ、スレッドの意味がない...

301 :
>>297
逆だよ。ろくにコード組めないから、綺麗なコード読みたいんだよ。
まぁ清濁併せ呑む度量があれば一番なんだが、そんな人間は黙って
読んでるよ。


302 :
おまいらカーネル**ckしてますね。

303 :
>>302
そんなタイトルの日記があったな…

304 :
>>303
あ、それ書いてたの、おれっちです。
最近NetBSDも忙しくて触って無いからカーネルファックもご無沙汰です。
厨房でもカーネルぐらい気合で理解できること証明したかったけど、
自分にはちょっと厳しかったです。また再開したときはよろしくです。

305 :
あげてみる

306 :
バッファをたくさんとれるようにカーネルイジってたら、
All mbuf clusters exhausted, please see tuning(7).
と出るんですが、クラスタ数を多く割り当てたり、
別の目的で利用されている、クラスタを借りたりすることはできないでしょうか?

307 :
a.具体的に何をしていたのかを書いてみよう。
(たとえばkern.ipc.nmbclustersをほにゃららにしてみたとか
options NMBCLUSTERS = ほげ したら config におこられるとか)
b.もし、具体的な目的があるのであればそれも書いてみよう。
(たとえば 負荷が高いWebサーバーをなんとかしたいとか。)
あと環境もちゃんと書いてみよう。

308 :
一度の関数呼び出しで何回もパケットを
送出しようとするときインタフェースカードで
データパケットが落とされることってありますか??
もし落とされたときは、ip_outputの返値は返ってきますか?
また、それは「0」以外の値ですか?
ループバック関数で戻ってきたパケットは欠如していません。
別のマシンでキャプチャーすると欠落しています。
原因・対策などありましたら、お願いします。

309 :
>>308
当然あるだろ。ip_output は if_output 呼んでるだけだから、
あとはネットワークインターフェイス依存。
etherなら、netinet/ip_output.c、net/if_ethersubr.c、
と追いかけていって、NICのデバドラまで読んでけ。
まぁ単に送信バッファ溢れてるだけだろうがな。

310 :
>>309
なるほど。。。参考になりました。
しかし、送信バッファがあふれても ip_outputの返値が0になるというのは問題なのでは??
ソケットバッファの場合はちゃんと制御できるのに。。。

311 :
>>310
ぜんぜん問題じゃない。君の考え方のほうが問題。
ソケットは到達保証するが、IPは到達保証しない。
まだわからない?

312 :
>>311
ソケットが送信保証をするためには、ip_outputの返値が0である必要があるし、
ip_outputの返値で0を返すためには、ether_outputの返値が0である必要がある。
ちなみに、ネットワークに出力されたあとは、ソケットも到達保証しないよ。
仮にできるのなら、何も苦労しない。。。

313 :
PF_ROUTEソケットについて調べてるんですがどうもいまいち…
(いまいちなのはもちろん自分)
4.4BSDの本見てから、ソース見たけど????です
PF_ROUTEソケットを調べだしたのは。rtadvdで受けている
メッセージを見ていたところ、ioctl()などのリクエストでkernelから生成してるはずの
メッセージ数と合わない、こんなところからです。
http://orange.kame.net/dev/cvsweb.cgi/kame/kame/kame/rtadvd/rtadvd.c?rev=1.88
socket(PF_ROUTE, SOCK_RAW, 0))
やはりRAWだから一気に生成したメッセージはどこかで落されてしまうんですかね…。
落される場所がわからない…
できれば落さないように改造してみたいんですが…

314 :


315 :
二年半前のスレか・・・
見習いデーモンは一人前になったのだろうか。

316 :
現在、まだ半人前とみた。

317 :
>>1 の参考
...半分ぐらい読むには読んだけど、むつかし。
ので、いったん撤退して、こっち↓に着手。
Commentary on the Sixth Edition UNIX Operating System
tp://www.lemis.com/grog/Documentation/Lions/
そのうちリベンジの予定。

318 :
>>317
よし!俺が今から
「The Design and Implementation of the 4.4BSD Operating System」
を読んで>>317を追い抜いてやるぜ!!

319 :
しかし、"こっち"も...
-- m40.s --
/ initialize systems segments
mov $KISA0,r0
mov $KISD0,r1
mov $200,r4
clr r2
mov $6,r3
1:
mov r2,(r0)+
mov $77406,(r1)+ / 4k rw
add r4,r2
sob r3,1b

320 :
~~
0619:
KISA0 and KISD0 are the high core addresses
of the rst pair of kernel mode segmentation
registers. The first six kernel descriptor
registers are initialised to 077406,
which is the description of a full size, 4K word,
read/write segment.
The first six kernel address registers are initialised
to 0, 0200, 0400, 0600, 01000 and
01200 respectively.
~~
sob
Subtract one from the designated register. If
the result is not zero, branch back "offset"
words;
...
...

321 :
スタック
--interrupted routine--
ps : old PS
pc : old PC
--vector--
r0 : old r0
--trap(assembler version)--
nps: new PS after trap
r1 : old r1
sp : old SP for previous mode
dev: masked new PS
tpc return address in "call"
--csv---
old r5 <- r5
old r4
old r3
old r2
cret <- sp

r5r5r5r5r5
r5<-r5<-r5<-r5<-r5<-r5
うーん...
service routine(dev, sp, r1, nps, r0, pc, ps)
{
u.u_ar0 = &r0
なんとも...

322 :


323 :
お前らXenのdom0に*BSDタンを担ぎ上げてください。

324 :
お前らdomUはなんでもいいとおもいませんか。

325 :
「BSDカーネルの設計と実装 --FreeBSD詳解--」
http://www.ascii.co.jp/books/detail/4-7561/4-7561-4679-1.html

326 :
>>325
よーし、俺のコレクションに加えちゃうぞー。
積読用に。

327 :
ひさしぶりに来ました。
>>316
半人前どころか四半人前ぐらいです。
スレたてたの約5年前なんですね…全く成長してないのに
自分でもショック。
仕事終わったら『BSDカーネルの設計と実装』買って帰ります…

328 :
こんにちは。
上の本、順調に読み進めてます。
Netgraphハッカーになりてーなんて思ってたら
Netgraphがカーネルの中で一番ボリュームが多いって知って
さっそく挫けそうです。
OSMでバリバリ記事書く佐藤広生さんSUGEEEEEEE

329 :
ん?多分ソースツリーの構成上だけの問題だと思うけど?
今netgraph関係は一部のモジュールを除いて、
ほとんどフラットに展開されてるから。それなりに数もあるし。
見る必要があるのはng_sample.cぐらいじゃない?


330 :
緊急浮上。
2007年はこれ
http://www.packetmischief.ca/openbsd/snmp/
と、OpenBSDのtcpdumpのpfに関連した拡張をFreeBSDに移植します。

331 :
着手しました。
まだOpenBSD上で本家パッチの内容を調査してる段階。
すんなり移植できるといいな・・・

332 :
すまん、よく見たらカーネルと関係なかった。
回線切って首吊ってきます。

333 :
カーネルの最新情報なら
http://www.kernel.org/

334 :
板違いだ
ケンタッキーでも食ってろ

335 :
仕事がつらくてモチベーションが下がったとき、このスレを開くと
元気が出る。
今の俺は、7年前の俺が目指した俺になっているだろうか。

336 :
おいらも頑張ってみようかな

337 :
積読してた4.3BSDの設計と実装でも読むか

338 :
ARM系, evbarmやarmとかいろいろあって最初に読むべきlocore.S相当がどれかわからん…トホホ

339 :
>>338
arch/evbarm/hoge/*_start.S
arch/arm/arm32/locore.S:start
arch/evbarm/hoge/*_machdep.c:initarm()
sys/kern/init_main.c:main()
arch/arm/arm32/arm32_machdep.c:cpu_startup()
の順かね。

340 :
>>339
ありがとう!頑張って勉強してみる!!

341 :
int 0x80から始まるカーネル内でのシステムコール処理中に、外部割込み(キーボードとかEtherカード)を
タイミングよく発生させる方法ってある?

342 :
>>341
remote gdb で break する -> 割り込みいれる -> continue する
じゃ、だめなのか?

343 :
ブルブルマシーンについてc
今日、仕事終わりにすぅぱぁ銭湯に行って岩盤浴してきましたQ
超ーb気持ちよかったX
その時、200円でブルブルマシーンにも乗ったのネ前回は何も思わんかったけど…たぶん前の乗り方が悪かったんでしょうか今回はかなり足にきてますQ
脂肪しかないからきかないのかと思ったけど違ったよKあよかったニ

344 :
/* XXX should go away */
このコメントってどういう意味?

345 :
XXXをプロジェクトから追放しろ

346 :
>>345
ありがと。

347 :
ちげーよ。
XXX commentすなわちTODO comment

348 :
TODO と XXX は違う。
TODO はまだやる(べき)ことが残ってる状態を示す。
それに対して XXX はその部分が、残しておかないと動かないとかそういう理由で存在するけど、
ひどいコードだと書いた奴自身わかっているよ、とかそういう印。

349 :
http://en.wikipedia.org/wiki/Comment_%28computer_programming%29#Tags

350 :
http://www.catb.org/~esr/jargon/html/X/XXX.html

351 :
あい

352 :
適当にソース開いて1,2,3行ブバッと消してコンパイピして使ってみたらすげえ不安定になっちゃったべ

353 :
>>348
まあ中二病的発想だろうね
三年生ともなれば経済ってもんが大まかにでも分かって来て個々人が自分自身の為に精一杯頑張る事が
最も社会(彼らは地球・世界・市民といった表現が好きなようだが)の為になるって事に気付くもんだけど

354 :
Rよゴミみたいねレスをコピペして喜んでるバカはRよ

355 :
ゴミみたいね

356 :2013/09/22
ゴミ
TOP カテ一覧 スレ一覧 2ch元 削除依頼
Internet Mail System 総合スレ 3 (478)
Windows用の無料Xサーバが欲しい (430)
Motifは時代遅れか? (165)
タイピング速い奴らの数→ (217)
タイピング速い奴らの数→ (217)
デートを秋葉原でするツワモノの数→ (546)
--log9.info------------------
昭和特撮のアニメ化やリメイクはやめてくれ (276)
アニメ、マンガの中の特撮パロディ (406)
特撮オタクが語る70年代から80年代の我が青春 (521)
【昭和の】メカゴジラの逆襲【FW】 (856)
ウルトラマンが好きなのは悪い事なのか? (264)
金子ブラザース(光伸・吉延) (320)
   昭和特撮ベスト5 &&& (151)
消えた、消えそうな昭和特撮俳優 (579)
マイティ号VSアルファ号 (116)
真・一文字ずつ書いて特撮史年表を完成させるスレ (705)
【親はハリウッド】コスギ親子【子はSASUKEスポ1優勝】 (115)
特撮とヘウ゛ィメタが好きな人々 (127)
昔の特撮の方が恐ろしい感じが出てる (570)
DVD化希望の昭和特撮! (276)
【ISSA】昭和特撮が好きな有名人【品川祐】 (105)
子供に見せるのに最適の昭和特撮作品 (382)
--log55.com------------------
ココイチと言えばほうれん草カレーだろ?
生涯最低だったカレー
【極辛】大沢食堂11皿目【旧白山通り】【本駒込】
【大阪】宝石【サチコ】
和歌山カレー(バラカレー
カレーにゆで卵は常識!
笹塚「カレーの海賊」part1
CoCo壱番屋の経営哲学