SlideShare a Scribd company logo
Enviar pesquisa
Carregar
スタート低レイヤー #0
Denunciar
Kiwamu Okabe
Software Engineer at SELTECH CORPORATION em SELTECH CORPORATION
Seguir
•
16 gostaram
•
3,134 visualizações
1
de
27
スタート低レイヤー #0
•
16 gostaram
•
3,134 visualizações
Baixar agora
Baixar para ler offline
Denunciar
Kiwamu Okabe
Software Engineer at SELTECH CORPORATION em SELTECH CORPORATION
Seguir
Recomendados
Aio
Masaaki HIROSE
4.7K visualizações
•
37 slides
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
Hirotaka Kawata
4.3K visualizações
•
47 slides
virtio勉強会 #1 「virtioの基本的なところ(DRAFT版)」
Naoya Kaneko
8.9K visualizações
•
38 slides
芸人を 目指すわけでは ないけれど…(n575)
Masataka Kondo
701 visualizações
•
26 slides
Casperjsのインストール
Kohei Misu
426 visualizações
•
7 slides
PECL operator で演算子オーバーロード
y-uti
1.4K visualizações
•
28 slides
Mais conteúdo relacionado
Mais procurados
Cvim saisentan 半精度浮動小数点数 half
tomoaki0705
4.3K visualizações
•
41 slides
Node 学園祭 2012 用
Rei Kawai
2.6K visualizações
•
9 slides
2012 11-17.nagoyapm08
IWATA Susumu
2K visualizações
•
73 slides
PECL を数えてみた
y-uti
4K visualizações
•
13 slides
2012-09-09.nagoyapm07
IWATA Susumu
849 visualizações
•
44 slides
C83 λカ娘の販促にやってきました
Kiwamu Okabe
1.4K visualizações
•
13 slides
Mais procurados
(20)
Cvim saisentan 半精度浮動小数点数 half
tomoaki0705
•
4.3K visualizações
Node 学園祭 2012 用
Rei Kawai
•
2.6K visualizações
2012 11-17.nagoyapm08
IWATA Susumu
•
2K visualizações
PECL を数えてみた
y-uti
•
4K visualizações
2012-09-09.nagoyapm07
IWATA Susumu
•
849 visualizações
C83 λカ娘の販促にやってきました
Kiwamu Okabe
•
1.4K visualizações
Hello Dark-Side C# (Part. 1)
Yuto Takei
•
1.2K visualizações
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
Yasuhiro Ishii
•
3K visualizações
Androidとfpgaを高速fifo通信させちゃう
ksk sue
•
5.6K visualizações
たのしいNode.js
ishiki-takai
•
1.7K visualizações
あるキャッシュメモリの話
nullnilaki
•
3.8K visualizações
1を書いても0が読める!?隠れた重要命令INVLPG
uchan_nos
•
413 visualizações
あるmmapの話
nullnilaki
•
4.6K visualizações
Kernel fcache-bug
MITSUNARI Shigeo
•
6.3K visualizações
VAEで遊んでみる
超史 宮崎
•
4K visualizações
HaskellではじめるCortex-M3組込みプログラミング
Kiwamu Okabe
•
2.8K visualizações
Node native ext
裕士 常田
•
252 visualizações
SECCON CTF 福岡大会の中性子問題の解説
in0o0o0
•
521 visualizações
Xcodeでmrubyをステップ実行してみた
firewood
•
1.1K visualizações
What is Metasepi?
Kiwamu Okabe
•
2K visualizações
Destaque
Haskell超初心者勉強会11
Takashi Kawachi
938 visualizações
•
24 slides
Programming Haskell Chapter8
Kousuke Ruichi
4.1K visualizações
•
77 slides
Programming haskell chapter10
Kousuke Ruichi
3.8K visualizações
•
58 slides
第3章 型とクラス
Yasuaki Takebe
2.3K visualizações
•
19 slides
Purescript with Monad
Kousuke Ruichi
13.4K visualizações
•
60 slides
An engineer uses monads
Kousuke Ruichi
5.9K visualizações
•
67 slides
Destaque
(9)
Haskell超初心者勉強会11
Takashi Kawachi
•
938 visualizações
Programming Haskell Chapter8
Kousuke Ruichi
•
4.1K visualizações
Programming haskell chapter10
Kousuke Ruichi
•
3.8K visualizações
第3章 型とクラス
Yasuaki Takebe
•
2.3K visualizações
Purescript with Monad
Kousuke Ruichi
•
13.4K visualizações
An engineer uses monads
Kousuke Ruichi
•
5.9K visualizações
ゆるふわなHaskell話
Kousuke Ruichi
•
4.5K visualizações
並行プログラミングと継続モナド
Kousuke Ruichi
•
9K visualizações
Haskell Day2012 - 参照透過性とは何だったのか
Kousuke Ruichi
•
15K visualizações
Similar a スタート低レイヤー #0
InfiniBand on Debian
Taisuke Yamada
5.5K visualizações
•
61 slides
Ansible2.0と実用例
OSSラボ株式会社
5K visualizações
•
14 slides
A story of porting OpenBSD/luna88k
Kenji Aoyama
2.7K visualizações
•
41 slides
dofilewrite and vn_write
kusabanachi
612 visualizações
•
43 slides
どこでも動くゲームを作るためのベタープラクティス
5mingame2
5.4K visualizações
•
60 slides
NetBSD/evbarm on Raspberry Pi
tokudahiroshi
2.3K visualizações
•
8 slides
Similar a スタート低レイヤー #0
(20)
InfiniBand on Debian
Taisuke Yamada
•
5.5K visualizações
Ansible2.0と実用例
OSSラボ株式会社
•
5K visualizações
A story of porting OpenBSD/luna88k
Kenji Aoyama
•
2.7K visualizações
dofilewrite and vn_write
kusabanachi
•
612 visualizações
どこでも動くゲームを作るためのベタープラクティス
5mingame2
•
5.4K visualizações
NetBSD/evbarm on Raspberry Pi
tokudahiroshi
•
2.3K visualizações
Xbyakの紹介とその周辺
MITSUNARI Shigeo
•
7.8K visualizações
2011.09.18 v7から始めるunix まとめ
Makiko Konoshima
•
1.1K visualizações
JIT のコードを読んでみた
y-uti
•
10.1K visualizações
Pdp11 on-fpga
magoroku Yamamoto
•
2.7K visualizações
TripleOの光と闇
Manabu Ori
•
9.3K visualizações
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
inaz2
•
6.8K visualizações
Programming camp Codereading
Hiro Yoshioka
•
461 visualizações
initramfsについて
Kazuhiro Nishiyama
•
14.3K visualizações
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Mr. Vengineer
•
2K visualizações
Riscv+fpga200606
たけおか しょうぞう
•
670 visualizações
about DakotagUI
Etsuji Nomura
•
674 visualizações
20170527 inside .NET Core on Linux
Takayoshi Tanaka
•
1.5K visualizações
Lxc cf201207-presen
Kouhei Maeda
•
1.3K visualizações
Rubyで創るOpenFlowネットワーク - LLまつり
Yuya Rin
•
18.4K visualizações
スタート低レイヤー #0
1.
スタート低レイヤー #0 Kiwamu
Okabe
2.
私は誰? ☆ Twitter: @master_q ☆
ミラクル・リナックス勤務 ☆ 前はコピー機のOSをNetBSDで作ってた ☆ デジタルサイネージのソフト開発してます ☆ OSSに興味のある{エンジニア,インターン} 募集中です!
3.
この勉強会は何? ☆ UNIXモドキのOSを理解するために ☆ printf関数の動作を題材にして ☆
NetBSDソースコードを読んだり ☆ NetBSD manpageを読んだり する勉強会です
4.
この勉強会の進め方 ☆ backtraceを見て ☆ 興味のある箇所を参加者が調べて発表 ☆
調べる方法を有識者がフォロー ☆ printfの動作完全理解で勉強会卒業!
5.
つまり打ち出の小槌ですヨ!
6.
でもまたなんでprintfなの? ☆ OSの学び方とか聞いたことありますか? ☆ ぼくのケース
:= 会社入っていきなり仕事 ☆ 独学でした... #orz ☆ 10年ぐらいNetBSDのお守り ☆ 皆さんには近道を通ってほしい!
7.
ダメな例1: UNIX本読む ☆ 各部品については理解できる ☆
部品と部品の繋がりがイメージできない ☆ よってkernel全体感も掴めない ☆ 細かい部品についてはコード読まないと ☆ 本読むのは良いけどそれだけじゃぁ...
8.
ダメな例2: 自作OS ☆ 楽しいけど... ☆
x86セグメントとかイキナリ ☆ デバイス周りやVMなど下側ばかり ☆ バスドライバなど抽象まで辿りつけない ☆ 上に複雑なアプリケーションはいない ☆ 結果: 単なるデバドラ屋になりさがる...
9.
ダメな例3: 起動プロセスを調べる ☆ プロセスの生成、光あれ! ☆
過渡と定常 ☆ 過渡ばかり覚える ☆ 定常 := 機器が動いている時 ☆ アプリ結合で思考停止する人間になる
10.
じゃあ何が近道なのさ!? ☆ フリーUNIXのソース全部読めってか? ☆ 無理だぽー ☆
シナリオが必要です ☆ 最も簡単そうなシナリオは? ☆ printf関数の動作じゃね
11.
簡単なプログラムを作りました /* whileprint.c */ #include
<stdio.h> int main() { while(1) { printf("."); } } このプログラムをシリアルコンソールから実行 すれば、 PCのシリアルポートに"."をひたすら書 くだけのはず。
12.
x86のシリアルポートのしくみ http://community.osdev.info/index.php?%28serial%29PC16550 I/Oポート0x3F8にASCIIコードを書けばOK
13.
printf => I/Oポート
の間は?
14.
backtrace取ってみたよ
15.
ソースコードの取得 CVS $ cat ~/.cvsrc diff
-cu update -dP checkout -P cvs -z3 -q $ cvs -d :pserver:anoncvs@anoncvs.jp.netbsd.org:/cvs/cvsroot login Logging in to :pserver:anoncvs@anoncvs.jp.netbsd.org:2401/cvs/ cvsroot CVS password: anoncvs $ cvs -d :pserver:anoncvs@anoncvs.jp.netbsd.org:/cvs/cvsroot co -r netbsd-6-0-1-RELEASE src Git $ git clone git://github.com/jsonn/src.git $ git checkout -b netbsd_6_0 remotes/origin/netbsd_6_0
16.
読むべきソースコードの在処 src/lib/libc
:= libc src/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 := バーチャルメモリ 他のディレクトリはおいおい説明します
17.
ドキュメントはmanpage http://netbsd.gw.com/cgi-bin/man-cgi http://netbsdman.masterq.net/ 翻訳環境構築中
18.
開発環境: build.sh 以下の手順で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 netbsd netbsd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for NetBSD 6.0, not stripped コードをちょっと変えて動作を見たいときどうぞ
19.
実行環境: NetBSD +
virtualbox isoでvirtualboxにNetBSDをインストール ftp://iso.jp.netbsd.org/pub/NetBSD/iso/6.0.1/NetBSD-6.0.1-i386.iso さっきコンパイルしたkernelを/netbsd.testの 名前でvirtualboxインスタンスに置く 以下のように/boot.cfgを設定 menu=Boot normally:rndseed /var/db/entropy-file;boot netbsd menu=Boot ddb:rndseed /var/db/entropy-file;boot netbsd.test -d menu=Boot single user:rndseed /var/db/entropy-file;boot netbsd -s menu=Drop to boot prompt:prompt default=1 timeout=5 clear=1
20.
virtualboxでシリアルコンソール http://www.reactos.org/wiki/VirtualBox virtualboxのシリアルを名前付きpipeに設定 http://www.cetus-net.org/bsd/i386/serial.html NetBSD側でシリアルコンソールを有効に # diff /etc/ttys.back
/etc/ttys 13c13 < tty00 "/usr/libexec/getty std.9600" unknown off secure --- > tty00 "/usr/libexec/getty std.9600" vt100 on secure local ホストOSから名前付きpipeを開く $ socat unix-client:/hogehoge/com0.pipe stdio NetBSD/i386 (Amnesiac) (tty00) login:
21.
何もかも解らない時どうすれば... static int vn_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;
22.
1. タグジャンプ 以下どれかを使うとソースコード追いやすい ☆ GNU
GLOBAL http://www.gnu.org/software/global/ ☆ Exuberant Ctags http://ctags.sourceforge.net/
23.
2. NetBSDドキュメント ☆ NetBSD
Documentationのkernel章 http://www.netbsd.org/docs/ ☆ NetBSD Documentation: Kernel http://www.netbsd.org/docs/kernel/ ☆ NetBSD Wikiのkernel関連 http://wiki.netbsd.org/wiki/sitemap/ ☆ NetBSD source code style guide http://cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style? rev=1.49&content-type=text/x-cvsweb-markup&only_with_tag=MAIN
24.
3. 本 ☆ 4.4BSDの設計と実装 http://www.amazon.co.jp/dp/4756143466 ☆
BSDカーネルの設計と実装 http://www.amazon.co.jp/dp/4756146791 ☆ 386BSDカーネルソースコードの秘密 http://www.amazon.co.jp/dp/4756120423
25.
みなさんへのお願い 勉強会の運営には皆さんの協力が必要です! ☆ 好きな箇所を読んで発表 ☆ NetBSD
manの翻訳 http://netbsdman.masterq.net/ ☆ Metasepiプロジェクトへの参加 http://metasepi.masterq.net/
26.
ということでソース読みましょう! ☆ printf関数から読む ☆ I/Oポートアクセスから読む あなたはどっち?
27.
参考資料 ☆ 本勉強会まとめサイト http://start_printf.masterq.net/