スタート低レイヤー #0
-
Upload
kiwamu-okabe -
Category
Documents
-
view
2.265 -
download
1
description
Transcript of スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0スタート低レイヤー #0スタート低レイヤー #0スタート低レイヤー #0
Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
私は誰?私は誰?私は誰?私は誰?私は誰?
☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q
☆ ミラクル・リナックス勤務☆ ミラクル・リナックス勤務☆ ミラクル・リナックス勤務☆ ミラクル・リナックス勤務☆ ミラクル・リナックス勤務
☆ 前はコピー機のOSをNetBSDで作ってた☆ 前はコピー機のOSをNetBSDで作ってた☆ 前はコピー機のOSをNetBSDで作ってた☆ 前はコピー機のOSをNetBSDで作ってた☆ 前はコピー機のOSをNetBSDで作ってた
☆ デジタルサイネージのソフト開発してます☆ デジタルサイネージのソフト開発してます☆ デジタルサイネージのソフト開発してます☆ デジタルサイネージのソフト開発してます☆ デジタルサイネージのソフト開発してます
☆ OSSに興味のある{エンジニア,インターン}募集中です!☆ OSSに興味のある{エンジニア,インターン}募集中です!☆ OSSに興味のある{エンジニア,インターン}募集中です!☆ OSSに興味のある{エンジニア,インターン}募集中です!☆ OSSに興味のある{エンジニア,インターン}募集中です!
この勉強会は何?この勉強会は何?この勉強会は何?この勉強会は何?この勉強会は何?
☆ UNIXモドキのOSを理解するために☆ UNIXモドキのOSを理解するために☆ UNIXモドキのOSを理解するために☆ UNIXモドキのOSを理解するために☆ UNIXモドキのOSを理解するために
☆ printf関数の動作を題材にして☆ printf関数の動作を題材にして☆ printf関数の動作を題材にして☆ printf関数の動作を題材にして☆ printf関数の動作を題材にして
☆ NetBSDソースコードを読んだり☆ NetBSDソースコードを読んだり☆ NetBSDソースコードを読んだり☆ NetBSDソースコードを読んだり☆ NetBSDソースコードを読んだり
☆ NetBSD manpageを読んだり☆ NetBSD manpageを読んだり☆ NetBSD manpageを読んだり☆ NetBSD manpageを読んだり☆ NetBSD manpageを読んだり
する勉強会ですする勉強会ですする勉強会ですする勉強会ですする勉強会です
この勉強会の進め方この勉強会の進め方この勉強会の進め方この勉強会の進め方この勉強会の進め方
☆ backtraceを見て☆ backtraceを見て☆ backtraceを見て☆ backtraceを見て☆ backtraceを見て
☆ 興味のある箇所を参加者が調べて発表☆ 興味のある箇所を参加者が調べて発表☆ 興味のある箇所を参加者が調べて発表☆ 興味のある箇所を参加者が調べて発表☆ 興味のある箇所を参加者が調べて発表
☆ 調べる方法を有識者がフォロー☆ 調べる方法を有識者がフォロー☆ 調べる方法を有識者がフォロー☆ 調べる方法を有識者がフォロー☆ 調べる方法を有識者がフォロー
☆ printfの動作完全理解で勉強会卒業!☆ printfの動作完全理解で勉強会卒業!☆ printfの動作完全理解で勉強会卒業!☆ printfの動作完全理解で勉強会卒業!☆ printfの動作完全理解で勉強会卒業!
つまり打ち出の小槌ですヨ!つまり打ち出の小槌ですヨ!つまり打ち出の小槌ですヨ!つまり打ち出の小槌ですヨ!つまり打ち出の小槌ですヨ!
でもまたなんでprintfなの?でもまたなんでprintfなの?でもまたなんでprintfなの?でもまたなんでprintfなの?でもまたなんでprintfなの?
☆ OSの学び方とか聞いたことありますか?☆ OSの学び方とか聞いたことありますか?☆ OSの学び方とか聞いたことありますか?☆ OSの学び方とか聞いたことありますか?☆ OSの学び方とか聞いたことありますか?
☆ ぼくのケース := 会社入っていきなり仕事☆ ぼくのケース := 会社入っていきなり仕事☆ ぼくのケース := 会社入っていきなり仕事☆ ぼくのケース := 会社入っていきなり仕事☆ ぼくのケース := 会社入っていきなり仕事
☆ 独学でした... #orz☆ 独学でした... #orz☆ 独学でした... #orz☆ 独学でした... #orz☆ 独学でした... #orz
☆ 10年ぐらいNetBSDのお守り☆ 10年ぐらいNetBSDのお守り☆ 10年ぐらいNetBSDのお守り☆ 10年ぐらいNetBSDのお守り☆ 10年ぐらいNetBSDのお守り
☆ 皆さんには近道を通ってほしい!☆ 皆さんには近道を通ってほしい!☆ 皆さんには近道を通ってほしい!☆ 皆さんには近道を通ってほしい!☆ 皆さんには近道を通ってほしい!
ダメな例1: UNIX本読むダメな例1: UNIX本読むダメな例1: UNIX本読むダメな例1: UNIX本読むダメな例1: UNIX本読む
☆ 各部品については理解できる☆ 各部品については理解できる☆ 各部品については理解できる☆ 各部品については理解できる☆ 各部品については理解できる
☆ 部品と部品の繋がりがイメージできない☆ 部品と部品の繋がりがイメージできない☆ 部品と部品の繋がりがイメージできない☆ 部品と部品の繋がりがイメージできない☆ 部品と部品の繋がりがイメージできない
☆ よってkernel全体感も掴めない☆ よってkernel全体感も掴めない☆ よってkernel全体感も掴めない☆ よってkernel全体感も掴めない☆ よってkernel全体感も掴めない
☆ 細かい部品についてはコード読まないと☆ 細かい部品についてはコード読まないと☆ 細かい部品についてはコード読まないと☆ 細かい部品についてはコード読まないと☆ 細かい部品についてはコード読まないと
☆ 本読むのは良いけどそれだけじゃぁ...☆ 本読むのは良いけどそれだけじゃぁ...☆ 本読むのは良いけどそれだけじゃぁ...☆ 本読むのは良いけどそれだけじゃぁ...☆ 本読むのは良いけどそれだけじゃぁ...
ダメな例2: 自作OSダメな例2: 自作OSダメな例2: 自作OSダメな例2: 自作OSダメな例2: 自作OS
☆ 楽しいけど...☆ 楽しいけど...☆ 楽しいけど...☆ 楽しいけど...☆ 楽しいけど...
☆ x86セグメントとかイキナリ☆ x86セグメントとかイキナリ☆ x86セグメントとかイキナリ☆ x86セグメントとかイキナリ☆ x86セグメントとかイキナリ
☆ デバイス周りやVMなど下側ばかり☆ デバイス周りやVMなど下側ばかり☆ デバイス周りやVMなど下側ばかり☆ デバイス周りやVMなど下側ばかり☆ デバイス周りやVMなど下側ばかり
☆ バスドライバなど抽象まで辿りつけない☆ バスドライバなど抽象まで辿りつけない☆ バスドライバなど抽象まで辿りつけない☆ バスドライバなど抽象まで辿りつけない☆ バスドライバなど抽象まで辿りつけない
☆ 上に複雑なアプリケーションはいない☆ 上に複雑なアプリケーションはいない☆ 上に複雑なアプリケーションはいない☆ 上に複雑なアプリケーションはいない☆ 上に複雑なアプリケーションはいない
☆ 結果: 単なるデバドラ屋になりさがる...☆ 結果: 単なるデバドラ屋になりさがる...☆ 結果: 単なるデバドラ屋になりさがる...☆ 結果: 単なるデバドラ屋になりさがる...☆ 結果: 単なるデバドラ屋になりさがる...
ダメな例3: 起動プロセスを調べるダメな例3: 起動プロセスを調べるダメな例3: 起動プロセスを調べるダメな例3: 起動プロセスを調べるダメな例3: 起動プロセスを調べる
☆ プロセスの生成、光あれ!☆ プロセスの生成、光あれ!☆ プロセスの生成、光あれ!☆ プロセスの生成、光あれ!☆ プロセスの生成、光あれ!
☆ 過渡と定常☆ 過渡と定常☆ 過渡と定常☆ 過渡と定常☆ 過渡と定常
☆ 過渡ばかり覚える☆ 過渡ばかり覚える☆ 過渡ばかり覚える☆ 過渡ばかり覚える☆ 過渡ばかり覚える
☆ 定常 := 機器が動いている時☆ 定常 := 機器が動いている時☆ 定常 := 機器が動いている時☆ 定常 := 機器が動いている時☆ 定常 := 機器が動いている時
☆ アプリ結合で思考停止する人間になる☆ アプリ結合で思考停止する人間になる☆ アプリ結合で思考停止する人間になる☆ アプリ結合で思考停止する人間になる☆ アプリ結合で思考停止する人間になる
じゃあ何が近道なのさ!?じゃあ何が近道なのさ!?じゃあ何が近道なのさ!?じゃあ何が近道なのさ!?じゃあ何が近道なのさ!?
☆ フリーUNIXのソース全部読めってか?☆ フリーUNIXのソース全部読めってか?☆ フリーUNIXのソース全部読めってか?☆ フリーUNIXのソース全部読めってか?☆ フリーUNIXのソース全部読めってか?
☆ 無理だぽー☆ 無理だぽー☆ 無理だぽー☆ 無理だぽー☆ 無理だぽー
☆ シナリオが必要です☆ シナリオが必要です☆ シナリオが必要です☆ シナリオが必要です☆ シナリオが必要です
☆ 最も簡単そうなシナリオは?☆ 最も簡単そうなシナリオは?☆ 最も簡単そうなシナリオは?☆ 最も簡単そうなシナリオは?☆ 最も簡単そうなシナリオは?
☆ printf関数の動作じゃね☆ printf関数の動作じゃね☆ printf関数の動作じゃね☆ printf関数の動作じゃね☆ printf関数の動作じゃね
簡単なプログラムを作りました簡単なプログラムを作りました簡単なプログラムを作りました簡単なプログラムを作りました簡単なプログラムを作りました/* whileprint.c */#include <stdio.h>
int main(){ while(1) { printf("."); }}
/* whileprint.c */#include <stdio.h>
int main(){ while(1) { printf("."); }}
/* whileprint.c */#include <stdio.h>
int main(){ while(1) { printf("."); }}
/* whileprint.c */#include <stdio.h>
int main(){ while(1) { printf("."); }}
/* whileprint.c */#include <stdio.h>
int main(){
while(1) { printf("."); }}
このプログラムをシリアルコンソールから実行すれば、 PCのシリアルポートに"."をひたすら書くだけのはず。
このプログラムをシリアルコンソールから実行すれば、 PCのシリアルポートに"."をひたすら書くだけのはず。
このプログラムをシリアルコンソールから実行すれば、 PCのシリアルポートに"."をひたすら書くだけのはず。
このプログラムをシリアルコンソールから実行すれば、 PCのシリアルポートに"."をひたすら書くだけのはず。
このプログラムをシリアルコンソールから実行すれば、 PCのシリアルポートに"."をひたすら書くだけのはず。
x86のシリアルポートのしくみx86のシリアルポートのしくみx86のシリアルポートのしくみx86のシリアルポートのしくみx86のシリアルポートのしくみhttp://community.osdev.info/index.php?%28serial%29PC16550http://community.osdev.info/index.php?%28serial%29PC16550http://community.osdev.info/index.php?%28serial%29PC16550http://community.osdev.info/index.php?%28serial%29PC16550http://community.osdev.info/index.php?%28serial%29PC16550
I/Oポート0x3F8にASCIIコードを書けばOKI/Oポート0x3F8にASCIIコードを書けばOKI/Oポート0x3F8にASCIIコードを書けばOKI/Oポート0x3F8にASCIIコードを書けばOKI/Oポート0x3F8にASCIIコードを書けばOK
printf => I/Oポート の間は?printf => I/Oポート の間は?printf => I/Oポート の間は?printf => I/Oポート の間は?printf => I/Oポート の間は?
backtrace取ってみたよbacktrace取ってみたよbacktrace取ってみたよbacktrace取ってみたよbacktrace取ってみたよ
ソースコードの取得ソースコードの取得ソースコードの取得ソースコードの取得ソースコードの取得
CVSCVSCVSCVSCVS$ cat ~/.cvsrcdiff -cuupdate -dPcheckout -Pcvs -z3 -q$ cvs -d :pserver:[email protected]:/cvs/cvsroot loginLogging in to :pserver:[email protected]:2401/cvs/cvsrootCVS password: anoncvs$ cvs -d :pserver:[email protected]:/cvs/cvsroot co -r netbsd-6-0-1-RELEASE src
$ cat ~/.cvsrcdiff -cuupdate -dPcheckout -Pcvs -z3 -q$ cvs -d :pserver:[email protected]:/cvs/cvsroot loginLogging in to :pserver:[email protected]:2401/cvs/cvsrootCVS password: anoncvs$ cvs -d :pserver:[email protected]:/cvs/cvsroot co -r netbsd-6-0-1-RELEASE src
$ cat ~/.cvsrcdiff -cuupdate -dPcheckout -Pcvs -z3 -q$ cvs -d :pserver:[email protected]:/cvs/cvsroot loginLogging in to :pserver:[email protected]:2401/cvs/cvsrootCVS password: anoncvs$ cvs -d :pserver:[email protected]:/cvs/cvsroot co -r netbsd-6-0-1-RELEASE src
$ cat ~/.cvsrcdiff -cuupdate -dPcheckout -Pcvs -z3 -q$ cvs -d :pserver:[email protected]:/cvs/cvsroot loginLogging in to :pserver:[email protected]:2401/cvs/cvsrootCVS password: anoncvs$ cvs -d :pserver:[email protected]:/cvs/cvsroot co -r netbsd-6-0-1-RELEASE src
$ cat ~/.cvsrcdiff -cuupdate -dPcheckout -Pcvs -z3 -q$ cvs -d :pserver:[email protected]:/cvs/cvsroot loginLogging in to :pserver:[email protected]:2401/cvs/cvsrootCVS password: anoncvs$ cvs -d :pserver:[email protected]:/cvs/cvsroot co -r netbsd-6-0-1-RELEASE src
GitGitGitGitGit$ git clone git://github.com/jsonn/src.git$ git checkout -b netbsd_6_0 remotes/origin/netbsd_6_0$ git clone git://github.com/jsonn/src.git$ git checkout -b netbsd_6_0 remotes/origin/netbsd_6_0$ git clone git://github.com/jsonn/src.git$ git checkout -b netbsd_6_0 remotes/origin/netbsd_6_0$ git clone git://github.com/jsonn/src.git$ git checkout -b netbsd_6_0 remotes/origin/netbsd_6_0$ git clone git://github.com/jsonn/src.git$ git checkout -b netbsd_6_0 remotes/origin/netbsd_6_0
読むべきソースコードの在処読むべきソースコードの在処読むべきソースコードの在処読むべきソースコードの在処読むべきソースコードの在処src/lib/libc := libcsrc/libexec/ld.elf_so := 動的リンカsrc/sys := kernel全体src/sys/sys := kernel内APIヘッダsrc/sys/arch/x86 := i386/amd64共通機種依存コードsrc/sys/arch/i386 := i386アーキティクチャ機種依存コードsrc/sys/dev := デバイスドライバsrc/sys/kern := kernelコアルーチンsrc/sys/uvm := バーチャルメモリ
src/lib/libc := libcsrc/libexec/ld.elf_so := 動的リンカsrc/sys := kernel全体src/sys/sys := kernel内APIヘッダsrc/sys/arch/x86 := i386/amd64共通機種依存コードsrc/sys/arch/i386 := i386アーキティクチャ機種依存コードsrc/sys/dev := デバイスドライバsrc/sys/kern := kernelコアルーチンsrc/sys/uvm := バーチャルメモリ
src/lib/libc := libcsrc/libexec/ld.elf_so := 動的リンカsrc/sys := kernel全体src/sys/sys := kernel内APIヘッダsrc/sys/arch/x86 := i386/amd64共通機種依存コードsrc/sys/arch/i386 := i386アーキティクチャ機種依存コードsrc/sys/dev := デバイスドライバsrc/sys/kern := kernelコアルーチンsrc/sys/uvm := バーチャルメモリ
src/lib/libc := libcsrc/libexec/ld.elf_so := 動的リンカsrc/sys := kernel全体src/sys/sys := kernel内APIヘッダsrc/sys/arch/x86 := i386/amd64共通機種依存コードsrc/sys/arch/i386 := i386アーキティクチャ機種依存コードsrc/sys/dev := デバイスドライバsrc/sys/kern := kernelコアルーチンsrc/sys/uvm := バーチャルメモリ
src/lib/libc := libcsrc/libexec/ld.elf_so := 動的リンカsrc/sys := kernel全体src/sys/sys := kernel内APIヘッダsrc/sys/arch/x86 := i386/amd64共通機種依存コードsrc/sys/arch/i386 := i386アーキティクチャ機種依存コードsrc/sys/dev := デバイスドライバsrc/sys/kern := kernelコアルーチンsrc/sys/uvm := バーチャルメモリ
他のディレクトリはおいおい説明します他のディレクトリはおいおい説明します他のディレクトリはおいおい説明します他のディレクトリはおいおい説明します他のディレクトリはおいおい説明します
ドキュメントはmanpageドキュメントはmanpageドキュメントはmanpageドキュメントはmanpageドキュメントはmanpage
http://netbsd.gw.com/cgi-bin/man-cgihttp://netbsd.gw.com/cgi-bin/man-cgihttp://netbsd.gw.com/cgi-bin/man-cgihttp://netbsd.gw.com/cgi-bin/man-cgihttp://netbsd.gw.com/cgi-bin/man-cgi
http://netbsdman.masterq.net/http://netbsdman.masterq.net/http://netbsdman.masterq.net/http://netbsdman.masterq.net/http://netbsdman.masterq.net/
翻訳環境構築中翻訳環境構築中翻訳環境構築中翻訳環境構築中翻訳環境構築中
開発環境: build.sh開発環境: build.sh開発環境: build.sh開発環境: build.sh開発環境: build.sh
以下の手順でkernelをコンパイルできます以下の手順でkernelをコンパイルできます以下の手順でkernelをコンパイルできます以下の手順でkernelをコンパイルできます以下の手順でkernelをコンパイルできます$ cd src/$ ./build.sh -T obj/tooldir -m i386 tools$ cd sys/arch/i386/conf/$ ../../../../obj/tooldir/bin/nbconfig GENERIC$ cd ../compile/GENERIC/$ ../../../../../obj/tooldir/bin/nbmake-i386 depend$ ../../../../../obj/tooldir/bin/nbmake-i386$ file netbsdnetbsd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for NetBSD 6.0, not stripped
$ cd src/$ ./build.sh -T obj/tooldir -m i386 tools$ cd sys/arch/i386/conf/$ ../../../../obj/tooldir/bin/nbconfig GENERIC$ cd ../compile/GENERIC/$ ../../../../../obj/tooldir/bin/nbmake-i386 depend$ ../../../../../obj/tooldir/bin/nbmake-i386$ file netbsdnetbsd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for NetBSD 6.0, not stripped
$ cd src/$ ./build.sh -T obj/tooldir -m i386 tools$ cd sys/arch/i386/conf/$ ../../../../obj/tooldir/bin/nbconfig GENERIC$ cd ../compile/GENERIC/$ ../../../../../obj/tooldir/bin/nbmake-i386 depend$ ../../../../../obj/tooldir/bin/nbmake-i386$ file netbsdnetbsd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for NetBSD 6.0, not stripped
$ cd src/$ ./build.sh -T obj/tooldir -m i386 tools$ cd sys/arch/i386/conf/$ ../../../../obj/tooldir/bin/nbconfig GENERIC$ cd ../compile/GENERIC/$ ../../../../../obj/tooldir/bin/nbmake-i386 depend$ ../../../../../obj/tooldir/bin/nbmake-i386$ file netbsdnetbsd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for NetBSD 6.0, not stripped
$ cd src/$ ./build.sh -T obj/tooldir -m i386 tools$ cd sys/arch/i386/conf/$ ../../../../obj/tooldir/bin/nbconfig GENERIC$ cd ../compile/GENERIC/$ ../../../../../obj/tooldir/bin/nbmake-i386 depend$ ../../../../../obj/tooldir/bin/nbmake-i386$ file netbsdnetbsd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for NetBSD 6.0, not stripped
コードをちょっと変えて動作を見たいときどうぞコードをちょっと変えて動作を見たいときどうぞコードをちょっと変えて動作を見たいときどうぞコードをちょっと変えて動作を見たいときどうぞコードをちょっと変えて動作を見たいときどうぞ
実行環境: NetBSD + virtualbox実行環境: NetBSD + virtualbox実行環境: NetBSD + virtualbox実行環境: NetBSD + virtualbox実行環境: NetBSD + virtualbox
isoでvirtualboxにNetBSDをインストールisoでvirtualboxにNetBSDをインストールisoでvirtualboxにNetBSDをインストールisoでvirtualboxにNetBSDをインストールisoでvirtualboxにNetBSDをインストールftp://iso.jp.netbsd.org/pub/NetBSD/iso/6.0.1/NetBSD-6.0.1-i386.isoftp://iso.jp.netbsd.org/pub/NetBSD/iso/6.0.1/NetBSD-6.0.1-i386.isoftp://iso.jp.netbsd.org/pub/NetBSD/iso/6.0.1/NetBSD-6.0.1-i386.isoftp://iso.jp.netbsd.org/pub/NetBSD/iso/6.0.1/NetBSD-6.0.1-i386.isoftp://iso.jp.netbsd.org/pub/NetBSD/iso/6.0.1/NetBSD-6.0.1-i386.iso
さっきコンパイルしたkernelを/netbsd.testの名前でvirtualboxインスタンスに置くさっきコンパイルしたkernelを/netbsd.testの名前でvirtualboxインスタンスに置くさっきコンパイルしたkernelを/netbsd.testの名前でvirtualboxインスタンスに置くさっきコンパイルしたkernelを/netbsd.testの名前でvirtualboxインスタンスに置くさっきコンパイルしたkernelを/netbsd.testの名前でvirtualboxインスタンスに置く
以下のように/boot.cfgを設定以下のように/boot.cfgを設定以下のように/boot.cfgを設定以下のように/boot.cfgを設定以下のように/boot.cfgを設定menu=Boot normally:rndseed /var/db/entropy-file;boot netbsdmenu=Boot ddb:rndseed /var/db/entropy-file;boot netbsd.test -dmenu=Boot single user:rndseed /var/db/entropy-file;boot netbsd -smenu=Drop to boot prompt:promptdefault=1timeout=5clear=1
menu=Boot normally:rndseed /var/db/entropy-file;boot netbsdmenu=Boot ddb:rndseed /var/db/entropy-file;boot netbsd.test -dmenu=Boot single user:rndseed /var/db/entropy-file;boot netbsd -smenu=Drop to boot prompt:promptdefault=1timeout=5clear=1
menu=Boot normally:rndseed /var/db/entropy-file;boot netbsdmenu=Boot ddb:rndseed /var/db/entropy-file;boot netbsd.test -dmenu=Boot single user:rndseed /var/db/entropy-file;boot netbsd -smenu=Drop to boot prompt:promptdefault=1timeout=5clear=1
menu=Boot normally:rndseed /var/db/entropy-file;boot netbsdmenu=Boot ddb:rndseed /var/db/entropy-file;boot netbsd.test -dmenu=Boot single user:rndseed /var/db/entropy-file;boot netbsd -smenu=Drop to boot prompt:promptdefault=1timeout=5clear=1
menu=Boot normally:rndseed /var/db/entropy-file;boot netbsdmenu=Boot ddb:rndseed /var/db/entropy-file;boot netbsd.test -dmenu=Boot single user:rndseed /var/db/entropy-file;boot netbsd -smenu=Drop to boot prompt:promptdefault=1timeout=5clear=1
virtualboxでシリアルコンソールvirtualboxでシリアルコンソールvirtualboxでシリアルコンソールvirtualboxでシリアルコンソールvirtualboxでシリアルコンソールhttp://www.reactos.org/wiki/VirtualBoxhttp://www.reactos.org/wiki/VirtualBoxhttp://www.reactos.org/wiki/VirtualBoxhttp://www.reactos.org/wiki/VirtualBoxhttp://www.reactos.org/wiki/VirtualBox
virtualboxのシリアルを名前付きpipeに設定virtualboxのシリアルを名前付きpipeに設定virtualboxのシリアルを名前付きpipeに設定virtualboxのシリアルを名前付きpipeに設定virtualboxのシリアルを名前付きpipeに設定http://www.cetus-net.org/bsd/i386/serial.htmlhttp://www.cetus-net.org/bsd/i386/serial.htmlhttp://www.cetus-net.org/bsd/i386/serial.htmlhttp://www.cetus-net.org/bsd/i386/serial.htmlhttp://www.cetus-net.org/bsd/i386/serial.html
NetBSD側でシリアルコンソールを有効にNetBSD側でシリアルコンソールを有効にNetBSD側でシリアルコンソールを有効にNetBSD側でシリアルコンソールを有効にNetBSD側でシリアルコンソールを有効に# diff /etc/ttys.back /etc/ttys13c13< tty00 "/usr/libexec/getty std.9600" unknown off secure---> tty00 "/usr/libexec/getty std.9600" vt100 on secure local
# diff /etc/ttys.back /etc/ttys13c13< tty00 "/usr/libexec/getty std.9600" unknown off secure---> tty00 "/usr/libexec/getty std.9600" vt100 on secure local
# diff /etc/ttys.back /etc/ttys13c13< tty00 "/usr/libexec/getty std.9600" unknown off secure---> tty00 "/usr/libexec/getty std.9600" vt100 on secure local
# diff /etc/ttys.back /etc/ttys13c13< tty00 "/usr/libexec/getty std.9600" unknown off secure---> tty00 "/usr/libexec/getty std.9600" vt100 on secure local
# diff /etc/ttys.back /etc/ttys13c13< tty00 "/usr/libexec/getty std.9600" unknown off secure---> tty00 "/usr/libexec/getty std.9600" vt100 on secure local
ホストOSから名前付きpipeを開くホストOSから名前付きpipeを開くホストOSから名前付きpipeを開くホストOSから名前付きpipeを開くホストOSから名前付きpipeを開く$ socat unix-client:/hogehoge/com0.pipe stdioNetBSD/i386 (Amnesiac) (tty00)
login:
$ socat unix-client:/hogehoge/com0.pipe stdioNetBSD/i386 (Amnesiac) (tty00)
login:
$ socat unix-client:/hogehoge/com0.pipe stdioNetBSD/i386 (Amnesiac) (tty00)
login:
$ socat unix-client:/hogehoge/com0.pipe stdioNetBSD/i386 (Amnesiac) (tty00)
login:
$ socat unix-client:/hogehoge/com0.pipe stdioNetBSD/i386 (Amnesiac) (tty00)
login:
何もかも解らない時どうすれば...何もかも解らない時どうすれば...何もかも解らない時どうすれば...何もかも解らない時どうすれば...何もかも解らない時どうすれば...static intvn_write(file_t *fp, off_t *offset, struct uio *uio, kauth_cred_t cred, int flags){
struct vnode *vp = (struct vnode *)fp->f_data;int count, error, ioflag, fflag;
ioflag = IO_ADV_ENCODE(fp->f_advice) | IO_UNIT;fflag = fp->f_flag;if (vp->v_type == VREG && (fflag & O_APPEND))
ioflag |= IO_APPEND;if (fflag & FNONBLOCK)
ioflag |= IO_NDELAY;if (fflag & FFSYNC || (vp->v_mount && (vp->v_mount->mnt_flag &
MNT_SYNCHRONOUS)))ioflag |= IO_SYNC;
else if (fflag & FDSYNC)ioflag |= IO_DSYNC;
if (fflag & FALTIO)ioflag |= IO_ALTSEMANTICS;
if (fflag & FDIRECT)ioflag |= IO_DIRECT;
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
static intvn_write(file_t *fp, off_t *offset, struct uio *uio, kauth_cred_t cred, int flags){
struct vnode *vp = (struct vnode *)fp->f_data;int count, error, ioflag, fflag;
ioflag = IO_ADV_ENCODE(fp->f_advice) | IO_UNIT;fflag = fp->f_flag;if (vp->v_type == VREG && (fflag & O_APPEND))
ioflag |= IO_APPEND;if (fflag & FNONBLOCK)
ioflag |= IO_NDELAY;if (fflag & FFSYNC || (vp->v_mount && (vp->v_mount->mnt_flag &
MNT_SYNCHRONOUS)))ioflag |= IO_SYNC;
else if (fflag & FDSYNC)ioflag |= IO_DSYNC;
if (fflag & FALTIO)ioflag |= IO_ALTSEMANTICS;
if (fflag & FDIRECT)ioflag |= IO_DIRECT;
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
static intvn_write(file_t *fp, off_t *offset, struct uio *uio, kauth_cred_t cred, int flags){
struct vnode *vp = (struct vnode *)fp->f_data;int count, error, ioflag, fflag;
ioflag = IO_ADV_ENCODE(fp->f_advice) | IO_UNIT;fflag = fp->f_flag;if (vp->v_type == VREG && (fflag & O_APPEND))
ioflag |= IO_APPEND;if (fflag & FNONBLOCK)
ioflag |= IO_NDELAY;if (fflag & FFSYNC || (vp->v_mount && (vp->v_mount->mnt_flag &
MNT_SYNCHRONOUS)))ioflag |= IO_SYNC;
else if (fflag & FDSYNC)ioflag |= IO_DSYNC;
if (fflag & FALTIO)ioflag |= IO_ALTSEMANTICS;
if (fflag & FDIRECT)ioflag |= IO_DIRECT;
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
static intvn_write(file_t *fp, off_t *offset, struct uio *uio, kauth_cred_t cred, int flags){
struct vnode *vp = (struct vnode *)fp->f_data;int count, error, ioflag, fflag;
ioflag = IO_ADV_ENCODE(fp->f_advice) | IO_UNIT;fflag = fp->f_flag;if (vp->v_type == VREG && (fflag & O_APPEND))
ioflag |= IO_APPEND;if (fflag & FNONBLOCK)
ioflag |= IO_NDELAY;if (fflag & FFSYNC || (vp->v_mount && (vp->v_mount->mnt_flag &
MNT_SYNCHRONOUS)))ioflag |= IO_SYNC;
else if (fflag & FDSYNC)ioflag |= IO_DSYNC;
if (fflag & FALTIO)ioflag |= IO_ALTSEMANTICS;
if (fflag & FDIRECT)ioflag |= IO_DIRECT;
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
static intvn_write(file_t *fp, off_t *offset, struct uio *uio, kauth_cred_t cred, int flags){
struct vnode *vp = (struct vnode *)fp->f_data;int count, error, ioflag, fflag;
ioflag = IO_ADV_ENCODE(fp->f_advice) | IO_UNIT;fflag = fp->f_flag;if (vp->v_type == VREG && (fflag & O_APPEND))
ioflag |= IO_APPEND;if (fflag & FNONBLOCK)
ioflag |= IO_NDELAY;if (fflag & FFSYNC || (vp->v_mount && (vp->v_mount->mnt_flag &
MNT_SYNCHRONOUS)))ioflag |= IO_SYNC;
else if (fflag & FDSYNC)ioflag |= IO_DSYNC;
if (fflag & FALTIO)ioflag |= IO_ALTSEMANTICS;
if (fflag & FDIRECT)ioflag |= IO_DIRECT;
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
1. タグジャンプ1. タグジャンプ1. タグジャンプ1. タグジャンプ1. タグジャンプ
以下どれかを使うとソースコード追いやすい以下どれかを使うとソースコード追いやすい以下どれかを使うとソースコード追いやすい以下どれかを使うとソースコード追いやすい以下どれかを使うとソースコード追いやすい
☆ GNU GLOBAL☆ GNU GLOBAL☆ GNU GLOBAL☆ GNU GLOBAL☆ GNU GLOBAL
http://www.gnu.org/software/global/http://www.gnu.org/software/global/http://www.gnu.org/software/global/http://www.gnu.org/software/global/http://www.gnu.org/software/global/
☆ Exuberant Ctags☆ Exuberant Ctags☆ Exuberant Ctags☆ Exuberant Ctags☆ Exuberant Ctags
http://ctags.sourceforge.net/http://ctags.sourceforge.net/http://ctags.sourceforge.net/http://ctags.sourceforge.net/http://ctags.sourceforge.net/
>>>>>
2. NetBSDドキュメント2. NetBSDドキュメント2. NetBSDドキュメント2. NetBSDドキュメント2. NetBSDドキュメント
☆ NetBSD Documentationのkernel章☆ NetBSD Documentationのkernel章☆ NetBSD Documentationのkernel章☆ NetBSD Documentationのkernel章☆ NetBSD Documentationのkernel章http://www.netbsd.org/docs/http://www.netbsd.org/docs/http://www.netbsd.org/docs/http://www.netbsd.org/docs/http://www.netbsd.org/docs/
☆ NetBSD Documentation: Kernel☆ NetBSD Documentation: Kernel☆ NetBSD Documentation: Kernel☆ NetBSD Documentation: Kernel☆ NetBSD Documentation: Kernelhttp://www.netbsd.org/docs/kernel/http://www.netbsd.org/docs/kernel/http://www.netbsd.org/docs/kernel/http://www.netbsd.org/docs/kernel/http://www.netbsd.org/docs/kernel/
☆ NetBSD Wikiのkernel関連☆ NetBSD Wikiのkernel関連☆ NetBSD Wikiのkernel関連☆ NetBSD Wikiのkernel関連☆ NetBSD Wikiのkernel関連http://wiki.netbsd.org/wiki/sitemap/http://wiki.netbsd.org/wiki/sitemap/http://wiki.netbsd.org/wiki/sitemap/http://wiki.netbsd.org/wiki/sitemap/http://wiki.netbsd.org/wiki/sitemap/
☆ NetBSD source code style guide☆ NetBSD source code style guide☆ NetBSD source code style guide☆ NetBSD source code style guide☆ NetBSD source code style guidehttp://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=1.49&content-type=text/x-cvsweb-markup&only_with_tag=MAINhttp://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=1.49&content-type=text/x-cvsweb-markup&only_with_tag=MAINhttp://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=1.49&content-type=text/x-cvsweb-markup&only_with_tag=MAINhttp://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=1.49&content-type=text/x-cvsweb-markup&only_with_tag=MAINhttp://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=1.49&content-type=text/x-cvsweb-markup&only_with_tag=MAIN
>>>>>
3. 本3. 本3. 本3. 本3. 本
☆ 4.4BSDの設計と実装☆ 4.4BSDの設計と実装☆ 4.4BSDの設計と実装☆ 4.4BSDの設計と実装☆ 4.4BSDの設計と実装http://www.amazon.co.jp/dp/4756143466http://www.amazon.co.jp/dp/4756143466http://www.amazon.co.jp/dp/4756143466http://www.amazon.co.jp/dp/4756143466http://www.amazon.co.jp/dp/4756143466
☆ BSDカーネルの設計と実装☆ BSDカーネルの設計と実装☆ BSDカーネルの設計と実装☆ BSDカーネルの設計と実装☆ BSDカーネルの設計と実装http://www.amazon.co.jp/dp/4756146791http://www.amazon.co.jp/dp/4756146791http://www.amazon.co.jp/dp/4756146791http://www.amazon.co.jp/dp/4756146791http://www.amazon.co.jp/dp/4756146791
☆ 386BSDカーネルソースコードの秘密☆ 386BSDカーネルソースコードの秘密☆ 386BSDカーネルソースコードの秘密☆ 386BSDカーネルソースコードの秘密☆ 386BSDカーネルソースコードの秘密http://www.amazon.co.jp/dp/4756120423http://www.amazon.co.jp/dp/4756120423http://www.amazon.co.jp/dp/4756120423http://www.amazon.co.jp/dp/4756120423http://www.amazon.co.jp/dp/4756120423
>>>>>
みなさんへのお願いみなさんへのお願いみなさんへのお願いみなさんへのお願いみなさんへのお願い
勉強会の運営には皆さんの協力が必要です!勉強会の運営には皆さんの協力が必要です!勉強会の運営には皆さんの協力が必要です!勉強会の運営には皆さんの協力が必要です!勉強会の運営には皆さんの協力が必要です!
☆ 好きな箇所を読んで発表☆ 好きな箇所を読んで発表☆ 好きな箇所を読んで発表☆ 好きな箇所を読んで発表☆ 好きな箇所を読んで発表
☆ NetBSD manの翻訳☆ NetBSD manの翻訳☆ NetBSD manの翻訳☆ NetBSD manの翻訳☆ NetBSD manの翻訳http://netbsdman.masterq.net/http://netbsdman.masterq.net/http://netbsdman.masterq.net/http://netbsdman.masterq.net/http://netbsdman.masterq.net/
☆ Metasepiプロジェクトへの参加☆ Metasepiプロジェクトへの参加☆ Metasepiプロジェクトへの参加☆ Metasepiプロジェクトへの参加☆ Metasepiプロジェクトへの参加http://metasepi.masterq.net/http://metasepi.masterq.net/http://metasepi.masterq.net/http://metasepi.masterq.net/http://metasepi.masterq.net/
>>>>>
ということでソース読みましょう!ということでソース読みましょう!ということでソース読みましょう!ということでソース読みましょう!ということでソース読みましょう!
☆ printf関数から読む☆ printf関数から読む☆ printf関数から読む☆ printf関数から読む☆ printf関数から読む
☆ I/Oポートアクセスから読む☆ I/Oポートアクセスから読む☆ I/Oポートアクセスから読む☆ I/Oポートアクセスから読む☆ I/Oポートアクセスから読む
あなたはどっち?あなたはどっち?あなたはどっち?あなたはどっち?あなたはどっち?
>>>>>
参考資料参考資料参考資料参考資料参考資料
☆ 本勉強会まとめサイト☆ 本勉強会まとめサイト☆ 本勉強会まとめサイト☆ 本勉強会まとめサイト☆ 本勉強会まとめサイトhttp://start_printf.masterq.net/http://start_printf.masterq.net/http://start_printf.masterq.net/http://start_printf.masterq.net/http://start_printf.masterq.net/
>>>>>