1read 100read
2013年02月UNIX365: お前ら*BSDのカーネルをハックしますか? (355)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
:::viクローン nvi::: (249)
【地球シミュレータ】NECのスパコン【SXシリーズ】 (413)
NetBSDをデスクトップ環境として常用するスレ (312)
Exim (390)
:::viクローン nvi::: (249)
Theo de Raadt (237)
お前ら*BSDのカーネルをハックしますか?
- 1 :01/10/17 〜 最終レス :2012/02/28
- これから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 の方がいいかな…。
- 100read 1read
- 1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
日本人*BSD developerを誉め称えるスレ (303)
UNIXを考えるスレ及び巨R画像貼り付けスレ (404)
【BAKA】バッドノウハウについて語るスレ 3 (213)
☆ 古いPCを復活させよう (203)
こんなStallmanは嫌だ 第6サティアン (605)
お前ら*BSDのカーネルをハックしますか? (355)
--log9.info------------------
張遼が来るぞー! (211)
劉備に仕えた武将 (245)
曹操に仕えた武将 (244)
魏は統一可能だったのか (415)
日本で三国志ドラマ化は不可能なのか (784)
○○ですが何か? (613)
(´・ω・`)をつけてセリフの勢いを無くすスレ三戦 (720)
【新説三国志】僕はこう考える (205)
【◆O.K.H.I.T.】周の後半春秋戦国2【五覇七雄】 (204)
【扶余】 高句麗 【広開土王碑】 (240)
アーサー王伝説総合スレ (397)
中国ものが好きなのに、金庸の小説が面白くなかった (212)
><中国英雄板新聞>< (262)
淳于瓊について語ろう (235)
なぜK-1に中国拳法かの使い手は出場しないの? (268)
(`へ´)< 霍去病・衛青 総合スレ >(´〜`ヽ) (211)
--log55.com------------------
★2ch.scは何故失敗したのか
★クロール批判要望スレ
★削ジェンヌに文句ある人集合
★迷惑行為報告担当 - 小さな親切募集中 2
★2ch.scへの要望スレ Part3
★かっこう観測所
★スレ立て人キャップ
★2ch.scニュース系板観測所