<story><title>Writing an open source GPU driver without the hardware</title><url>https://www.collabora.com/news-and-blog/blog/2022/01/27/writing-an-open-source-gpu-driver-without-the-hardware/</url></story><parent_chain><item><author>asciimov</author><text>I&amp;#x27;ve got a CS degree and of all the things that I studied, including OS design, nothing gives me that feeling of black magic like Kernel hacking and driver building. It&amp;#x27;s like being told your gonna learn how to draw an owl you start with some ovals and then you have a completed owl.&lt;p&gt;Low level stuff has always been interesting to me, I just have no clue how one would even get started with it, or who would even pay me to work on it.</text></item></parent_chain><comment><author>ckastner</author><text>I also have a CS degree and felt the same black magic during my studies, but then I took some microcontroller classes, and they were eye-opening. In the sense that all of the CS operating system stuff suddenly made so much more sense.&lt;p&gt;For example, take something like (1) the simplest AVR microcontroller (the type used in Arduinos, hence there is a ton of third-party documentation and code floating around) and (2) your typical Hitachi HD44780 LED display.&lt;p&gt;To control the display, one needs to pull certain pins high and low, for specific intervals -- this is all in the HD44780&amp;#x27;s data sheet. Of course, you don&amp;#x27;t do this every time you send a character; you abstract this away into functions &lt;i&gt;setchar(x, y, c)&lt;/i&gt;, &lt;i&gt;clearDisplay()&lt;/i&gt;, and so on.&lt;p&gt;Presto, your first driver!&lt;p&gt;Then you might think: let&amp;#x27;s print stuff that we receive via a serial connection. So how do you react to that data? Then you learn about interrupts and interrupt handling.&lt;p&gt;Then you might think: I could be doing stuff while I wait for I&amp;#x2F;O. Actually, I&amp;#x27;d like to do a lot of stuff, in parallel, but the AVRs are single-core (so to speak). So you do what you&amp;#x27;ve heard other OSes do: take available compute time, divide it into slices, and distribute slices to processes. And thus, you have learned about multi-tasking.&lt;p&gt;This was relatively simple to do on AVRs, and great fun.</text></comment>
<story><title>Writing an open source GPU driver without the hardware</title><url>https://www.collabora.com/news-and-blog/blog/2022/01/27/writing-an-open-source-gpu-driver-without-the-hardware/</url></story><parent_chain><item><author>asciimov</author><text>I&amp;#x27;ve got a CS degree and of all the things that I studied, including OS design, nothing gives me that feeling of black magic like Kernel hacking and driver building. It&amp;#x27;s like being told your gonna learn how to draw an owl you start with some ovals and then you have a completed owl.&lt;p&gt;Low level stuff has always been interesting to me, I just have no clue how one would even get started with it, or who would even pay me to work on it.</text></item></parent_chain><comment><author>Galanwe</author><text>The easiest way to get started is to just write a driver for whatever simple device you have.&lt;p&gt;It may be easier if you do some electronics as a hobby since you can create the devices yourself with simple enough protocols. It gives you a good understanding of how the hardware works at a basic level.&lt;p&gt;There are thousands of tutorials out there on how to get started writing simple drivers, as well as the &lt;i&gt;excellent&lt;/i&gt; book &amp;quot;Linux device drivers&amp;quot;.&lt;p&gt;I don&amp;#x27;t do _complex_ drivers, but I&amp;#x27;ve been able to write simple ones for my DIY  electronic devices (keyboards, sensors, ...) and even a reverse engineered one for my BOSS RC5 guitar pedal.</text></comment>