Vortrag:Howto Linux-Kernel

Aus k4cg.org
Version vom 12. Mai 2015, 21:12 Uhr von Noqqe (Diskussion | Beiträge) (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…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

TODO

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

  1. include <linux/module.h>
  2. 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

  1. 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

  1. include <linux/module.h>
  2. 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

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