<?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>Jkx@home &#187; linux</title>
	<atom:link href="http://www.larsen-b.com/tags/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://www.larsen-b.com</link>
	<description>Titanium Exposé</description>
	<lastBuildDate>Tue, 31 Jan 2012 23:53:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language></language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Connect NGW100 Linux (AVR32) to Arduino with I2C</title>
		<link>http://www.larsen-b.com/Article/398.html</link>
		<comments>http://www.larsen-b.com/Article/398.html#comments</comments>
		<pubDate>Sun, 08 Jan 2012 01:39:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openwrt]]></category>

		<guid isPermaLink="false">http://www.larsen-b.com/?p=398</guid>
		<description><![CDATA[For a Linux embedded training, I need to find something fun to plug on an AVR32 board. The board used for the training is a NGW100 board. I decided to try to use the I2C bus. I have several I2C stuff on the desk, but nothing really fun and I don&#8217;t want to solder a [...]]]></description>
			<content:encoded><![CDATA[<p>For a Linux embedded training, I need to find something fun to plug on an AVR32 board. The board used for the training is a <a href="http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4102">NGW100</a> board. I decided to try to use the <a href="http://en.wikipedia.org/wiki/I%C2%B2C">I2C</a> bus. I have several I2C stuff on the desk, but nothing really fun and I don&#8217;t want to solder a lot of stuff, and spend a lot of time on this. I decided to use a Arduino board as a I2C slave device and plug this to the NGW100 board.</p>
<p><strong>First step: S</strong>imply use the Arduino IDE and the <a href="http://arduino.cc/en/Reference/Wire">Wire lib</a>. I use an <a href="http://www.seeedstudio.com/blog/tag/seeeduino/">Seeeduino</a> because I need an Arduino that works at 3.3v level. Here the code :</p>
<pre><span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;Wire.h&gt;</span></strong></span>
<strong>void</strong> <span style="color: #2040a0;">setup</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
<span style="color: #4444ff;"><strong>{</strong></span>
  <span style="color: #2040a0;">Wire</span>.<span style="color: #2040a0;">begin</span><span style="color: #4444ff;">(</span><span style="color: #ff0000;">4</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>                <span style="color: #444444;">// join i2c bus with address #4</span>
  <span style="color: #2040a0;">Wire</span>.<span style="color: #2040a0;">onReceive</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">receiveEvent</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span> <span style="color: #444444;">// register event</span>
  <span style="color: #2040a0;">Wire</span>.<span style="color: #2040a0;">onRequest</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">requestEvent</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span> <span style="color: #444444;">// register event</span>
  <span style="color: #2040a0;">Serial</span>.<span style="color: #2040a0;">begin</span><span style="color: #4444ff;">(</span><span style="color: #ff0000;">38400</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>           <span style="color: #444444;">// start serial for output</span>
  <span style="color: #2040a0;">Serial</span>.<span style="color: #2040a0;">println</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Boot Ok"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>void</strong> <span style="color: #2040a0;">loop</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
<span style="color: #4444ff;"><strong>{ </strong></span><span style="color: #2040a0;">delay</span><span style="color: #4444ff;">(</span><span style="color: #ff0000;">100</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span><span style="color: #4444ff;"> </span><span style="color: #4444ff;"><strong>}</strong></span>

<strong>void</strong> <span style="color: #2040a0;">receiveEvent</span><span style="color: #4444ff;">(</span><strong>int</strong> <span style="color: #2040a0;">howMany</span><span style="color: #4444ff;">)</span>
<span style="color: #4444ff;"><strong>{</strong></span>
  <strong>char</strong> <span style="color: #2040a0;">c</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">NULL</span><span style="color: #4444ff;">;</span>
  <strong>while</strong><span style="color: #4444ff;">(</span><span style="color: #2040a0;">Wire</span>.<span style="color: #2040a0;">available</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">)</span> <span style="color: #444444;">// loop through all</span>
  <span style="color: #4444ff;"><strong>{</strong></span>
    <span style="color: #2040a0;">c</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">Wire</span>.<span style="color: #2040a0;">receive</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span> <span style="color: #444444;">// receive byte as a character</span>
    <span style="color: #2040a0;">Serial</span>.<span style="color: #2040a0;">print</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">c</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>         <span style="color: #444444;">// print the character</span>
  <span style="color: #4444ff;"><strong>}</strong></span>
  <span style="color: #2040a0;">Serial</span>.<span style="color: #2040a0;">println</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
  <span style="color: #2040a0;">Serial</span>.<span style="color: #2040a0;">println</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"==="</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>void</strong> <span style="color: #2040a0;">requestEvent</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
<span style="color: #4444ff;"><strong>{</strong></span>
  <span style="color: #2040a0;">Serial</span>.<span style="color: #2040a0;">println</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"read"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
  <span style="color: #2040a0;">Wire</span>.<span style="color: #2040a0;">send</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Hello world from Arduino"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span></pre>
<p>To test the Arduino I used a <a href="http://dangerousprototypes.com/docs/Bus_Pirate">Bus Pirate</a>, this is quite simple and fun, here a little snipset of my initial test with the BP (note the string are different). The I2C slave is at the 0&#215;4 address (check the setup()).</p>
<pre>Searching I2C address space. Found devices at:
0x08(0x04 W) 0x09(0x04 R) 

Read content from the device, 'ABCD'
I2C&gt;[0x09 rrrrrr]
I2C START BIT
WRITE: 0x09 ACK
READ: 0x41
READ:  ACK 0x42
READ:  ACK 0x43
READ:  ACK 0x44
READ:  ACK 0xFF
READ:  ACK 0xFF
NACK
I2C STOP BIT
I2C&gt;

send content to the device 'ABC'
I2C&gt;[0x08 0x41 0x42 0x43]
I2C START BIT
WRITE: 0x08 ACK
WRITE: 0x41 ACK
WRITE: 0x42 ACK
WRITE: 0x43 ACK
I2C STOP BIT</pre>
<p><strong>Second step: </strong> Plug the Arduino to the NGW100. I used the wrapping technique. Simply connect SDA, SCL, and GND. (NGW100 pinouts : SDA=&gt;9, SCL=&gt;10, GND=&gt;2)</p>
<p><img style="border: 0px initial initial;" title="NGW100-AVR32 to Arduino" src="http://jkx.larsen-b.com/photos/blog/2012_01_05_13_57_32_001.sized.jpg" alt="" width="640" height="480" /></p>
<p>On Linux, load the I2C-GPIO kernel module. On <a href="http://openwrt.org">OpenWRT</a> (used on the NGW100), simply load the <strong>kmod</strong>-<strong>i2c-gpio</strong> package.</p>
<p><strong>Final step:</strong> If everything is Ok, we can now test the communication. I used a small piece of C code to deal with I2C on Linux.</p>
<pre><span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;string.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;stdio.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;stdlib.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;linux/i2c-dev.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;sys/ioctl.h&gt;</span></strong></span>
<span style="color: #0000ff;"><strong>#include <span style="color: #008000;">&lt;fcntl.h&gt;</span></strong></span>

<strong>void</strong> <span style="color: #2040a0;">i2c_run</span><span style="color: #4444ff;">(</span><strong>void</strong><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>
    <strong>int</strong> <span style="color: #2040a0;">file</span><span style="color: #4444ff;">;</span>
    <strong>char</strong> <span style="color: #2040a0;">filename</span><span style="color: #4444ff;">[</span><span style="color: #ff0000;">40</span><span style="color: #4444ff;">]</span><span style="color: #4444ff;">;</span>
    <strong>int</strong> <span style="color: #2040a0;">addr</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">0x4</span><span style="color: #4444ff;">;</span>
    <strong>char</strong> <span style="color: #2040a0;">buf</span><span style="color: #4444ff;">[</span><span style="color: #ff0000;">32</span><span style="color: #4444ff;">]</span> <span style="color: #4444ff;">=</span> <span style="color: #4444ff;"><strong>{</strong></span><span style="color: #ff0000;">0</span><span style="color: #4444ff;"><strong>}</strong></span><span style="color: #4444ff;">;</span>
    <strong>int</strong> <span style="color: #2040a0;">i</span><span style="color: #4444ff;">;</span>

    <span style="color: #2040a0;">sprintf</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">filename</span>,<span style="color: #008000;">"/dev/i2c-0"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
    <strong>if</strong> <span style="color: #4444ff;">(</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">file</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">open</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">filename</span>,<span style="color: #2040a0;">O_RDWR</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;">&lt;</span> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>
        <span style="color: #2040a0;">printf</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Failed to open the bus."</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
        <span style="color: #2040a0;">exit</span><span style="color: #4444ff;">(</span><span style="color: #ff0000;">1</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
    <span style="color: #4444ff;"><strong>}</strong></span>

    <strong>if</strong> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">ioctl</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">file</span>,<span style="color: #2040a0;">I2C_SLAVE</span>,<span style="color: #2040a0;">addr</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;">&lt;</span> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>
        <span style="color: #2040a0;">printf</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Failed to acquire bus access and/or talk to slave.<span style="color: #77dd77;">\n</span>"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
        <span style="color: #2040a0;">exit</span><span style="color: #4444ff;">(</span><span style="color: #ff0000;">1</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
    <span style="color: #4444ff;"><strong>}</strong></span>

    <span style="color: #2040a0;">i</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">24</span><span style="color: #4444ff;">;</span>
    // <span style="color: #2040a0;">read</span> <span style="color: #2040a0;">I2C</span>
    <strong>if</strong> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">read</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">file</span>,<span style="color: #2040a0;">buf</span>,<span style="color: #2040a0;">i</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;">!</span><span style="color: #4444ff;">=</span> <span style="color: #2040a0;">i</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>
      <span style="color: #2040a0;">printf</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Failed to read from the i2c bus.<span style="color: #77dd77;">\n</span>"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
    <span style="color: #4444ff;"><strong>}</strong></span> <strong>else</strong> <span style="color: #4444ff;"><strong>{</strong></span>
      <span style="color: #2040a0;">printf</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Read %d bytes from I2C: [%s]<span style="color: #77dd77;">\n</span>"</span>,<span style="color: #2040a0;">i</span>,<span style="color: #2040a0;">buf</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
    <span style="color: #4444ff;"><strong>}</strong></span>

    <span style="color: #2040a0;">sprintf</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">buf</span>,<span style="color: #008000;">"IC2 from Linux to Arduino"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
    <span style="color: #2040a0;">i</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">strlen</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">buf</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
    <strong>if</strong> <span style="color: #4444ff;">(</span><span style="color: #2040a0;">write</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">file</span>,<span style="color: #2040a0;">buf</span>,<span style="color: #2040a0;">i</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;">!</span><span style="color: #4444ff;">=</span> <span style="color: #2040a0;">i</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;"><strong>{</strong></span>
        <span style="color: #2040a0;">printf</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Failed to write to the i2c bus.<span style="color: #77dd77;">\n</span>"</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
    <span style="color: #4444ff;"><strong>}</strong></span> <strong>else</strong> <span style="color: #4444ff;"><strong>{</strong></span>
      <span style="color: #2040a0;">printf</span><span style="color: #4444ff;">(</span><span style="color: #008000;">"Sent %d bytes to I2C: [%s]<span style="color: #77dd77;">\n</span>"</span>,<span style="color: #2040a0;">i</span>,<span style="color: #2040a0;">buf</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
    <span style="color: #4444ff;"><strong>}</strong></span>
<span style="color: #4444ff;"><strong>}</strong></span>

<strong>int</strong> <span style="color: #2040a0;">main</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
<span style="color: #4444ff;"><strong>{</strong></span>
  <span style="color: #2040a0;">i2c_run</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">;</span>
  <strong>return</strong> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">;</span>
<span style="color: #4444ff;"><strong>}</strong></span></pre>
<p>As you can see this code is a bit rude, but works really well : Read the I2C bus, and send a sample string, a proof ? :)</p>
<p><img style="border: 0px initial initial;" title="openWRT I2C" src="http://jkx.larsen-b.com/photos/blog/openWRT_I2C_001.jpg" alt="" width="690" height="440" /></p>
<p>Of course, I used string values but in real life a small protocol shoud be used. Another important thing: I used a NGW100 but you can use the same idea on all Linux embedded board like the Fonera, or anything else.</p>
<p><strong>Update:</strong> Of course you can use the <a href="http://lm-sensors.org/wiki/I2CTools">i2c-tools</a> on Linux to detect your own device. To do that : Grab the i2c-tools source, and cross compile it for the AVR32. (You only have to change the CC path in the Makefile).</p>
<p><strong>/Enjoy small Linux</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/398.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Howto use AVR Dragon Jtag on Linux (Avarice + avr-gdb +DDD)</title>
		<link>http://www.larsen-b.com/Article/315.html</link>
		<comments>http://www.larsen-b.com/Article/315.html#comments</comments>
		<pubDate>Sun, 30 Nov 2008 15:45:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[gdb]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.larsen-b.com/?p=315</guid>
		<description><![CDATA[I bought a couple of months ago a little AVR Dragon card. My initial plan was to use it for debuging programs with the embbeded JTAG. But I run into several issue with that, mainly because the lack of doc on this topic. So, here we are ;)
The AVR Dragon is nice because you can [...]]]></description>
			<content:encoded><![CDATA[<p>I bought a couple of months ago a little <a href="http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=3891">AVR Dragon</a> card. My initial plan was to use it for debuging programs with the embbeded JTAG. But I run into several issue with that, mainly because the lack of doc on this topic. So, here we are ;)</p>
<p>The AVR Dragon is nice because you can use it as a small developpement device without any other requirement: Simply drop the needed ATMega on the board, some little wrapping for : Jtag + power supply.</p>
<p><a href="http://jkx.larsen-b.com/gallery/blog/pb163528?full=1"><img class="alignnone" title="AVR Dragon + ATMega 16" src="http://jkx.larsen-b.com/photos/blog/pb163528.sized.jpg" alt="" width="640" height="410" /></a></p>
<p>As you can see, this is compact and nothing else is needed. The power supply come from the USB port, and I soldered a DIP on the board.. and that&#8217;s it.</p>
<p>I use the Jtag connector, so now I can use a real debugger instead of playing with the UART. Simply put a breakpoint, and enjoy :) By this way, I figure out that most of the time I simply push some stuff in arrays, and inspect them with debugger. This is really efficient. For example, last week I need to fix a timing issue with a IR sensor, simply wrap the little board, and push all interrupts in a array with the related timing. Of course, this can be done with a serial connection too, but it will take more time, and even worst if you encounter a bug, you will have to find where is it (the UART printf, or the code itself) ..</p>
<h4>So, how to use this with a Linux OS ?</h4>
<p>First you need to use <a href="http://avarice.sourceforge.net/">AVaRICE</a> to program the ATMega with a command like this :</p>
<pre>avarice -g -j usb --erase --program --file main.hex :4242</pre>
<p>Here the result:</p>
<p><img class="alignnone" title="Avarice" src="http://jkx.larsen-b.com/photos/blog/avarice.sized.jpg" alt="" width="640" height="476" /></p>
<p>AVaRICE flash the hex file to the ATMega, and wait for a <a href="http://en.wikipedia.org/wiki/GNU_Debugger">GDB</a> connection on port 4242. GDB is fine, but not really visual ;)</p>
<p>Let&#8217;s take a look at <a href="http://www.gnu.org/software/ddd/">DDD</a></p>
<p>To use DDD with avr-gdb (the gdb for AVR), you need to edit a config file, for example gdb.conf and put this in :</p>
<pre>file main.out
target remote localhost:4242</pre>
<p>And the final command, just launch DDD like this :</p>
<pre>ddd --debugger "avr-gdb -x gdb.conf"</pre>
<p>Next step: Simply place some breakpoint, and the press &#8220;Cont&#8221; inue button in DDD. Et voilà :</p>
<p><a href="http://jkx.larsen-b.com/gallery/blog/ddd?full=1"><img class="alignnone" title="DDD" src="http://jkx.larsen-b.com/photos/blog/ddd.sized.jpg" alt="" width="438" height="640" /></a></p>
<p>I hope this little tuto will help people looking for a nice AVR debuger for the AVR on Linux (or any OSS system). The AVR Dragon is definitively a must have for low budget user in AVR scene.</p>
<p><strong>Enjoy bug ? :)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/315.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>2D benchmarks on Linux Nvidia, Intel, ATI: xrender</title>
		<link>http://www.larsen-b.com/Article/290.html</link>
		<comments>http://www.larsen-b.com/Article/290.html#comments</comments>
		<pubDate>Sat, 17 May 2008 01:48:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[ati]]></category>
		<category><![CDATA[drivers]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nvidia]]></category>
		<category><![CDATA[q6600]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.larsen-b.com/?p=290</guid>
		<description><![CDATA[For my new computer I bought a ATI HD 2600 PRO with a bunch of memory. This card has some really good 3D results, and works well on Linux. But I run into some issues with de xv extension on this board. In fact the driver (the free or binary one) doesn&#8217;t seems to support [...]]]></description>
			<content:encoded><![CDATA[<p>For my <a href="http://www.larsen-b.com/Article/271.html">new computer</a> I bought a ATI HD 2600 PRO with a bunch of memory. This card has some really good 3D results, and works well on Linux. But I run into some issues with de xv extension on this board. In fact the driver (the free or binary one) doesn&#8217;t seems to support <a href="http://en.wikipedia.org/wiki/Vertical_blanking_interval">sync on vblank</a>. So when a app try do display datas on the screen, some image destructions appear. This mainly occurs when I&#8217;m watching videos but in 3D games too. This is a really stupid bug or mis-feature. How can a serious video programmer can do that ?</p>
<p>After a couple of month, I decided it was enough, I was sick of this dirty stripes on screen. I tested every ATI driver one after one &#8230; (ATI opensource drivers have too bad performances to be used on a every days desktop, could you live without google-earth ? ) .. so I decided to go to other side, and bought a <a href="http://www.asus.com/products.aspx?l1=2&amp;l2=6&amp;l3=514&amp;l4=0&amp;model=1700&amp;modelmenu=1">Nvidia 8600GT from ASUS</a>. This card perform quite as the ATI in 3D, and have a affordable price. So I switched from ATI to Nvidia.</p>
<p>ATI offers better opensource support, but Nvidia binary driver is really nice to use and have better support today from stuffs like Compiz and Co.. and NO MORE STRIPES !! :)</p>
<p>A couple of weeks ago, I upgraded my <a href="http://www.ubuntu.com">Ubuntu</a> Gusty to Hardy. Everything was Ok, since I played with firefox.  Some heavy loaded pages (like Amazon, or Gmail) was damn sloowwwww !  Playing with scroll was a source &#8230;&#8230;<strong> grrrrrr</strong> &#8230;.Firefox on Hardy is 3.0b5. This version has a major &#8220;feature&#8221; the use a <a href="http://en.wikipedia.org/wiki/XRender">Xrender</a> for the page display. And this looks like Xrender is dawn slow on Nvidia cards .. In fact, Nvidia has already work on this <a href="http://www.phoronix.com/scan.php?page=article&amp;item=934&amp;num=1">kind of issue before.</a> Without looking forward I decided to run a little benchmark, with the help of friends with <a href="http://lists.freedesktop.org/archives/xorg/2006-March/013918.html">Xrenderbenchmark</a>. So here the results.</p>
<h1>Benchmarks</h1>
<p>Benchmarks was done by me and 2 firends, on Q6600 or E6600 Intel CPU running at 2.4Gh, with kernel 2.6.24.1. The graphs only show the Plain results (not Plains + Alpha, or Transformation) but the results are quite the same anyways.</p>
<p>Legend:</p>
<ul>
<li>8600GT/nv : Nividia 8600GT / Xorg  1.4.1git 32 bits / Nvidia GPL driver</li>
<li>8600GT/nvidia : Nividia 8600GT / Xorg 1.4.1git 32 bits / Nvidia binary driver ver: 169.12</li>
<li>8600GT/nividia-64 : Nvidia 8600GT / Xorg  1.4.1git 64 bits / Nvidia binary driver  ver: 169.12</li>
<li>Intel GMA X300 : Intel GMA 3000 / Xorg 1.4.0.9 64 bits / Intel GPL driver</li>
<li>ATI HD2600PRO : ATI HD 2600 Pro / Xorg 1.4.1git 64 bits / ATI GPL driver</li>
</ul>
<p>I split the results into two graphs for convenience.</p>
<p><img src="http://jkx.larsen-b.com/photos/blog/xrender_1.png" alt="" width="746" height="515" /></p>
<p>As you can see on this first part, numbers are really small, the Nvidia GPL driver is the worst : 5 times slower than any other one. Not a good news, and the binary one have some bad results on 2 tests. ATI HD and Nvidia drivers offer quite the same results, but remenber this is the GPL ATI driver ! &#8230; The Intel doesn&#8217;t  have a lot of linearity on this part.</p>
<p>But the next graph give us absolutely different picture !</p>
<p><img src="http://jkx.larsen-b.com/photos/blog/xrender_2.png" alt="" /></p>
<p>For every graph, Nvidia drivers (GPL, or binary, 32 or 64 bits) are at least 6 time slower. Intel perform very well, no surprise, this card are damn cool, perfect driver for linux.. but to slow in 3D to really rock. And ATI GPL driver is the clear winner of this benchmarks tests.</p>
<p>As my issue is the Nvidia one, I can comment the results, the GPL driver performs better than the binary one. This is not a big surprise cause, I can see it in Firefox, even it&#8217;s slow. There is difference between 64 bits and 32, but I guess this is more kernel related than the driver itself.</p>
<p>I&#8217;m not a video guru and only do that figure out what&#8217;s going on my computer. I publish in the hope it might help somebody else, and to find help.</p>
<p><strong>Update : </strong>The numbers can be found <a href="http://jkx.larsen-b.com/gallery/blog/xrender_results?full=1">here</a></p>
<p><em>Thanks to Ludo and Christian for their help ! </em></p>
<p><strong>Important update : <a href="http://www.larsen-b.com/Article/299.html">Check the new driver results !!</a></strong><a href="http://www.larsen-b.com/Article/299.html"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/290.html/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Howto reinstall / restore Grub with an Ubuntu</title>
		<link>http://www.larsen-b.com/Article/272.html</link>
		<comments>http://www.larsen-b.com/Article/272.html#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sata]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[After a windows fresh install, the windows setup decided to drop my MBR to put its stuff in. Fine .. but I want my grub back now !
This is an old trick, but udev added a little complexity, so let&#8217;s give it a try. First boot on a Ubunty CD, open a console and run:
(here [...]]]></description>
			<content:encoded><![CDATA[<p>After a windows fresh install, the windows setup decided to drop my MBR to put its stuff in. Fine .. but I want my grub back now !</p>
<p>This is an old trick, but udev added a little complexity, so let&#8217;s give it a try. First boot on a Ubunty CD, open a console and run:</p>
<p>(here my linux partition is sda2, second partition on a sata disk)</p>
<pre class="literal-block">mkdir /media/mnt
mount /dev/sda2 /media/mnt/
mount -o bind /dev/ /media/mnt/dev
chroot /media/mnt

=&gt; now you are on the destination disk, so you can install grub.
grub-install /dev/sda</pre>
<p>Of course you can do a lot more stuff, like changing fstab etc etc .. but the trick is to mount + mount bind + chroot</p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/272.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Playing with Realtime with Python</title>
		<link>http://www.larsen-b.com/Article/221.html</link>
		<comments>http://www.larsen-b.com/Article/221.html#comments</comments>
		<pubDate>Tue, 24 Jan 2006 08:54:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[rtc]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[For a little app, I need to send stream over UDP at a fixed rate. I have done severals tests w/ some buffers and sleep(), but I can&#8217;t achieve the desired speed. Mainly because sleep() doesn&#8217;t provide a stable enought result.
I decided to look at this a little deeply, and decided to use /dev/rtc to [...]]]></description>
			<content:encoded><![CDATA[<p>For a little app, I need to send stream over UDP at a fixed rate. I have done severals tests w/ some buffers and sleep(), but I can&#8217;t achieve the desired speed. Mainly because sleep() doesn&#8217;t provide a stable enought result.</p>
<p>I decided to look at this a little deeply, and decided to use <strong>/dev/rtc</strong> to do the trick. Here a little example of the stuff.</p>
<pre class="literal-block">from  fcntl import ioctl
import os, time

# some linux kernel header
RTC_IRQP_SET = 1074032652
RTC_PIE_ON =  28677
RTC_PIE_OFF = 28678

# open the realtime clock
f = open ("/dev/rtc", "r")
fd = f.fileno()

# 2048 freq
ioctl(fd,RTC_IRQP_SET,2048)
ioctl(fd,RTC_PIE_ON,0)

t0 = time.time()
interupt = 0

# the read will block until the next interrupt.
while interupt &lt; 1000 :
    os.read(fd,4)  # 4 = size of double
    interupt = interupt + 1

delta = time.time() - t0
print interupt / delta

# drop the scheduler
ioctl(fd,RTC_PIE_OFF,0)</pre>
<p>This is quite accurate enought, the only issue is that I&#8217;m unable to call the <em>sched_setscheduler()</em> from Python right now. So, if the host isn&#8217;t loaded I get the 2048 interrupts.. but it can be less :(</p>
<p><strong>Update</strong>:<br />
The <em>sched_setscheduler</em> can be done w/ a simple pyrex extension:</p>
<pre class="literal-block">cdef extern from "sched.h":
struct sched_param:
int sched_priority
int sched_setscheduler(int pid, int policy,sched_param  *p)

SCHED_FIFO = 1

def switchRTCPriority(nb):
cdef sched_param sp
sp.sched_priority = nb
sched_setscheduler (0,SCHED_FIFO , &amp;sp);</pre>
<p>After this quick Pyrex hack, I now have a accurate realtime interrupt in Python ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/221.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Playing music on soundcard without locking</title>
		<link>http://www.larsen-b.com/Article/194.html</link>
		<comments>http://www.larsen-b.com/Article/194.html#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[alsa]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[soundcard]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Why this soundcard allow me to play 2 mp3 at the same time while this doesn&#8217;t.. Hum good question. In fact to support this kind of stuff the sound card should support have some sub-device, to be sure .. simply aplay -l
Here on my shuttle .. not working
aplay -l
**** List of PLAYBACK Hardware Devices ****
card [...]]]></description>
			<content:encoded><![CDATA[<p>Why this soundcard allow me to play 2 mp3 at the same time while this doesn&#8217;t.. Hum good question. In fact to support this kind of stuff the sound card should support have some sub-device, to be sure .. simply <strong>aplay -l</strong></p>
<p>Here on my shuttle .. not working</p>
<pre class="literal-block">aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: IXP [ATI IXP], device 0: ATI IXP AC97 [ATI IXP AC97]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: IXP [ATI IXP], device 1: ATI IXP IEC958 [ATI IXP IEC958 (AC97)]
Subdevices: 1/1
Subdevice #0: subdevice #0</pre>
<p>Here on another box (VIA C3 based)</p>
<pre class="literal-block">aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: V8235 [VIA 8235], device 0: VIA 8235 [VIA 8235]
Subdevices: 4/4
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
card 0: V8235 [VIA 8235], device 1: VIA 8235 [VIA 8235]
Subdevices: 1/1
Subdevice #0: subdevice #0</pre>
<p>So yes the C3 can play 4 stream at the same time, while the AC97 doesn&#8217;t.</p>
<p>Another way to do this is to use <a class="reference" href="http://www.alsa-project.org/alsa-doc/doc-php/asoundrc.php#softmix">software mixing</a></p>
<p><strong>Update:</strong></p>
<p>To use the software mix in Alsa: simply change the pcm.default to pcm.dmix</p>
<pre class="literal-block">#pcm.default cards.pcm.default
pcm.default pcm.dmix</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/194.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Suspend to disc with Dell Latitude D400 on Linux</title>
		<link>http://www.larsen-b.com/Article/173.html</link>
		<comments>http://www.larsen-b.com/Article/173.html#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[acpi]]></category>
		<category><![CDATA[d400]]></category>
		<category><![CDATA[dell]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I now have a Dell Latitude D400 for 1 month. This little (really small) computer is pretty nice to use, but it right now, it&#8217;s really hard to have suspend working on this kind of stuff. The main reason: it only support ACPI (no APM), and ACPI isn&#8217;t well supported by the Linux kernel.
I have [...]]]></description>
			<content:encoded><![CDATA[<p>I now have a Dell Latitude D400 for 1 month. This little (really small) computer is pretty nice to use, but it right now, it&#8217;s really hard to have suspend working on this kind of stuff. The main reason: it only support ACPI (no APM), and ACPI isn&#8217;t well supported by the Linux kernel.</p>
<p>I have tested several way to fix this issue. The only that&#8217;s working fine right now, is to use swsup. So to make it work:</p>
<ul class="simple">
<li>install the latest 2.6.9 kernel (the 2.6.8 has a issue w/ agpart and drm)</li>
<li>in kernel select &#8216;ACPI -&gt; sleep state&#8217;</li>
<li>and &#8216;ACPI -&gt; swsup&#8217;</li>
<li>build the kernel</li>
<li>create a swap partition if you don&#8217;t have one (i resized a ntfs w/ qparted)</li>
<li>mkswap /dev/hda4 (for example)</li>
<li>add &#8216;resume=/dev/hda4&#8242; in your boot prompt (in grub for example)</li>
</ul>
<p>Now your system is ready. Reboot :) ..To put the the system in standby and dump the current state in the swap: <strong>echo 4 &gt; /proc/acpi/sleep</strong>.</p>
<p>Next step simply bind the power button on this action. This is done w/ the acpid.</p>
<pre class="literal-block">#!/bin/sh
# /etc/acpi/powerbtn.sh

# put the box in swsup mode
echo 4 &gt; /proc/acpi/sleep</pre>
<p>Beside the S2/S3 ACPI doesn&#8217;t work right now, swsup permit to have suspend to disk without too much trouble.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/173.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Linux Kernel Hackers remove the Philips USB Webcam support</title>
		<link>http://www.larsen-b.com/Article/151.html</link>
		<comments>http://www.larsen-b.com/Article/151.html#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Everybody hate binary kernel module: that&#8217;s clear, but sometimes that the only way to use some hardware.
This is really a bad news to all webcam users: USB kernel hackers decide to patch PWC kernel driver to avoid the use of the extended kernel module which is binary only. Check out this for more infos.
update: read [...]]]></description>
			<content:encoded><![CDATA[<p>Everybody hate binary kernel module: that&#8217;s clear, but sometimes that the only way to use some hardware.</p>
<p>This is really a bad news to all webcam users: USB kernel hackers decide to patch PWC kernel driver to avoid the use of the extended kernel module which is binary only. Check out <a class="reference" href="http://www.smcc.demon.nl/webcam/">this</a> for more infos.</p>
<p><strong>update</strong>: read this <a class="reference" href="http://groups.google.fr/groups?hl=fr&amp;lr=&amp;ie=UTF-8&amp;threadm=fa.hhodscn.11hs5b1%40ifi.uio.no&amp;rnum=9&amp;prev=/&amp;frame=on">thread</a>. Why Philips doesn&#8217;t provide spec ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/151.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ATI Radeon on Linux / *BSD &#8230;</title>
		<link>http://www.larsen-b.com/Article/150.html</link>
		<comments>http://www.larsen-b.com/Article/150.html#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[video card]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I always hated closed source drivers, and ATI is one of the big guy in video card. There is a petition online to ask ATI for specification or better drivers. I sign it because my ATI 9100IGP doesn&#8217;t have TVout support right now..
]]></description>
			<content:encoded><![CDATA[<p>I always hated closed source drivers, and ATI is one of the big guy in video card. There is a <a class="reference" href="http://www.petitiononline.com/atipet/petition.html">petition</a> online to ask ATI for specification or better drivers. I sign it because my ATI 9100IGP doesn&#8217;t have TVout support right now..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/150.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shuttle ST62K Zen Install Howto for Linux</title>
		<link>http://www.larsen-b.com/Article/132.html</link>
		<comments>http://www.larsen-b.com/Article/132.html#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[stk62k]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[
Hardware
The Shuttle STK62K is a small XPC that use:

ATI IGP9100 video board
ATI IXP150 AC&#8217;97 Audio Controller
OHCI based USB 2
Realtek network card

As i run into different issue with that box, i decided to write a little howto. Look here for more infos
0000:00:00.0 Host bridge: ATI Technologies Inc: Unknown device 5833 (rev 02)
0000:00:01.0 PCI bridge: ATI Technologies [...]]]></description>
			<content:encoded><![CDATA[<div id="hardware" class="section">
<h1><a name="hardware">Hardware</a></h1>
<p>The Shuttle STK62K is a small XPC that use:</p>
<ul class="simple">
<li>ATI IGP9100 video board</li>
<li>ATI IXP150 AC&#8217;97 Audio Controller</li>
<li>OHCI based USB 2</li>
<li>Realtek network card</li>
</ul>
<p>As i run into different issue with that box, i decided to write a little howto. Look <a class="reference" href="http://www.sfftech.com/showdocs.cfm?aid=482">here</a> for more infos</p>
<pre class="literal-block">0000:00:00.0 Host bridge: ATI Technologies Inc: Unknown device 5833 (rev 02)
0000:00:01.0 PCI bridge: ATI Technologies Inc: Unknown device 5838
0000:00:13.0 USB Controller: ATI Technologies Inc: Unknown device 4347 (rev 01)
0000:00:13.1 USB Controller: ATI Technologies Inc: Unknown device 4348 (rev 01)
0000:00:13.2 USB Controller: ATI Technologies Inc: Unknown device 4345 (rev 01)
0000:00:14.0 SMBus: ATI Technologies Inc ATI SMBus (rev 17)
0000:00:14.1 IDE interface: ATI Technologies Inc: Unknown device 4349
0000:00:14.3 ISA bridge: ATI Technologies Inc: Unknown device 434c
0000:00:14.4 PCI bridge: ATI Technologies Inc: Unknown device 4342
0000:00:14.5 Multimedia audio controller: ATI Technologies Inc IXP150 AC'97 Audio Controller
0000:01:05.0 VGA compatible controller: ATI Technologies Inc: Unknown device 5834
0000:02:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
0000:02:06.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 80)</pre>
<div id="issues" class="section">
<h1><a name="issues">Issues</a></h1>
<p>Caution, i run into weird issues at the first boot.. a lot of segfaults and other weird things. I spend a part of the night to discover that the main trouble isn&#8217;t Linux based, but a hardware issue. The ST62K seems to have a lot problems with cheap memory. My current install use two Elixir (CAS=3) 512Mo stick in dual channel. After a little test with memtest+ i discover that the memory should be downsized to 266MHz FSB (instead of the common 400FSB). I found severall other users with the same issue. So don&#8217;t expect to use a DDR400 at full speed on this box with cheap memory, or buy Corsair (CAS=2.5 not the CAS=3!).</p>
</div>
</div>
<div id="linux" class="section">
<h1><a name="linux">Linux</a></h1>
<p>I tried several kernels: 2.4.26 and 2.6.7 debian stock kernel, but i run into trouble with this meanly because the APM is set by default in .. so to run it i need to build kernel 2.6.7 from scrash.</p>
</div>
<div id="processor" class="section">
<h1><a name="processor">Processor</a></h1>
<p>My box run on a Intel 3.0C running at 3.2Ghz as this box support overclocking form +0 to +15 FSB, so (200 + 10) * 15 = 3.2 Ghz, i managed to overclock it to 3.3 without any trouble. In the kernel i set:</p>
<pre class="literal-block">[*]   Symmetric multi-processing support
[*]   SMT (Hyperthreading) scheduler support</pre>
<p>SMT is the new scheduler that support the HT processors</p>
</div>
<div id="acpi-apm" class="section">
<h1><a name="acpi-apm">ACPI / APM</a></h1>
<p>The main reason why i start with ACPI, is that the box do some really strange things if you have APM set. So you need to disable the APM, and set the ACPI in you kernel.</p>
<pre class="literal-block">[*] ACPI Support
[*]   Sleep States (EXPERIMENTAL)
&lt;M&gt;   AC Adapter
&lt;M&gt;   Battery
&lt;M&gt;   Button
&lt;M&gt;   Fan
&lt;M&gt;   Processor
&lt;M&gt;   Thermal Zone</pre>
<p>The Thermal Zone is the only import here.</p>
</div>
<div id="network" class="section">
<h1><a name="network">Network</a></h1>
<p>The ST62K use a Realtek nic, so just use the 8139too driver.</p>
</div>
<div id="hardrive-dma" class="section">
<h1><a name="hardrive-dma">Hardrive / DMA</a></h1>
<p>Recent kernel as support for ATI IXP chipset so ..</p>
<pre class="literal-block">Device Driver &gt; ATA/ATAPI/MFM/RLL support
&lt;*&gt;       Generic PCI IDE Chipset Support
[*]       Generic PCI bus-master DMA support
[*]         Use PCI DMA by default when available
&lt;*&gt;        ATI IXP chipset IDE support</pre>
</div>
<div id="video" class="section">
<h1><a name="video">Video</a></h1>
<p>The embeded video card is IGP 9100. To have support for X you have 3 options:</p>
<ul class="simple">
<li>use the &#8216;ati&#8217; driver wich come with XFree. It&#8217;s works fine (without acceleration)</li>
<li>use the &#8216;radeon&#8217; one, but this require a some kernel tweak</li>
<li>the ATI made drivers doesn&#8217;t seems to support the IGP card right now.</li>
</ul>
<p>I now run the radeon on. To do this you have 2 options:<br />
- use the stock kernel one<br />
- use the DRI based one</p>
<p><strong>stock kernel</strong></p>
<pre class="literal-block">Devices Drivers &gt; Graphics support
&lt;*&gt;   ATI Radeon display support</pre>
<p>Don&#8217;t use module if you want to have framebuffer support. You need to enable AGPGart too (i&#8217;m not really sure)</p>
<pre class="literal-block">Section "Device"
#Driver      "ati"
Driver       "radeon"
VendorName  "ATI Technologies Inc"
BoardName   "Unknown Board"
BusID       "PCI:1:5:0"
EndSection</pre>
<p><strong>DRI</strong></p>
<p>First you need to download the latest XFree86 binary (which is 4.3.99) and put this in the place of XFree binary. Next download the Radeon driver from the DRI website. Simply untar and install it. (You need to set the kernel drivers as module not built-in for that)</p>
<p><strong>Which One ?</strong></p>
<p>Right now, this doesn&#8217;t really change anything because the kernel base kernel doesn&#8217;t support DRI. And the DRI one, disable the DRI because it doesn&#8217;t find it as a AGP card, so disable the direct rendering. So don&#8217;t expect good openGL performance :( But the radeon driver is really punchy on X .. so as i don&#8217;t play game, this isn&#8217;t a issue. I think this gonna change soon anyway.</p>
<p><strong>update: TV Output</strong></p>
<p>For the TVout put, there is currently no options. The only way to have it works, is to configure the X server to use a vesa driver (instead of radeon) and 800&#215;600 screen size. After that, plug the TV set and reboot to enable it. (Done thought the bios post), and enjoy. Thanks Per for the tips.</p>
</div>
<div id="sound" class="section">
<h1><a name="sound">Sound</a></h1>
<p>Again only recent kernel support this :)</p>
<pre class="literal-block">Device Drivers&gt; Sound &gt; Alsa PCI devices
&lt;M&gt; ATI IXP 150/200/250/300</pre>
<p>After simply load the &#8217;snd_atiixp&#8217; module</p>
</div>
<div id="sensors" class="section">
<h1><a name="sensors">Sensors</a></h1>
<p>I read a couple of post saying that the sensors doesn&#8217;t work, but i managed to use it without any trouble, as it use a it87 isa based sensors.</p>
<pre class="literal-block">I2C &gt; Hardware Sensors Chip support
&lt;M&gt; ITE IT87xx and compatibles</pre>
<p>Don&#8217;t forget to set i2c-dev Results:</p>
<pre class="literal-block">it87-isa-0228
Adapter: ISA adapter
VCore 1:   +1.45 V  (min =  +1.42 V, max =  +1.56 V)
VCore 2:   +1.53 V  (min =  +2.40 V, max =  +2.60 V)   ALARM
+3.3V:     +6.40 V  (min =  +3.12 V, max =  +3.44 V)   ALARM
+5V:       +4.97 V  (min =  +4.72 V, max =  +5.24 V)
+12V:     +11.68 V  (min = +11.36 V, max = +12.60 V)
-12V:     -19.77 V  (min = -12.63 V, max = -11.41 V)   ALARM
-5V:       -2.38 V  (min =  -5.28 V, max =  -4.81 V)   ALARM
Stdby:     +5.02 V  (min =  +4.72 V, max =  +5.24 V)
VBat:      +3.16 V
fan1:     1795 RPM  (min =    0 RPM, div = 16)
fan2:        0 RPM  (min =  332 RPM, div = 16)
fan3:        0 RPM  (min =  664 RPM, div = 8)
M/B Temp:    +60°C  (low  =   +15°C, high =   +40°C)   sensor = diode
CPU Temp:    +44°C  (low  =   +15°C, high =   +45°C)   sensor = diode
Temp3:       +41°C  (low  =   +15°C, high =   +45°C)   sensor = thermistor</pre>
<p>Some voltages seems wrong .. but not important. Yes this box have only one fan and the CPU temp is 44°. The 60° correspond to the RS300 chip but this seems to be broken (the bios show me the same values..). When overclocked and building the kernel, i managed to have 59° and a fan at 2300 RPM. (I tweaked the bios to start the fan at 55° instead of 65° default)</p>
</div>
<div id="additionnal" class="section">
<h1><a name="additionnal">Additionnal</a></h1>
<p>You can download my kernel config. I think this setting can be used on S62G4 too ..</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/132.html/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
