Vortrag:Howto Linux-Kernel: Unterschied zwischen den Versionen

Aus k4cg.org
(Die Seite wurde neu angelegt: „TODO ====== HOWTO Linux Kernel ====== === Meta === Datum: 20.11.08 20:00 Uhr Referent: Georg / gnu === Code === == Makefile == <code> obj-m += minDev.o obj-m…“)
 
K (Gpunktschmitz verschob die Seite Vorträge:Howto Linux-Kernel nach Vortrag:Howto Linux-Kernel)
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 1: Zeile 1:
TODO
== HOWTO Linux Kernel ==
====== HOWTO Linux Kernel ======


=== Meta ===
=== Meta ===
Zeile 8: Zeile 7:
=== Code ===
=== Code ===
== Makefile ==
== Makefile ==
<code>
 
<pre>
obj-m += minDev.o
obj-m += minDev.o
obj-m += halloKernel.o
obj-m += halloKernel.o
Zeile 18: Zeile 18:
clean:
clean:
         make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
         make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
</code>
</pre>
== bad.c ==
== bad.c ==
<code>
<pre>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/mm.h>
#include <linux/mm.h>
Zeile 53: Zeile 53:
MODULE_AUTHOR("gnu");
MODULE_AUTHOR("gnu");
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");
</code>
</pre>


== halloKernel.c ==
== halloKernel.c ==
<code>
<pre>
#include <linux/module.h>
#include <linux/module.h>


Zeile 72: Zeile 72:
MODULE_AUTHOR("gun");
MODULE_AUTHOR("gun");
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");
</code>
</pre>


== minDev.c ==
== minDev.c ==
<code>
<pre>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/fs.h>
Zeile 135: Zeile 135:
MODULE_AUTHOR("gnu");
MODULE_AUTHOR("gnu");
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");
</code>
</pre>


== Links zum Workshop ==
== Links zum Workshop ==
  * Alle Links von http://www.linuxhq.com/lkprogram.html
* Alle Links von http://www.linuxhq.com/lkprogram.html
  * Handbuch zur Linux Kernel-Entwicklung (organisatorisches) http://ldn.linuxfoundation.org/book/how-participate-linux-community
* Handbuch zur Linux Kernel-Entwicklung (organisatorisches) http://ldn.linuxfoundation.org/book/how-participate-linux-community

Aktuelle Version vom 17. Mai 2015, 08:10 Uhr

HOWTO Linux Kernel

Meta

Datum: 20.11.08 20:00 Uhr Referent: Georg / gnu

Code

Makefile

obj-m += minDev.o
obj-m += halloKernel.o
obj-m += bad.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

bad.c

#include <linux/module.h>
#include <linux/mm.h>

int init_module ( void ) 
{ 
        int* badarray, *funcptr;
        int i;
        printk ("Bad Kernel Module\n");
        badarray = (int*) kmalloc(100, GFP_KERNEL);
        if(!badarray) {
                printk(KERN_WARNING "no more memory :(\n");
                return 0;
        }

        funcptr = (int*) &do_gettimeofday; 
        printk("0x%08x do_gettimeofday\n", (int)funcptr);

        /* 
        badarray = funcptr
        for(i=0; i<500; ++i) badarray[i] = 0xfea1dead;
        */
        kfree(badarray);
        return 0;
}

void cleanup_module( void )
{ 
        printk ("Goodbye Kernel.\n");
}

MODULE_AUTHOR("gnu");
MODULE_LICENSE("GPL");

halloKernel.c

#include <linux/module.h>

int init_module ( void ) 
{ 
        printk ("Hello Kernel!\n");
        return 0;
}

void cleanup_module( void )
{ 
        printk ("Goodbye Kernel.\n");
}

MODULE_AUTHOR("gun");
MODULE_LICENSE("GPL");

minDev.c

#include <linux/module.h>
#include <linux/fs.h>

static int device_open(struct inode *inp, struct file *filp)
{
        return 0;
}

static ssize_t device_read(struct file *filp, char *buf, size_t length, loff_t *f_pos)
{
        return 0;
}

static ssize_t device_write(struct file *filp, const char *buf, size_t length, loff_t *f_pos)
{
        printk( "received: %c%c\n",buf[0], buf[1]);
        return 2; 
}

static int device_release(struct inode *inp, struct file *filp)
{
        return 0;
}

static struct file_operations fops = {
        open: device_open,
        read: device_read,
        write: device_write,
        release: device_release
};

//////////////////////////////////////////////////////////////
static int MajorNumber = 0;

int init_module ( void ) 
{ 
        printk ("mindev loaded!\n");

        MajorNumber = register_chrdev(0, "mydevice", &fops);
        if( MajorNumber < 0 )
        {
                printk ("Registering mydevice failed.\n");
                return MajorNumber;
        }
        else
        {
                printk ("create a device: 'mknod /dev/mydevice c %d 0'.\n",MajorNumber);
        }
        return 0;
}

void cleanup_module( void )
{ 
        unregister_chrdev(MajorNumber, "mydevice");
        printk ("mindev unloaded.\n");
}

MODULE_AUTHOR("gnu");
MODULE_LICENSE("GPL");

Links zum Workshop