
    

    <?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://ocw.cs.pub.ro/courses/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://ocw.cs.pub.ro/courses/feed.php">
        <title>CS Open CourseWare ass:labs-2024:04:tasks</title>
        <description></description>
        <link>http://ocw.cs.pub.ro/courses/</link>
        <image rdf:resource="http://ocw.cs.pub.ro/courses/lib/tpl/arctic/images/favicon.ico" />
       <dc:date>2026-06-08T07:49:24+03:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/01?rev=1754205157&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/02?rev=1754205163&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/03?rev=1754205172&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/04?rev=1754205178&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://ocw.cs.pub.ro/courses/lib/tpl/arctic/images/favicon.ico">
        <title>CS Open CourseWare</title>
        <link>http://ocw.cs.pub.ro/courses/</link>
        <url>http://ocw.cs.pub.ro/courses/lib/tpl/arctic/images/favicon.ico</url>
    </image>
    <item rdf:about="http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/01?rev=1754205157&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-03T10:12:37+03:00</dc:date>
        <title>01. Preparation</title>
        <link>http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/01?rev=1754205157&amp;do=diff</link>
        <description>01. Preparation

The Linux kernel is comprised of numerous modules. These can be in-tree (part of the kernel source structure) or out-of-tree (independent modules). While there are some limitations when writing out-of-tree modules, such as restricted access to certain functions, this generally doesn't affect your ability to write drivers.</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/02?rev=1754205163&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-03T10:12:43+03:00</dc:date>
        <title>02. Your first kernel module</title>
        <link>http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/02?rev=1754205163&amp;do=diff</link>
        <description>02. Your first kernel module

Way back when, kernels used to be monolithic, meaning that adding new functionality required recompiling and installing it, followed by a reboot. Today, things are much easier. By using the kmod daemon (man 8 kmod), users are allowed to load and unload modules (i.e.: kernel object files) on demand, without all the fuss. These modules are C programs that must implement initialization and removal functions that are called automatically. Usually, these functions regist…</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/03?rev=1754205172&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-03T10:12:52+03:00</dc:date>
        <title>03. Making a simple character device</title>
        <link>http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/03?rev=1754205172&amp;do=diff</link>
        <description>03. Making a simple character device

Check Google for some inspiration on Linux kernel sample character device modules.

Simply take the code, try to build it / fix it (if required, since newer kernel versions may break old APIs).

Also make sure to put some printk() calls for debugging (if they're not already in the sample code).</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/04?rev=1754205178&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-03T10:12:58+03:00</dc:date>
        <title>04. Writing to a serial device (UART)</title>
        <link>http://ocw.cs.pub.ro/courses/ass/labs-2024/04/tasks/04?rev=1754205178&amp;do=diff</link>
        <description>04. Writing to a serial device (UART)

Download &amp; read the i.MX8M's Reference Manual, chapter 16.2.
Ahem, not really all of it, just check the memory map / register definition for UTXD and UTS.

Next, we will enhance our character device to print the using IMX UART peripheral using a simple MMIO interface.
Useful resources for mapping, reading &amp; writing IO memory: &lt;https://www.kernel.org/doc/html/latest/driver-api/device-io.html&gt; (read the introduction + MMIO parts).</description>
    </item>
</rdf:RDF>
