Weitere ähnliche Inhalte
Ähnlich wie Linux Kernel Seminar in tripodworks
Ähnlich wie Linux Kernel Seminar in tripodworks (20)
Linux Kernel Seminar in tripodworks
- 2. 目次
Linuxカーネル概要
git概要
カーネルコンパイルの前に
カーネルコンパイル〜インストール
障害解析のために
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 5. Linusのツリー
Linuxはリーナス・トーバルズ (Linus Torvalds) がMinix
より優れたUNIX互換OSを開発したいという動機から生み出さ
れた。
現在はLinux Kernel Mailing List (LKML) を中心として
開発が行われている。
Linusの開発ツリーであるバニラカーネルは
http://www.kernel.org/
から入手することができる。
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 6. Linuxのコード量
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 9. gitのインストール
Fedora8の場合
# yum install git
http://git.or.cz/からダウンロードもできます。
ソースからの場合
# make configure
# ./configure
# make all doc
# make install install-doc
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 11. gitの準備
gitは他のバージョン管理ツールと同様、ローカルに
クローンを作るところから始めます。
Linusのツリーのクローンを手元におく
# git-clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin ux-2.6.git
linux-2.6
Initialized empty Git repository in .git/
Fetching head...
Fetching objects...
Getting alternates list for http://kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Getting pack list for http://kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Getting index for pack 1dae8aeac81b760f1831b7a0fbfdbbe4079b456e
Getting index for pack c6558d5da67a60d5e50d0235cd4bf555bd420cd1
Getting index for pack e65d48b3632f2657eb9ab7a21aa73d337dbbdc88
Getting pack e65d48b3632f2657eb9ab7a21aa73d337dbbdc88
which contains fd0b45dfd1858c6b49d06355a460bcf36d654c06
A
Getting pack 1dae8aeac81b760f1831b7a0fbfdbbe4079b456e
which contains 8d14531846b95bfa3564b58ccfb7913a034323b8
.
.
.
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 13. gitの便利な使い方1
変更履歴と共にパッチも見たいとき
# git log -p
パッチはunified形式(diff -u)
パスの指定も出来ます。
# git log fs/xfs
grepと合わせて人名で検索したり
# git grep Linus
commit idを覚えておいて後で読むことも出来ます。
# git show bad60fdd14df32459e31cc75ab681e4458bf25cf
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 14. gitの便利な使い方2
バージョン間の変更履歴が見たいとき
# git log v2.6.24-rc4..v2.6.24-rc5
[タグ名..タグ名]でバージョン間指定
[タグ名..]で最新までの変更履歴
[..タグ名]でタグまでの変更履歴
どのようなタグ名があるか
# git tag
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 17. linux-2.6のディレクトリ構成
# cd linux-2.6
# ls
ドキュ メントが格 されています。
納
Docum at i on
ent 各 アーキテクチャ の説 やチュ ーニングパラメータ について記 しています。
種 明 載
しかし、 かならずしも実 されているコードと ドキュ メントが同 しているわけではあり ません。
装 期
アーキテクチャ に依 するソースコードが格 されています。
存 納
al pha, avr 32, cr i s, h8300, m , m
32r 68knom u, par i sc, ppc, sh, spar c, um x86,
m ,
ar ch
ar m bl ackf i n, f r v, i a64, m m ps, pow pc, s390, sh64, spar c64, v850, xt ensa
, 68k, i er
bl ock ブロッ ク I / O するソースコードが格 されています。
に関 納
cr ypt o 暗 処 に関
号 理 するソースコードが格 されています。 納
ドライバのソースコードが格 されています。 納
dr i ver s
サブディ レクトリ にはさらに細 かい分 がされています。
類
fs フ ァ イルシステムに関 するソースコードが格 されています。 納
i ncl ude へッ ダフ ァ イルが格 されています。
納
i ni t カーネルの初 化 期 コード ( m n. cなど ) が格 さ れています。
ai 納
i pc プロセス間 信 するソースコードが格 されています。
通 に関 納
ker nel カーネル本 のソースコードが格 されています。
体 納
lib カーネルが使 するいく つかの関 のソースコ ードが格 されています。
用 数 納
m m メモリ マネジメントに関 するソースコードが格 されています。 納
net ネッ トワークに関 するソースコードが格 されています 納
sam es
pl カーネルモジュ ールに関 するサンプルコードが格 されています。 納
ake ake enuconf i g, m xconf i gなどのカーネルの
m conf i g, m m ake
scr i pt s
コンフ ィ グレーショ ンに使 されるスクリ プトが格 されています。
用 納
secur i t y セキュ リ ティ ( 権 管 、 SELi nuxなど) に関
限 理 するソースコードが格 されています。
納
sound サウンドに関 するソースコードが格 されています。 納
usr カーネル内 のツールに関 するソースコードが格 されています。 納
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 19. Documentation 一例(1)
# cd linux-2.6/Documentation/filesystems
# less proc.txt
/procファイルシステムに関するドキュメント
0 Preface
0.1 Introduction/Credits
0.2 Legal Stuff
1 Collecting System Information
1.1 Process-Specific Subdirectories
1.2 Kernel data
1.3 IDE devices in /proc/ide
1.4 Networking info in /proc/net
1.5 SCSI info
1.6 Parallel port info in /proc/parport
1.7 TTY info in /proc/tty
1.8 Miscellaneous kernel statistics in /proc/stat 1. /procから参照できる情報
2 Modifying System Parameters 2. /procから設定できる情報
2.1 /proc/sys/fs - File system data
2.2 /proc/sys/fs/binfmt_misc - Miscellaneous binary formats (カーネルパラメータ)
2.3 /proc/sys/kernel - general kernel parameters
2.4 /proc/sys/vm - The virtual memory subsystem
2.5 /proc/sys/dev - Device specific parameters
2.6 /proc/sys/sunrpc - Remote procedure calls
2.7 /proc/sys/net - Networking stuff
2.8 /proc/sys/net/ipv4 - IPV4 settings
2.9 Appletalk
2.10 IPX
2.11 /proc/sys/fs/mqueue - POSIX message queues filesystem
2.12 /proc/<pid>/oom_adj - Adjust the oom-killer score
2.13 /proc/<pid>/oom_score - Display current oom-killer score
2.14 /proc/<pid>/io - Display the IO accounting fields
2.15 /proc/<pid>/coredump_filter - Core dump filtering settings
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 20. Documentation 一例(2)
ソースコードの実装を調べるにはgrepまたはタグを利用する
ここではdirty_background_ratio
# grep -rn dirty_background_ratio .
./kernel/sysctl.c:828: .procname = "dirty_background_ratio",
./kernel/sysctl.c:829: .data = &dirty_background_ratio,
./kernel/sysctl.c:830: .maxlen = sizeof(dirty_background_ratio),
./kernel/sysctl_check.c:118: { VM_DIRTY_BACKGROUND, "dirty_background_ratio" },
kernel/sysctl.cが/procのインターフェースを実現している!
ここに新たなエントリを追加すれば/procからカーネルの挙動操作できる
インターフェースを作ることができます。
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 21. makeコマンド1
カーネルのコンパイル設定はmakeから行う
makeコマンドのオプション
# make help
Cl eani ng t ar get s: ク リ ーン ア ッ プ する ためのオ プ ショ ン
cl ean - R ove m
em ost gener at ed f i l es but keep t he conf i g and
enough bui l d suppor t t o bui l d ext er nal modul es
m pr oper
r - R ove al l gener at ed f i l es + conf i g + var i ous backup f i l es
em
di st cl ean - m pr oper + r em
r ove edi t or backup and pat ch f i l es
Conf i gur at i on t ar get s: カ ーネル設定値を 変更する ためのオ プ ショ ン
conf i g - Updat e cur r ent conf i g ut i l i si ng a l i ne- or i ent ed pr ogr am
m enuconf i g - Updat e cur r ent conf i g ut i l i si ng a m enu based pr ogr am
xconf i g - Updat e cur r ent conf i g ut i l i si ng a Q based f r ont - end
T
gconf i g - Updat e cur r ent conf i g ut i l i si ng a G based f r ont - end
TK
ol dconf i g - Updat e cur r ent conf i g ut i l i si ng a pr ovi ded . conf i g as base
si l ent ol dconf i g - S e as ol dconf i g, but qui et l y
am
r andconf i g - N conf i g w t h r andom answ t o al l opt i ons
ew i er
def conf i g - N conf i g w t h def aul t answ t o al l opt i ons
ew i er
al l modconf i g - N conf i g sel ect i ng m
ew odul es w hen possi bl e
al l yesconf i g - N conf i g w e al l opt i ons ar e accept ed w t h yes
ew her i
al l noconf i g - N conf i g w e al l opt i ons ar e answ ed w t h no
ew her er i
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 22. makeコマンド2
St at i c anal yser s: 静的解析のためのオ プ ショ ン
checkst ack - Gener at e a l i st of st ack hogs
nam espacecheck - N e space anal ysi s on com l ed ker nel
am pi
expor t _r epor t - Li st t he usages of al l expor t ed sym s
bol
header s_check - S t y check on expor t ed header s
ani
Ker nel packagi ng: カ ーネルパッ ケージン グのためのオ プ ショ ン
r pm pkg
- - B l d t he ker nel as an R M package
ui P
bi nr pm pkg
- - B l d an r pm package cont ai ni ng t he com l ed ker nel
ui pi
and m es
odul
deb- pkg - B l d t he ker nel as an deb package
ui
t ar - pkg - B l d t he ker nel as an uncom essed t ar bal l
ui pr
t ar gz- pkg - B l d t he ker nel as a gzi p com essed t ar bal l
ui pr
t ar bz2- pkg - B l d t he ker nel as a bzi p2 com essed t ar bal l
ui pr
Docum at i on t ar get s: ド キュ メ ン ト 作成のためのオ プ ショ ン
ent
Li nux ker nel i nt er nal docum at i on i n di f f er ent f or m s:
ent at
ht m docs
l - H L
TM
i nst al l mandocs - i nst al l m pages gener at ed by m
an andocs
m andocs - m pages
an
pdf docs - PFD
psdocs - P scr i pt
ost
xm docs
l - XL D
M ocBook
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 23. makeコマンド3
O her gener i c t ar get s: そ の他のオプショ ン
t
他にもmake helpコマンドでは
al l - B l d al l t ar get s m ked w t h [ *]
ui ar i
* vm i nux
l - B l d t he bar e ker nel
ui 表示されないオプションもあります。
* m odul es - B l d al l m
ui odul es
m odul es_i nst al l - I nst al l al l m odul es t o I N TA
S LL_M D A ( def aul t : / )
O _P TH -j n [n>=2]
di r / - B l d al l f i l es i n di r and bel ow
ui 並列コンパイル
di r / f i l e. [ oi s] - B l d speci f i ed t ar get onl y
ui
di r / f i l e. ko - B ld m
ui odul e i ncl udi ng f i nal l i nk
r pm - B l d a ker nel as an R M package
ui P
t ags/ TA S G - G ener at e t ags f i l e f or edi t or s
cscope - G ener at e cscope i ndex 詳しくはMakefileを見てください^^;
ker nel r el ease - O put t he r el ease ver si on st r i ng
ut
ker nel ver si on - O put t he ver si on st or ed i n M
ut akef i l e
header s_i nst al l - I nst al l sani t i sed ker nel header s t o I N TA S LL_H R A
D _P TH
( def aul t : / w k/ S M N R 20080121/ l i nux- 2. 6/ usr )
or EI A/
Ar chi t ect ur e speci f i c t ar get s ( i 386) : i 386 固有のオプショ ン
* bzI m age - C pr essed ker nel i m
om age ( ar ch/ x86/ boot / bzI mage)
i nst al l - I nst al l ker nel usi ng
( your ) ~/ bi n/ i nst al l ker nel or
( di st r i but i on) / sbi n/ i nst al l ker nel or
i nst al l t o $( I N TA
S LL_P TH and r un l i l o
A )
bzdi sk - C eat e a boot f l oppy i n / dev/ f d0
r
f di mage - C eat e a boot f l oppy i m
r age
i soi mage - C eat e a boot C - R M i m
r D O age
make V=0| 1 [ t ar get s] 0 => qui et bui l d ( def aul t ) , 1 => ver bose bui l d
make V=2 [ t ar get s] 2 => gi ve r eason f or r ebui l d of t ar get
make O r
=di [ t ar get s] Locat e al l out put f i l es i n " di r " , i ncl udi ng . conf i g
make C=1 [ t ar get s] Check al l c sour ce w t h $C E K ( spar se by def aul t )
i HC
make C=2 [ t ar get s] For ce check of al l c sour ce w t h $C E K
i HC
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 24. Configuration option(1)
make config等のconfiguration targetを指定することでカーネルの初期パラメータを変更
することができます。
(画像はGTK+を使用したmake gconfigを実行したところです。)
Configオプション一例
make config
CUIパラメータ問い合わせ型
make menuconfig
CUIメニュー型
make xconfig
GUI Qt版メニュー型
make gconfig
GUI GTK+版メニュー型
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 25. Configuration option(2)
最新のLinuxカーネルのパラメータは1000を超えると言われています。
トップグループの概要を紹介します。
G al set up
ener 一 般的な設定
E e l oadabl e m e suppor t
nabl odul 動 的に組み込み可 能なカーネル・ モジュ ールに関する設定
E e t he bl ock l ayer
nabl ブロッ ク・ デバイス層に関する設 定
P ocessor t ype and f eat ur es
r プロセッ サの種類や利用する機能に関する設定
P er m
ow anagem opt i ons ( A P , A M
ent CI P) A P やA M
C I P などの電源管理 機構に関する設 定
B opt i ons ( P I , P MI A E S , MA I S )
us C CC , I A C , A P I やI S などのバスに関する設定
C A
E xecut abl e f i l e f or m s
at 実 ァ イル形式に関する設定
行フ
N w ki ng
et or ネッ トワークに関する設定
D ce D i ver s
evi r デバイス・ ドラ イバに関する設定
Fi l e syst em s フ ァ イル・ システムに関する設定
I nst r um at i on S
ent uppor t システム測定に関する設定
K nel hacki ng
er カーネルのデバッ グに関する設定
S i t y opt i ons
ecur セキュ リ ティ 機構に関する設定
C ypt ogr aphi c opt i ons
r 暗 号機能に関する設定
Li br ar y r out i nes ライブラリ ・ モジュ ールに関する設定
比較的新しく、日本語のわかりやすい解説は下記が参考になります。
http://itpro.nikkeibp.co.jp/article/COLUMN/20071025/285507/?ST=oss
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 27. Configuration option(4)
そこで、重要なポイント(つづき)
Excutable file formatsは全てY。
実行形式は色々な形式が利用できたほうが便利だと思います...
Networking -> Networking options
Packet socket, Unix domain sockets, PF_KEY sockets, TCP/IP networking
は最低必要。他は必要に応じて入れる。
Device DriversはM
よく分からないものはMにしておくと後からinsmodで容易に追加できる。
File systemsはMまたはY
他のファイルシステムにアクセスすることがあるなら組み込んでおく方が
安心。CFやCD-ROM等をマウントするファイルシステムも考慮しておく。
ホット・プラグはMで
USBやPCMCIAといったホットプラグ対応デバイスはMにしておく。
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 28. カーネルコンパイル〜インストール
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 30. ビルドからインストールまで(2)
2.6カーネルの場合
# make
( make V=1 とするとmakeの状態を表示します)
2.6カーネルではmake一発で出来ます。
# make modules_install
カーネルモジュールがインストールされます。
# make install
カーネルがインストールされます。grub.confの設定もしてくれます。
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 32. /boot/grub/grub.confについて
カーネルはGRUBというブートローダーから起動します。
以前はLILOというブートローダーを使用していました。
grub.confの書式
# info grub : Emacsライクなインターフェースで起動します
# #はコメント
default=0 n番目のエントリを起動
timeout=5 GRUBメニューのタイムアウト(秒)
splashimage=(hd0,0)/grub/splash.xpm.gz GRUBメニューの背景画像
title Fedora (2.6.23.9-85.fc8) GRUBメニューに表示されるOS名
(0番目のエントリ)
root (hd0,0) 1台目のHDDの3番目のパーティションから起動
IDE:/dev/hda3, SCSIorSATA:/dev/sda3
kernel /vmlinuz-2.6.23.9-85.fc8 ro root=LABEL=/ rhgb quiet
カーネルイメージの指定
hda=ide-scsi
initrd /initrd-2.6.23.9-85.fc8.img 初期RAMイメージの指定
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
- 35. strace
straceはユーザーランドのシステムコールを
トレースします。
どこで使うの?
ユーザーランドプログラムが落ちる。
カーネルを変更すると動作する。
[root@tshoji120 20080121]# strace /bin/ls
execve("/bin/ls", ["/bin/ls"], [/* 50 vars */]) = 0
brk(0) = 0x8937000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) =3
fstat64(3, {st_mode=S_IFREG|0644, st_size=117879, ...}) = 0
mmap2(NULL, 117879, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f0d000
close(3) =0
open("/lib/librt.so.1", O_RDONLY) =3
read(3, "¥177ELF¥1¥1¥1¥0¥0¥0¥0¥0¥0¥0¥0¥0¥3¥0¥3¥0¥1¥0¥0¥0`y¥36¥0004¥0¥0¥0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=48072, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7f0c000
mmap2(0x1e6000, 33328, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0x1e6000
mmap2(0x1ed000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3,
0x7) = 0x1ed000 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
close(3) =0
- 38. sar, iostat, mpstat
sar, iostat, mpstatはカーネルがスローダウンした
ときに調査するのに便利です。
どこで使うの?
パフォーマンス測定やスローダウンの原因がわからないとき。
Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.