カーネルコンパイルから見るLinux2008.01.21トライポッドワークス 庄司      Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
目次   Linuxカーネル概要   git概要   カーネルコンパイルの前に   カーネルコンパイル〜インストール   障害解析のために            Copyright © 2007, TripodWorks CO.,Lt...
Linuxカーネル概要Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
LinuxとはLinuxとは、UNIXライクな(UNIXに似た)コンピュータ用オペレーティングシステム (OS) である。現在では、パーソナルコンピュータに限らず、携帯電話のような組み込みシステムからメインフレームやスーパーコンピュータまで、幅...
LinusのツリーLinuxはリーナス・トーバルズ (Linus Torvalds) がMinixより優れたUNIX互換OSを開発したいという動機から生み出された。現在はLinux Kernel Mailing List (LKML) を中心と...
Linuxのコード量     Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
git概要Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
git背景現在、バニラカーネルはバージョン管理システムであるgitによって管理されている。カーネルの開発では、LKMLに投稿されるパッチをカーネルメンテナがソースコードに適用するという形式を用いているが、以前はBitKeeperというバージョン...
gitのインストールFedora8の場合 # yum install githttp://git.or.cz/からダウンロードもできます。ソースからの場合 # make configure # ./configure # make all do...
gitのフロントエンドツールgitはコマンドラインから使いますが、フロントエンドツールも各種あります。CUIな人用    cogitoGUIな人用    gitk, qgitWebな人用    gitwebFedora8の場合 # yum in...
gitの準備gitは他のバージョン管理ツールと同様、ローカルにクローンを作るところから始めます。Linusのツリーのクローンを手元におく# git-clone git://git.kernel.org/pub/scm/linux/kernel/...
gitの基本的な使い方時間がたって古くなったリポジトリを最新にするには# cd linux-2.6# git-pull git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linu x-...
gitの便利な使い方1変更履歴と共にパッチも見たいとき# git log -p パッチはunified形式(diff -u)パスの指定も出来ます。# git log fs/xfsgrepと合わせて人名で検索したり# git grep Linus...
gitの便利な使い方2バージョン間の変更履歴が見たいとき# git log v2.6.24-rc4..v2.6.24-rc5[タグ名..タグ名]でバージョン間指定[タグ名..]で最新までの変更履歴[..タグ名]でタグまでの変更履歴どのようなタグ...
ここまでできればここまでできればgitを利用してLinusのツリーを参照することができます。参照することにより、細かいバージョン間でのバグフィックス、機能追加修正などをモニタすることができます。       Copyright © 2007, ...
カーネルコンパイルの前に Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
linux-2.6のディレクトリ構成 # cd linux-2.6 # ls                ドキュ メントが格 されています。                         納Docum at i on     ent    ...
TIPS:タグの生成カーネルのタグを生成しておくカーネルのタグを生成しておくことで変数や関数ジャンプを容易にすることができます。Emacsな人# find . -name "*.[ch]" -print | etags -viな人# ctags...
Documentation 一例(1)# cd linux-2.6/Documentation/filesystems# less proc.txt/procファイルシステムに関するドキュメント0 Preface0.1 Introduction...
Documentation 一例(2)ソースコードの実装を調べるにはgrepまたはタグを利用するここではdirty_background_ratio# grep -rn dirty_background_ratio . ./kernel/sys...
makeコマンド1カーネルのコンパイル設定はmakeから行うmakeコマンドのオプション# make help   Cl eani ng t ar get s: ク リ ーン ア ッ プ する ためのオ プ ショ ン     cl ean   ...
makeコマンド2  St at i c anal yser s: 静的解析のためのオ プ ショ ン    checkst ack       - Gener at e a l i st of st ack hogs    nam  espac...
makeコマンド3O her gener i c t ar get s: そ の他のオプショ ン t                                                                        ...
Configuration option(1)make config等のconfiguration targetを指定することでカーネルの初期パラメータを変更することができます。(画像はGTK+を使用したmake gconfigを実行したところ...
Configuration option(2)最新のLinuxカーネルのパラメータは1000を超えると言われています。トップグループの概要を紹介します。    G al set up      ener                     ...
Configuration option(3)パラメータ設定のポイント 膨大な数のパラメータを一つひとつ理解するのは不可能。そこで、重要なポイント〜debugはリリース時点ではすべてNに設定する。 余計なメッセージが表示・記録されてしまうためカ...
Configuration option(4)そこで、重要なポイント(つづき)Excutable file formatsは全てY。 実行形式は色々な形式が利用できたほうが便利だと思います...Networking -> Networking ...
カーネルコンパイル〜インストール   Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
ビルドからインストールまで(1)Linuxカーネルのビルドは2.4カーネルと2.6カーネルでは若干異なります。2.6カーネルの手順は2.4カーネルに比べると容易です。2.4カーネルの場合# make mrproper              ...
ビルドからインストールまで(2)2.6カーネルの場合# make ( make V=1 とするとmakeの状態を表示します) 2.6カーネルではmake一発で出来ます。# make modules_install カーネルモジュールがインストー...
TIPS:mkinitrdmkinitrdとは ブート時に最初に読み込まれるルートファイルシステムの RAMイメージファイルを作成するためのコマンドです。RAMイメージファイルはなぜ、必要か? ルートファイルシステムがSCSIハードディスク上に...
/boot/grub/grub.confについてカーネルはGRUBというブートローダーから起動します。以前はLILOというブートローダーを使用していました。grub.confの書式# info grub        : Emacsライクなイン...
障害解析のためにCopyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
dmesgdmesgコマンドはカーネルが出力する環状バッファ情報を表示します。どこで使うの? 起動時のカーネル情報の確認 ドライバのロード、アンロード時の確認 ソフトウェアの動作異常 ストレージのマウント・アンマウント前にメッセージの意味がわか...
stracestraceはユーザーランドのシステムコールをトレースします。どこで使うの? ユーザーランドプログラムが落ちる。 カーネルを変更すると動作する。[root@tshoji120 20080121]# strace /bin/lsexe...
diskdump, netdumpdiskdump, netdumpはカーネルパニック時にメモリの内容をダンプします。どこで使うの? カーネルパニックが発生したが、心当たりが無い。        Copyright © 2007, Tripod...
kdbkdbはカーネルの実行をトレースし、メモリやデータ構造を調査するのに便利です。どこで使うの? 実行中のカーネルに不具合があり、再現性があるとき。デバッグ機能 メモリ内容の表示と編集 レジスタ内容の表示と編集 ブレークポイント スタックトレ...
sar, iostat, mpstatsar, iostat, mpstatはカーネルがスローダウンしたときに調査するのに便利です。どこで使うの? パフォーマンス測定やスローダウンの原因がわからないとき。         Copyright ©...
minicom(シリアル接続)シリアル接続はブート時のメッセージを保存したいときデバッガの使用等ひとつ用意してあると便利です。どこで使うの? カーネルのブートをモニタする デバッガに接続する ファームをダウンロードするLinuxのターミナルソフ...
参考資料IPA OS層 ~障害解析の手順・ツール評価編~http://www.ipa.go.jp/software/open/forum/development/download/051115/OS-Tools.pdf詳解 Linuxカーネル第...
http://www.tripodworks.co.jp
Upcoming SlideShare
Loading in …5
×

Linux Kernel Seminar in tripodworks

3,971 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,971
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Linux Kernel Seminar in tripodworks

  1. 1. カーネルコンパイルから見るLinux2008.01.21トライポッドワークス 庄司 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  2. 2. 目次 Linuxカーネル概要 git概要 カーネルコンパイルの前に カーネルコンパイル〜インストール 障害解析のために Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  3. 3. Linuxカーネル概要Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  4. 4. LinuxとはLinuxとは、UNIXライクな(UNIXに似た)コンピュータ用オペレーティングシステム (OS) である。現在では、パーソナルコンピュータに限らず、携帯電話のような組み込みシステムからメインフレームやスーパーコンピュータまで、幅広く利用されている。 参考:WikiPedia Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  5. 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. 6. Linuxのコード量 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  7. 7. git概要Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  8. 8. git背景現在、バニラカーネルはバージョン管理システムであるgitによって管理されている。カーネルの開発では、LKMLに投稿されるパッチをカーネルメンテナがソースコードに適用するという形式を用いているが、以前はBitKeeperというバージョン管理システムを用いて管理していた。しかし、このシステムは商用のため快く思わないAndrew Tridgellが開発したBitKeeperクローンによってBitKeeperの提供が停止されてしまった。その代替としてリーナス・トーバルズによってgitが開発された。 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  9. 9. gitのインストールFedora8の場合 # yum install githttp://git.or.cz/からダウンロードもできます。ソースからの場合 # make configure # ./configure # make all doc # make install install-doc Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  10. 10. gitのフロントエンドツールgitはコマンドラインから使いますが、フロントエンドツールも各種あります。CUIな人用 cogitoGUIな人用 gitk, qgitWebな人用 gitwebFedora8の場合 # yum install cogit # yum install qgitでインストールできます。 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  11. 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.
  12. 12. gitの基本的な使い方時間がたって古くなったリポジトリを最新にするには# cd linux-2.6# git-pull git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linu x-2.6.gitファイルをリポジトリから取り出すとき# git-checkout変更履歴(ログ)を見たいとき# git log Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  13. 13. gitの便利な使い方1変更履歴と共にパッチも見たいとき# git log -p パッチはunified形式(diff -u)パスの指定も出来ます。# git log fs/xfsgrepと合わせて人名で検索したり# git grep Linuscommit idを覚えておいて後で読むことも出来ます。# git show bad60fdd14df32459e31cc75ab681e4458bf25cf Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  14. 14. gitの便利な使い方2バージョン間の変更履歴が見たいとき# git log v2.6.24-rc4..v2.6.24-rc5[タグ名..タグ名]でバージョン間指定[タグ名..]で最新までの変更履歴[..タグ名]でタグまでの変更履歴どのようなタグ名があるか# git tag Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  15. 15. ここまでできればここまでできればgitを利用してLinusのツリーを参照することができます。参照することにより、細かいバージョン間でのバグフィックス、機能追加修正などをモニタすることができます。 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  16. 16. カーネルコンパイルの前に Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  17. 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 erbl 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 akescr i pt s コンフ ィ グレーショ ンに使 されるスクリ プトが格 されています。 用 納secur i t y セキュ リ ティ ( 権 管 、 SELi nuxなど) に関 限 理 するソースコードが格 されています。 納sound サウンドに関 するソースコードが格 されています。 納usr カーネル内 のツールに関 するソースコードが格 されています。 納 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  18. 18. TIPS:タグの生成カーネルのタグを生成しておくカーネルのタグを生成しておくことで変数や関数ジャンプを容易にすることができます。Emacsな人# find . -name "*.[ch]" -print | etags -viな人# ctags -R or# make tag Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  19. 19. Documentation 一例(1)# cd linux-2.6/Documentation/filesystems# less proc.txt/procファイルシステムに関するドキュメント0 Preface0.1 Introduction/Credits0.2 Legal Stuff1 Collecting System Information1.1 Process-Specific Subdirectories1.2 Kernel data1.3 IDE devices in /proc/ide1.4 Networking info in /proc/net1.5 SCSI info1.6 Parallel port info in /proc/parport1.7 TTY info in /proc/tty1.8 Miscellaneous kernel statistics in /proc/stat 1. /procから参照できる情報2 Modifying System Parameters 2. /procから設定できる情報2.1 /proc/sys/fs - File system data2.2 /proc/sys/fs/binfmt_misc - Miscellaneous binary formats (カーネルパラメータ)2.3 /proc/sys/kernel - general kernel parameters2.4 /proc/sys/vm - The virtual memory subsystem2.5 /proc/sys/dev - Device specific parameters2.6 /proc/sys/sunrpc - Remote procedure calls2.7 /proc/sys/net - Networking stuff2.8 /proc/sys/net/ipv4 - IPV4 settings2.9 Appletalk2.10 IPX2.11 /proc/sys/fs/mqueue - POSIX message queues filesystem2.12 /proc/<pid>/oom_adj - Adjust the oom-killer score2.13 /proc/<pid>/oom_score - Display current oom-killer score2.14 /proc/<pid>/io - Display the IO accounting fields2.15 /proc/<pid>/coredump_filter - Core dump filtering settings Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  20. 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. 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. 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. 23. makeコマンド3O 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. 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. 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.
  26. 26. Configuration option(3)パラメータ設定のポイント 膨大な数のパラメータを一つひとつ理解するのは不可能。そこで、重要なポイント〜debugはリリース時点ではすべてNに設定する。 余計なメッセージが表示・記録されてしまうためカーネル機能はYに設定しておく方が安心。 組み込んでもそれを利用することができるソフトがないと使えないので、 邪魔にはならない。但し、パフォーマンスを求める場合には要注意。Code maturity level optionsはNにする。 不完全な実装設定の意味。Yにして余計な苦労をするくらいなら...ハードウェアサポートはNにする。 よくわからないハードウェアは調べてからYにするようにする。 電源系のトラブルはやっかいなので、同様にPower management optionは Nにしておくとよい。 Bus optionは明らかに実装されていないものはNに、よく分からないものは Yにする。 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  27. 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. 28. カーネルコンパイル〜インストール Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  29. 29. ビルドからインストールまで(1)Linuxカーネルのビルドは2.4カーネルと2.6カーネルでは若干異なります。2.6カーネルの手順は2.4カーネルに比べると容易です。2.4カーネルの場合# make mrproper 注:configを行う前に初期化します。 (make menuconfig 等)# make dep 依存関係のチェックを行います。# make clean 不要なファイルを削除します。# make bzImage カーネルをコンパイルし、圧縮された 新しいカーネルを作成します。# make modules カーネルモジュールをコンパイルします。# make modules_install カーネルモジュールをインストールします。# mkinitrd /boot/initrd-2.4.xx.img 2.4.xx ブロックデバイスのpreload RAM imageを 作ります。# vi /boot/grub/grub.conf 新しいカーネルのエントリを追加 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  30. 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.
  31. 31. TIPS:mkinitrdmkinitrdとは ブート時に最初に読み込まれるルートファイルシステムの RAMイメージファイルを作成するためのコマンドです。RAMイメージファイルはなぜ、必要か? ルートファイルシステムがSCSIハードディスク上にある場合、SCSIサポート するドライバが予め必要です。初期RAMディスクはこのドライバを組み込んだ カーネルをメモリ上に展開し、起動することによりSCSIハードディスクから 実際のファイルシステムをマウントしなおすという起動プロセスを取ることが できます。mkinitrdのコマンド # mkinitrd [オプション] RAMイメージファイル カーネルバージョン関連 depmod Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  32. 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.
  33. 33. 障害解析のためにCopyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  34. 34. dmesgdmesgコマンドはカーネルが出力する環状バッファ情報を表示します。どこで使うの? 起動時のカーネル情報の確認 ドライバのロード、アンロード時の確認 ソフトウェアの動作異常 ストレージのマウント・アンマウント前にメッセージの意味がわからないときは? OSS Message Pediaでメッセージを検索 http://ossmpedia.org/ RedHatのBugzillaで検索 http://ossmpedia.org/ カーネルソースをgrepしてみる Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  35. 35. stracestraceはユーザーランドのシステムコールをトレースします。どこで使うの? ユーザーランドプログラムが落ちる。 カーネルを変更すると動作する。[root@tshoji120 20080121]# strace /bin/lsexecve("/bin/ls", ["/bin/ls"], [/* 50 vars */]) = 0brk(0) = 0x8937000access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)open("/etc/ld.so.cache", O_RDONLY) =3fstat64(3, {st_mode=S_IFREG|0644, st_size=117879, ...}) = 0mmap2(NULL, 117879, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f0d000close(3) =0open("/lib/librt.so.1", O_RDONLY) =3read(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) = 512fstat64(3, {st_mode=S_IFREG|0755, st_size=48072, ...}) = 0mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =0xb7f0c000mmap2(0x1e6000, 33328, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =0x1e6000mmap2(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
  36. 36. diskdump, netdumpdiskdump, netdumpはカーネルパニック時にメモリの内容をダンプします。どこで使うの? カーネルパニックが発生したが、心当たりが無い。 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  37. 37. kdbkdbはカーネルの実行をトレースし、メモリやデータ構造を調査するのに便利です。どこで使うの? 実行中のカーネルに不具合があり、再現性があるとき。デバッグ機能 メモリ内容の表示と編集 レジスタ内容の表示と編集 ブレークポイント スタックトレース 逆アセンブル注意 kdbの実行にはあらかじめカーネルにパッチを当てておく必要があります。 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  38. 38. sar, iostat, mpstatsar, iostat, mpstatはカーネルがスローダウンしたときに調査するのに便利です。どこで使うの? パフォーマンス測定やスローダウンの原因がわからないとき。 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  39. 39. minicom(シリアル接続)シリアル接続はブート時のメッセージを保存したいときデバッガの使用等ひとつ用意してあると便利です。どこで使うの? カーネルのブートをモニタする デバッガに接続する ファームをダウンロードするLinuxのターミナルソフトではminicomが有名です。シリアルケーブルがUSBの場合は:/dev/ttyUSB0のように認識されます。 Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  40. 40. 参考資料IPA OS層 ~障害解析の手順・ツール評価編~http://www.ipa.go.jp/software/open/forum/development/download/051115/OS-Tools.pdf詳解 Linuxカーネル第2版第3版 ISBN-13: 978-4873113135Linuxカーネル2.6解読室ISBN-13: 978-4797338263日経 Linux Linuxカーネル徹底理解ISBN-13: 978-4822234140WikiPediahttp://ja.wikipedia.org/ Copyright © 2007, TripodWorks CO.,Ltd. All Rights Reserved.
  41. 41. http://www.tripodworks.co.jp

×