How to compile kernel modules for the kernel 2.6

HOWTO compile kernel modules for the kernel 2.6:

 

 

If you want to compile the sum-module (source mirrored below), follow these steps:

 

Create the Makefile in your directory with the sum-module.c

 

 

obj-m    := sum-module.o

 

KDIR    := /lib/modules/$(shell uname -r)/build

PWD    := $(shell pwd)

 

default:

       $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

 

Now do a

 

make

 

... and the sum-module.ko is built.

 

If you get something like this

# make

make: Nothing to be done for `default'.

 

you need to install the kernel source and compile the kernel first (run "make" at least to the point until all "HOSTCC scripts/" stuff is done - this will configure your kernel and allows external module compilation). Make sure /lib/modules/$(shell uname -r)/build points to your build directory (most likely /usr/src/linux...).

Another reason for the above error can be, that your browser converted the TAB before $(MAKE) to spaces. Make sure there is a TAB before $(MAKE).

 

 

 

Install it with install.sh:

 

#!/bin/sh

install -m 644 sum-module.ko /lib/modules/`uname -r`/kernel/drivers/sum-module.ko

/sbin/depmod -a

 

(adjust the /lib/modules path according to your needs)

 

Now make a

# modprobe sum-module

 

 

Or if you don't want to install the module, do this:

# insmod ./sum-module.ko

 

 

..and if your system doesn't freeze you've done it right ;-)

 

For kernel 2.4, the Makefile would look like this:

TARGET       := modulename

INCLUDE    := -I/lib/modules/`uname -r`/build/include

CFLAGS      := -O2 -Wall -DMODULE -D__KERNEL__ -DLINUX

CC  := gcc

 

${TARGET}.o: ${TARGET}.c

       $(CC) $(CFLAGS) ${INCLUDE} -c ${TARGET}.c

 

(not yet tested)

 

 

 

sum-module source from: http://www.win.tue.nl/~aeb/linux/lk/lk-9.html

 

 

/*

 * sum-module.c

# modprobe sum-module.o

# ls -l /proc/arith

total 0

dr-xr-xr-x    2 root     root            0 Sep 30 12:40 .

dr-xr-xr-x   89 root     root            0 Sep 30 12:39 ..

-r--r--r--    1 root     root            0 Sep 30 12:40 sum

# cat /proc/arith/sum

0

# echo 7 > /proc/arith/sum

# echo 5 > /proc/arith/sum

# echo 13 > /proc/arith/sum

# cat /proc/arith/sum

25

# rmmod sum-module

# ls -l /proc/arith

ls: /proc/arith: No such file or directory

#

*/

 

#include <linux/module.h>

#include <linux/init.h>

#include <linux/proc_fs.h>

#include <asm/uaccess.h>

 

 

static unsigned long long sum;

 

static int show_sum(char *buffer, char **start, off_t offset, int length) {

        int size;

 

        size = sprintf(buffer, "%lld/n", sum);

        *start = buffer + offset;

        size -= offset;

        return (size > length) ? length : (size > 0) ? size : 0;

}

 

/* Expect decimal number of at most 9 digits followed by '/n' */

static int add_to_sum(struct file *file, const char *buffer,

                      unsigned long count, void *data) {

        unsigned long val = 0;

        char buf[10];

        char *endp;

 

        if (count > sizeof(buf))

                return -EINVAL;

        if (copy_from_user(buf, buffer, count))

                return -EFAULT;

        val = simple_strtoul(buf, &endp, 10);

        if (*endp != '/n')

                return -EINVAL;

        sum += val;     /* mod 2^64 */

        return count;

}

 

static int __init sum_init(void) {

        struct proc_dir_entry *proc_arith;

        struct proc_dir_entry *proc_arith_sum;

 

        proc_arith = proc_mkdir("arith", 0);

        if (!proc_arith) {

                printk (KERN_ERR "cannot create /proc/arith/n");

                return -ENOMEM;

        }

        proc_arith_sum = create_proc_info_entry("arith/sum", 0, 0, show_sum);

        if (!proc_arith_sum) {

                printk (KERN_ERR "cannot create /proc/arith/sum/n");

                remove_proc_entry("arith", 0);

                return -ENOMEM;

        }

        proc_arith_sum->write_proc = add_to_sum;

        return 0;

}

 

static void __exit sum_exit(void) {

        remove_proc_entry("arith/sum", 0);

        remove_proc_entry("arith", 0);

}

 

module_init(sum_init);

module_exit(sum_exit);

MODULE_LICENSE("GPL");

 

 

http://www.captain.at/programming/kernel-2.6/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值