More Related Content
Similar to スタート低レイヤー #0 (20)
スタート低レイヤー #0
- 8. ダメな例2: 自作OS
☆ 楽しいけど...
☆ x86セグメントとかイキナリ
☆ デバイス周りやVMなど下側ばかり
☆ バスドライバなど抽象まで辿りつけない
☆ 上に複雑なアプリケーションはいない
☆ 結果: 単なるデバドラ屋になりさがる...
- 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 := バーチャルメモリ
他のディレクトリはおいおい説明します
- 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
- 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;
- 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