posts - 297,  comments - 15,  trackbacks - 0

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");

 

 from:

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

http://blog.ednchina.com/fafen/267973/message.aspx
posted on 2010-04-14 23:00 chatler 阅读(459) 评论(0)  编辑 收藏 引用 所属分类: linux kernel

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(10)

随笔分类(307)

随笔档案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感觉这个博客还是不错,虽然做的东西和我不大相关,觉得看看还是有好处的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新评论

阅读排行榜

评论排行榜