<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ものぐさ備忘録 &#187; linux</title>
	<atom:link href="http://www.ginriki.net/wd/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ginriki.net/wd</link>
	<description>ソフトウェア関係の話を中心とした備忘録的日記</description>
	<lastBuildDate>Sun, 11 Jul 2010 15:48:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CentOS 5にAspire Timeline (3810T)の有線LANドライバを入れる</title>
		<link>http://www.ginriki.net/wd/2009/11/04/73/</link>
		<comments>http://www.ginriki.net/wd/2009/11/04/73/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 21:34:43 +0000</pubDate>
		<dc:creator>ginriki</dc:creator>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.ginriki.net/wd/?p=73</guid>
		<description><![CDATA[今年(2009年)の夏に、Aspire Timeline(3810T)を買いました。
元々Windows Vistaが入っていましたが、ついでにCentOS 5.31を入れてデュアルブートできるようにしました。
ただ、C [...]]]></description>
			<content:encoded><![CDATA[<p>今年(2009年)の夏に、Aspire Timeline(3810T)を買いました。<br />
元々Windows Vistaが入っていましたが、ついでにCentOS 5.3<sup>1</sup>を入れてデュアルブートできるようにしました。</p>
<p>ただ、CentOS 5.3には (たぶん、CentOS 5.4にも) Aspire Timelineの有線LANドライバが入ってないので、ドライバを探してきて入れました。</p>
<p><s>ドライバは、<a href="http://partner.atheros.com/Drivers.aspx">http://partner.atheros.com/Drivers.aspx</a>のAR81Family Linux Driverになります。</s>私がダウンロードしたときは、AR81Family-linux-v1.0.0.10.tar.gzっていうバージョンでした。</p>
<p><b>いつの間にか、リンク切れになってました（partner.atheros.comのサイト自体なくなったようです）。12/2時点では、ドライバは<a href="ftp://starlane.gotdns.org/AR81Family-linux-v1.0.1.0/">ここ</a>にあります。（katty9015さん、情報ありがとうございます）<br />
ファイル名もAR81Family-linux-v1.0.0.10.tar.gzからAR81Family-linux-v1.0.1.0.tar.gzに変わったので、以下の記事を読むときは注意してください。</b></p>
<p>USBメモリとかでAspire TimelineのCentOS上にAR81Family-linux-v1.0.0.10.tar.gzを入れた後は、以下のようにコンパイル/インストールすれば、有線LANが使えるようになります。</p>
<pre>
$ tar xzvf AR81Family-linux-v1.0.0.10.tar
$ cd src/
$ make
$ make install       # 要root権限
$ reboot             # 再起動
</pre>
<p><br/></p>
<h1>おまけ (Intel VTの有効化)</h1>
<p>Aspire Timeline(3810T)のCPUはIntel VTに対応してるのですが、BIOSで有効化できないため、そのままだとIntel VTが使えません。<br />
とはいえ、CentOSのXenでWindowsが起動できないのも味気ないです。<br />
以下の２つのリンク先を参考にいじれば、BIOSでIntel VTを有効にできます。Acerのサポート外になってしまうので、いじるときは自己責任でお願いします。</p>
<ul>
<li><a href="http://karl0204.at.webry.info/200908/article_2.html">Acer Aspire Timeline AS3810T-H22のIntel VT機能を有効にする</a></li>
<li><a href="http://feature-enable.blogspot.com/2009/07/enable-vt-on-insydeh2o-based-sony-vaio.html">Enable VT on InsydeH2O based Sony Vaio laptops, the EFI way</a></li>
</ul>
<ol class="footnotes"><li id="footnote_0_73" class="footnote">2009/10に、CentOS 5.4がリリースされましたね</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.ginriki.net/wd/2009/11/04/73/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>kprobes &#8211; カーネルへ動的にプローブ挿入</title>
		<link>http://www.ginriki.net/wd/2009/07/13/60/</link>
		<comments>http://www.ginriki.net/wd/2009/07/13/60/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 22:00:42 +0000</pubDate>
		<dc:creator>ginriki</dc:creator>
				<category><![CDATA[debugger]]></category>
		<category><![CDATA[kprobes]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.ginriki.net/wd/?p=60</guid>
		<description><![CDATA[Debug Hacksを読んでたら、kprobesっていうデバッグツールの話があった。
自分でモジュール作ってinsmodするだけで、カーネル再コンパイルなしで、ある実行地点でのカーネル内変数を調べるツールだそうで。
プ [...]]]></description>
			<content:encoded><![CDATA[<p>Debug Hacksを読んでたら、kprobesっていうデバッグツールの話があった。<br />
自分でモジュール作ってinsmodするだけで、カーネル再コンパイルなしで、ある実行地点でのカーネル内変数を調べるツールだそうで。</p>
<p>プロセスのユーザ空間（＝デバッギのユーザ空間）に対してデバッガプロセスがプローブする場合は<sup>1</sup></p>
<ol>
<li>デバッガプロセスがptrace辺りを使ってデバッギのメモリ空間上の指定アドレス上にあるアセンブリ命令をint 3に書き変えて<sup>2</sup></li>
<li>デバッギプロセス実行中にそのint 3命令実行して発生したSIGTRAPをデバッガプロセスがフック(=これも事前にptraceで設定する）して</li>
<li>デバッガプロセスがptraceでデバッギプロセスのメモリ空間から値をread</li>
</ol>
<p>っていう流れが普通だと思う。<a href="http://www.google.co.jp/codesearch/p?hl=ja&#038;sa=N&#038;cd=5&#038;ct=rc#6MUOKTZ2awo/linux-2.6.19.3/arch/x86_64/kernel/kprobes.c&#038;q=kprobes.c&#038;l=468">kprobes.c</a>のコメントを見てみると、kprobesの場合もカーネルの指定命令アドレスにint 3を入れてるらしい。</p>
<pre>
/*
 * Called after single-stepping.  p->addr is the address of the
 * instruction whose first byte has been replaced by the "int 3"
 * instruction.  To avoid the SMP problems that can occur when we
 * temporarily put back the original opcode to single-step, we
 * single-stepped a copy of the instruction.  The address of this
 * copy is p->ainsn.insn. ...
 * ...
 */
</pre>
<p>ただ、SMPの関係で色々対策が必要なんだね<sup>3</sup>。int 3を実行した後、例外ベクタにジャンプしてからどういう手順で処理してるかについてイメージがわかないから、今度ソース読んでみようかな。</p>
<p>あと、kprobesだと見たい変数（とくにローカル変数などCPUアーキテクチャとデバッグ情報からアドレスを割り出す必要のあるもの）のアドレスを探すのが大変だけど、<br />
kprobes+GDBでそこを解決しようとしてるのが<a href=http://www.red-bean.com/trac/tracepoints/">tracepoints</a>ってやつらしい。ふむふむ。</p>
<ol class="footnotes"><li id="footnote_0_60" class="footnote">以前、<a href="http://www.ginriki.net/wd/2007/05/28/14/">デバッガについて書いた記事</a>もどうぞ。</li><li id="footnote_1_60" class="footnote">int 3はIA-32とかIntel architectureの場合の話です</li><li id="footnote_2_60" class="footnote">デバッギプロセスにプローブする場合に必要なマルチスレッド対策とどの程度一緒なのかは、まだよくわからない。</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.ginriki.net/wd/2009/07/13/60/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>crashコマンド使ってみた</title>
		<link>http://www.ginriki.net/wd/2009/07/13/58/</link>
		<comments>http://www.ginriki.net/wd/2009/07/13/58/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 17:37:05 +0000</pubDate>
		<dc:creator>ginriki</dc:creator>
				<category><![CDATA[CentOS]]></category>
		<category><![CDATA[GDB]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[debugger]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.ginriki.net/wd/?p=58</guid>
		<description><![CDATA[Kernelのコアダンプファイルを解析するのに、crashコマンドが便利だという話を聞いたので、練習として触ってみました。
手元にCentOS 5のマシンがあるので、それを使います。
解析にあたってkernelのデバッグ情報がいるので、debuginfoのRPMをインストール]]></description>
			<content:encoded><![CDATA[<p>Kernelのコアダンプファイルを解析するのに、crashコマンドが便利だという話を聞いたので、練習として触ってみました。</p>
<p>手元にCentOS 5のマシンがあるので、それを使います。</p>
<p>解析にあたってkernelのデバッグ情報がいるので、debuginfoのRPMをインストールします<sup>1</sup>。</p>
<pre>
 $ uname -a
Linux localhost.localdomain 2.6.18-128.1.16.el5 #1 SMP Tue Jun 30 06:10:28 EDT 2009 i686 i686 i386 GNU/Linux

 $ wget http://debuginfo.centos.org/5/i386/kernel-debuginfo-2.6.18-128.1.16.el5.i686.rpm
 $ wget http://debuginfo.centos.org/5/i386/kernel-debuginfo-common-2.6.18-128.1.16.el5.i686.rpm
 $ rpm -ivh kernel-debuginfo-common-2.6.18-128.1.16.el5.i686.rpm kernel-debuginfo-2.6.18-128.1.16.el5.i686.rpm
</pre>
<p>んで、crashコマンド実行。<br />
SVR4 UNIXのcrashコマンドをベースにGDBを統合したやつだそうで<sup>2</sup>、GDBになじんでる私には結構使いやすいです。</p>
<div class="igBar"><span id="lcode-2"><a href="#" onclick="javascript:showPlainTxt('code-2'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-2">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$ crash</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; KERNEL: /usr/lib/debug/lib/modules/<span style="color:#800000;color:#800000;">2</span>.<span style="color:#800000;color:#800000;">6</span>.<span style="color:#800000;color:#800000;">18</span>-<span style="color:#800000;color:#800000;">128</span>.<span style="color:#800000;color:#800000;">1</span>.<span style="color:#800000;color:#800000;">16</span>.<span style="">el5</span>/vmlinux</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; DUMPFILE: /dev/crash</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; CPUS: <span style="color:#800000;color:#800000;">1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; DATE: Mon Jul <span style="color:#800000;color:#800000;">13</span> <span style="color:#800000;color:#800000;">02</span>:<span style="color:#800000;color:#800000;">17</span>:<span style="color:#800000;color:#800000;">05</span> <span style="color:#800000;color:#800000;">2009</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; UPTIME: <span style="color:#800000;color:#800000;">06</span>:<span style="color:#800000;color:#800000;">52</span>:<span style="color:#800000;color:#800000;">42</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">LOAD AVERAGE: <span style="color:#800000;color:#800000;">0</span>.<span style="color:#800000;color:#800000;">16</span>, <span style="color:#800000;color:#800000;">0</span>.<span style="color:#800000;color:#800000;">03</span>, <span style="color:#800000;color:#800000;">0</span>.<span style="color:#800000;color:#800000;">01</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;TASKS: <span style="color:#800000;color:#800000;">86</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; NODENAME: localhost.<span style="">localdomain</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp;RELEASE: <span style="color:#800000;color:#800000;">2</span>.<span style="color:#800000;color:#800000;">6</span>.<span style="color:#800000;color:#800000;">18</span>-<span style="color:#800000;color:#800000;">128</span>.<span style="color:#800000;color:#800000;">1</span>.<span style="color:#800000;color:#800000;">16</span>.<span style="">el5</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp;VERSION: #1 SMP Tue Jun <span style="color:#800000;color:#800000;">30</span> <span style="color:#800000;color:#800000;">06</span>:<span style="color:#800000;color:#800000;">10</span>:<span style="color:#800000;color:#800000;">28</span> EDT <span style="color:#800000;color:#800000;">2009</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp;MACHINE: i686&nbsp; <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;color:#800000;">1197</span> Mhz<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; MEMORY: <span style="color:#800000;color:#800000;">758</span>.<span style="color:#800000;color:#800000;">9</span> MB</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PID: <span style="color:#800000;color:#800000;">3848</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp;COMMAND: <span style="color:#CC0000;">"crash"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; TASK: ef67c000&nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span>THREAD_INFO: d9120000<span style="color:#006600; font-weight:bold;">&#93;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CPU: <span style="color:#800000;color:#800000;">0</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp;STATE: TASK_RUNNING <span style="color:#006600; font-weight:bold;">&#40;</span>ACTIVE<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;crash&gt; set <span style="color:#800000;color:#800000;">1</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; PID: <span style="color:#800000;color:#800000;">1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">COMMAND: <span style="color:#CC0000;">"init"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;TASK: c16f5aa0&nbsp; <span style="color:#006600; font-weight:bold;">&#91;</span>THREAD_INFO: c16f6000<span style="color:#006600; font-weight:bold;">&#93;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; CPU: <span style="color:#800000;color:#800000;">0</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; STATE: TASK_INTERRUPTIBLE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;crash&gt; p $tmp = jiffies</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; $<span style="color:#800000;color:#800000;">1</span> = <span style="color:#800000;color:#800000;">24873000</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;crash&gt; x modprobe_path</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; 0xc0680be0 &lt;modprobe_path&gt;:&nbsp; &nbsp; &nbsp;das</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;crash&gt; show convenience</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;$tmp = <span style="color:#800000;color:#800000;">24873000</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;$__ = void</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;$_ = <span style="color:#006600; font-weight:bold;">&#40;</span>examine_i_type *<span style="color:#006600; font-weight:bold;">&#41;</span> 0xc0680be0 <span style="color:#CC0000;">"/sbin/modprobe"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;crash&gt; exit </div>
</li>
</ol>
</div>
</div>
</div>
<p>
gdbスクリプトをsourceで読み込むこともできる。<br />
まだ、まともな使い方は全然してないけど、Debug Hacksにいろいろ書いてあるので、それを読みながらやる予定。<br />
<table class="amazonBanner amazonTable" summary="Debug Hacks -デバッグを極めるテクニック&amp;ツール">
	<tbody>
		<tr>
			<td rowspan="4" class="amazonImageTable"><a href="http://ecx.images-amazon.com/images/I/41TmOAawDsL.jpg" title="Debug Hacks -デバッグを極めるテクニック&amp;ツール"><img src="http://ecx.images-amazon.com/images/I/41TmOAawDsL._SL160_.jpg" alt="Debug Hacks -デバッグを極めるテクニック&amp;ツール" style="border:none ! important; width:100px;" /></a></td> 
			<td style="height:36px;" class="amazonName"><a href="http://www.amazon.co.jp/Debug-Hacks-%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%82%92%E6%A5%B5%E3%82%81%E3%82%8B%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E3%83%84%E3%83%BC%E3%83%AB-%E5%90%89%E5%B2%A1/dp/4873114047%3FSubscriptionId%3DAKIAJCPLMOWTU2MWO7FQ%26tag%3Dgikogeek-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873114047" title="Debug Hacks -デバッグを極めるテクニック&amp;ツール">Debug Hacks -デバッグを極めるテクニック&amp;ツール</a></td>
		</tr>
		<tr>
			<td style="height:36px;"><a href="http://www.amazon.co.jp/review/product/4873114047%3FSubscriptionId%3DAKIAJCPLMOWTU2MWO7FQ%26tag%3Dgikogeek-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D5143%26creativeASIN%3D4873114047" title="Debug Hacks -デバッグを極めるテクニック&amp;ツール" class="bold">レビューを見る (3)</a></td>
		</tr>
		<tr>
			<td style="height:36px;"><a href="http://www.amazon.co.jp/gp/registry/wishlist/add-item.html%3Fasin.0%3D4873114047%26SubscriptionId%3DAKIAJCPLMOWTU2MWO7FQ%26tag%3Dgikogeek-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D5143%26creativeASIN%3D4873114047" title="Debug Hacks -デバッグを極めるテクニック&amp;ツール">欲しいものリストに追加</a></td>
		</tr>
		<tr>
			<td style="height:36px;"><span class="amazonPrice">価格:3360円 在庫あり。</span><span class="amazonCopy"><small>powered by <a href="http://www.amazon.co.jp/">Amazon.co.jp</a></small></span></td>
		</tr>
	</tbody>
</table></p>
<ol class="footnotes"><li id="footnote_0_58" class="footnote">最初、yumでinstallしたら、なぜか2.6.18-92.1.6.el5.centos.plusが入りました。kernelバージョンと合ってないので、rpmコマンドで入れなおし。</li><li id="footnote_1_58" class="footnote"><a href="http://people.redhat.com/anderson/crash_whitepaper/">Crash Whitepaper</a>のAbstract参照</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.ginriki.net/wd/2009/07/13/58/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dmesgによるHDDデバイス名探し</title>
		<link>http://www.ginriki.net/wd/2008/08/10/9/</link>
		<comments>http://www.ginriki.net/wd/2008/08/10/9/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 20:05:36 +0000</pubDate>
		<dc:creator>ginriki</dc:creator>
				<category><![CDATA[dmesg]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[デバイス名]]></category>

		<guid isPermaLink="false">http://www.gikogeek.net/wd/?p=9</guid>
		<description><![CDATA[ひさびさ更新。
今回は、HDDデバイス名をdmesgコマンドで調べる時の事を考えてみます。
dmesgで出力されるメッセージは結構長いので、grepなどの検索を利用したいのですが、HDDがPATA(=IDE)接続のときと [...]]]></description>
			<content:encoded><![CDATA[<p>ひさびさ更新。</p>
<p>今回は、HDDデバイス名をdmesgコマンドで調べる時の事を考えてみます。<br />
dmesgで出力されるメッセージは結構長いので、grepなどの検索を利用したいのですが、HDDがPATA(=IDE)接続のときと、SATA接続のときで、検索パターンを変えないといかんです。そのパターンについて以下に記述。</p>
<p>なお、以下の方法はLinux Kernel2.6系の話です。<br />
Linux Kernel2.4系だと、SATAもhdaとかで認識するらしいので。</p>
<p>* HDDがPATAの場合<br />
dmesg | grep hdを使います。</p>
<pre>
$ dmesg | grep hd
    ide0: BM-DMA at 0x1810-0x1817, BIOS settings: hda:DMA, hdb:pio
hda: TOSHIBA MK4025GASL, ATA DISK drive
hda: max request size: 128KiB
hda: 78140160 sectors (40007 MB), CHS=65535/16/63, UDMA(100)
hda: cache flushes supported
 hda: hda1
SCSI device sda: 40088160 512-byte hdwr sectors (20525 MB)
SCSI device sda: 40088160 512-byte hdwr sectors (20525 MB)
</pre>
<p>hda: TOSHIBA MK4025GASL, ATA DISK drive<br />
っていうところで、型番がわかります。</p>
<p>* HDDがSATA接続の場合<br />
HDDはsd～で認識されるので、dmesg | grep sd としたいところですが、<br />
それだと型番が表示されません。とはいえ、grep sdで引っかかる行の直前に型番が表示されるので、<br />
dmesg | grep -B 5 sd<br />
として、grepでマッチした行の前5行分も表示すると良いでしょう。lessで見ながら検索するのもお勧め。</p>
<pre>
$ dmesg | grep -B 5 sd
ata1.00: ATA-8: Hitachi HDP725050GLA360, GM4OA52A, max UDMA/133
ata1.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 0/32)
ata1.00: configured for UDMA/133
  Vendor: ATA       Model: Hitachi HDP72505  Rev: GM4O
  Type:   Direct-Access                      ANSI SCSI revision: 05
SCSI device sda: 976773168 512-byte hdwr sectors (500108 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
SCSI device sda: 976773168 512-byte hdwr sectors (500108 MB)
sda: Write Protect is off
sda: Mode Sense: 00 3a 00 00
SCSI device sda: drive cache: write back
 sda: sda1 sda2 sda3
sd 0:0:0:0: Attached scsi disk sda
--
ata4.00: configured for UDMA/133
  Vendor: HL-DT-ST  Model: DVDRAM GH20NS10   Rev: EL00
  Type:   CD-ROM                             ANSI SCSI revision: 05
  Vendor: ATA       Model: ST3750640AS       Rev: 3.AA
  Type:   Direct-Access                      ANSI SCSI revision: 05
SCSI device sdb: 1465149168 512-byte hdwr sectors (750156 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 3a 00 00
SCSI device sdb: drive cache: write back
SCSI device sdb: 1465149168 512-byte hdwr sectors (750156 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 3a 00 00
SCSI device sdb: drive cache: write back
 sdb: unknown partition table
sd 3:0:0:0: Attached scsi disk sdb
--
...
</pre>
<p>まず、注目する箇所は以下、<br />
  Vendor: ATA       Model: Hitachi HDP72505  Rev: GM4O<br />
  Type:   Direct-Access                      ANSI SCSI revision: 05</p>
<p>自分の経験上、Vendor: ATA, Type:   Direct-AccessだとHDDなのだと思います。<br />
型番はModel: ～　と出力されるのですが、場合によって型番の末尾が省略されるので注意です。<br />
今回の場合、型番の正式名称は、<br />
ata1.00: ATA-8: Hitachi HDP725050GLA360, GM4OA52A, max UDMA/133<br />
の行のHDP725050GLA360になります。</p>
<p>もうひとつのHDDは省略されておらず、<br />
  Vendor: ATA       Model: ST3750640AS       Rev: 3.AA<br />
  Type:   Direct-Access                      ANSI SCSI revision: 05<br />
から、ST3750640ASになります。</p>
<h3>SATA HDDがsda等として認識される理由 (SCSIに見える理由)</h3>
<p>http://okwave.jp/qa3351535.htmlより引用:</p>
<ul>
<p>カーネルのファイルシステムの階層構造の問題で，<br />
SATAの最下層のデバイスドライバsata-strageなどがその上位のプロトコルドライバとしてscsi_modを指定しているためです。<br />
つまりアプリから見るとSCSIディスクにみえるのはsata-strageがSCSIプロトコルをエミュレーションしているためです。</p>
<p>これに対してIDEデバイスはディスクドライバとしてide-diskなどがありますからちゃんとIDEに見えます。</p>
<p>USBメモリなども同じ理由でSCSIに見える場合が多いと思います。
</ul>
<h3>HDDインターフェイスの名称</h3>
<p><a href="http://ja.wikipedia.org/wiki/Advanced_Technology_Attachment#IDE">Wikipedia</a>によると、<br />
HDDインターフェイスの名称は出現年の古い順に<br />
IDE（製品会社独自の規格名) -> ATA(統一規格名) -> SATA(統一規格名)、PATA(=ATA)<br />
っていうことらしい。<br />
IDEをベースにATA規格ができたから、IDE = ATAと呼ばれるようになったようです。<br />
その後、新規格のSATAが出てきて、昔のATAをPATAと呼ぶようになったと。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ginriki.net/wd/2008/08/10/9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ゼロ番地を先頭とするページにマップする</title>
		<link>http://www.ginriki.net/wd/2007/06/28/21/</link>
		<comments>http://www.ginriki.net/wd/2007/06/28/21/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 07:47:07 +0000</pubDate>
		<dc:creator>ginriki</dc:creator>
				<category><![CDATA[C言語]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mmap]]></category>
		<category><![CDATA[メモリ]]></category>

		<guid isPermaLink="false">http://www.gikogeek.net/wd/?p=21</guid>
		<description><![CDATA[
mmapのflags引数にMAP_FIXEDフラグを指定することで、OSの実装によってはゼロ番地を先頭とするページにマップできます*1
たとえば、i386以降のCPU, Vine Linux 4.0, gcc-4.1. [...]]]></description>
			<content:encoded><![CDATA[<div class="section">
<p>mmapのflags引数にMAP_FIXEDフラグを指定することで、OSの実装によってはゼロ番地を先頭とするページにマップできます<span class="footnote"><a href="/gikogeek/#f1" name="fn1" title="SUSv3では、「MAP_FIXEDフラグを指定した場合、start引数はマップされるページのヒントとなるアドレスではなく、マップさせたいページのアドレスを意味するようになり、マップに失敗した場合はエラーを返す」としか書いてありません。よって、startに0を指定した場合は必ず失敗するようにmmapを実装しても仕様を満たします。">*1</a></span></p>
<p>たとえば、i386以降のCPU, Vine Linux 4.0, gcc-4.1.1を使った環境で以下のコードをコンパイルして実行するとゼロ番地にアクセスできます。</p>
<pre class="syntax-highlight">
<span class="synPreProc">#include </span><span class="synConstant">&#60;sys/mman.h&#62;</span>
<span class="synPreProc">#include </span><span class="synConstant">&#60;unistd.h&#62;</span>
<span class="synPreProc">#include </span><span class="synConstant">&#60;stdio.h&#62;</span>

<span class="synType">int</span> main(){
<span class="synType">int</span>* p = (<span class="synType">int</span>*)mmap(<span class="synConstant">0</span>, getpagesize(), PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, <span class="synConstant">0</span>, <span class="synConstant">0</span>);
*p = <span class="synConstant">1</span>;

printf(<span class="synConstant">&#34;*(int*)</span><span class="synSpecial">%d</span><span class="synConstant"> = </span><span class="synSpecial">%d\n</span><span class="synConstant">&#34;</span>, (<span class="synType">int</span>)p, *(<span class="synType">int</span>*)<span class="synConstant">0</span>);
<span class="synStatement">return</span> <span class="synConstant">0</span>;
}
</pre>
<p>実行すると以下のようになります。</p>
<pre class="syntax-highlight">
$ gcc main.c
$ ./a.out
*<span class="synStatement">(</span>int*<span class="synStatement">)</span><span class="synConstant">0</span> <span class="synStatement">=</span> <span class="synConstant">1</span>
$
</pre>
<p>以下、注意点。</p>
<p>Cの仕様上では、start引数に0を指定しても数値の0を指すとは限りません。なぜなら、start引数の型はvoid*であり、Cの仕様ではポインタを書くべきところに書かれた0は、コンパイル時にヌル・ポインタに変換されることが保証されているからです<span class="footnote"><a href="/gikogeek/#f2" name="fn2" title="http://www.kouno.jp/home/c_faq/c5.html 5.2項">*2</a></span>（コンパイラがポインタ型の式だと判断できる場合のみ）。</p>
<p>なお、C++でもほとんど同様のようです<span class="footnote"><a href="/gikogeek/#f3" name="fn3" title="注解 C++ リファレンスマニュアル 4.6: ISBN 4901280392   といっても、これ古い仕様みたいですけど・・・">*3</a></span>。自分には、CとC++の違いは、C言語の場合、#define NULL (void*)0 か　#define NULL 0 どちらでもありうるが、C++だと #define NULL (void*)0 がありえないということしかわかりませんでした。</p>
<p>よって、ハードウェア, OS, C/C++のコンパイラによっては、start引数で渡す値がコンパイル時に0ではない値に変換されているかもしれないので、ソースコードでstart引数に0を指定したからといって、実行時にmmapでマップされたページが必ずしもゼロ番地ではないかも知れないことに注意です。</p>
<p></p>
<p>以上、何の役に立つかわからないけど面白かったのでメモっときます。</p>
<p>ちなみにWindowsの場合、ゼロ番地から64KB分<span class="footnote"><a href="/gikogeek/#f4" name="fn4" title="Windows2000の場合。Windows98だと4KB分">*4</a></span>のアドレスをユーザプログラムのプログラマがVirtualAlloc APIで確保(予約)することはできません。これは、ヌル・ポインタが指すアドレス先に値を代入しようとしたときに、必ずメモリアクセス違反が発生するようにするために、意図的にそう決まっています<span class="footnote"><a href="/gikogeek/#f5" name="fn5" title="Advanced Windows 13.2 :ISBN 4-7561-3805-5">*5</a></span></p>
<p>ということは、Windowsが動くような環境において、ヌル・ポインタが0と一致する（させる）のは当然だとMicrosoftは考えているのでしょうね。</p>
</div>
<div class="footnote">
<p class="footnote"><a href="/gikogeek/#fn1" name="f1">*1</a>：SUSv3では、「MAP_FIXEDフラグを指定した場合、start引数はマップされるページのヒントとなるアドレスではなく、マップさせたいページのアドレスを意味するようになり、マップに失敗した場合はエラーを返す」としか書いてありません。よって、startに0を指定した場合は必ず失敗するようにmmapを実装しても仕様を満たします。</p>
<p class="footnote"><a href="/gikogeek/#fn2" name="f2">*2</a>：<a href="http://www.kouno.jp/home/c_faq/c5.html" target="_blank">http://www.kouno.jp/home/c_faq/c5.html</a> 5.2項</p>
<p class="footnote"><a href="/gikogeek/#fn3" name="f3">*3</a>：注解 C++ リファレンスマニュアル 4.6: ISBN 4901280392   といっても、これ古い仕様みたいですけど・・・</p>
<p class="footnote"><a href="/gikogeek/#fn4" name="f4">*4</a>：Windows2000の場合。Windows98だと4KB分</p>
<p class="footnote"><a href="/gikogeek/#fn5" name="f5">*5</a>：Advanced Windows 13.2 :ISBN 4-7561-3805-5</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.ginriki.net/wd/2007/06/28/21/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
