Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15530232
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2008-05-27 10:08:10

linux 2.6下编译最简单的hello.ko驱动

1.下载kernel源码 http://
2.配置内核
luther@gliethttp:~/work/kernel/linux-2.6.22.14$ make oldconfig
luther@gliethttp:~/work/kernel/linux-2.6.22.14$ make prepare
luther@gliethttp:~/work/kernel/linux-2.6.22.14$ make scripts 否则提示:MODPOST 1 modules /bin/sh: scripts/mod/modpost: not found
3.写测试程序hello.c
//luther
@gliethttp:~/work/kernel/module_drivers/hello$ vim hello.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

static int init_hello_4(void)
{
   printk(KERN_ALERT "Hello, world 4 ");
   return 0;
}

static void cleanup_hello_4(void)
{
   printk(KERN_ALERT "Goodbye, world 4 ");
}

module_init(init_hello_4);
module_exit(cleanup_hello_4);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Playmud");
MODULE_DESCRIPTION("Test only!");
4.配置Makefile和执行ko编译
luther@gliethttp:~/work/kernel/module_drivers/hello$ echo "obj-m:=hello.o" > Makefile
luther@gliethttp:~/work/kernel/module_drivers/hello$ make -C /usr/src/`uname -r` M=`pwd` modules
我下载的内核位置为~/work/kernel/linux-2.6.22.14,所以这里指定为:
luther@gliethttp:~/work/kernel/module_drivers/hello$ make -C ../../linux-2.6.22.14 M=`pwd` modules
make: Entering directory `/home/
luther/work/kernel/linux-2.6.22.14'

  WARNING: Symbol version dump /home/luther
/work/kernel/linux-2.6.22.14/Module.symvers
           is missing; modules will have no dependencies and modversions.

  Building modules, stage 2.
  MODPOST 1 modules
  CC /home/luther/work/kernel/module_drivers/hello/hello.mod.o
  LD [M] /home/luther/work/kernel/module_drivers/hello/hello.ko
make: Leaving directory `/home/luther/work/kernel/linux-2.6.22.14'

luther@gliethttp:~/work/kernel/module_drivers/hello$



上面的做法当然是可以,但是老是提示:
WARNING: Symbol version dump /home/luhter/work/kernel/linux-2.6.22.14/Module.symvers is missing; modules will have no dependencies and modversions.

通过摸索,原来,编译hello.ko其实是非常简单的,不用下载kernel源码,
写测试程序hello.c
//luther@gliethttp:~/work/kernel/module_drivers/hello$ vim hello.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

static int init_hello_4(void)
{
   printk(KERN_ALERT "Hello, world 4 ");
   return 0;
}

static void cleanup_hello_4(void)
{
   printk(KERN_ALERT "Goodbye, world 4 ");
}

module_init(init_hello_4);
module_exit(cleanup_hello_4);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Playmud");
MODULE_DESCRIPTION("Test only!");
4.配置Makefile和执行ko编译
luther@gliethttp:~/work/kernel/module_drivers/hello$ echo "obj-m:=hello.o" > Makefile
luther@gliethttp:~/work/kernel/module_drivers/hello$ make -C /lib/modules/`uname -r`/build M=`pwd` modules
make: Entering directory `/usr/src/linux-headers-2.6.22-14-generic'
  CC [M]  /home/
luther/work/kernel/module_drivers/hello/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/
luther/work/kernel/module_drivers/hello/hello.mod.o
  LD [M]  /home/
luther/work/kernel/module_drivers/hello/hello.ko
make: Leaving directory `/usr/src/linux-headers-2.6.22-14-generic'
luther@gliethttp:~/work/kernel/module_drivers/hello$

/lib/modules/`uname -r`/build就是本地ubuntu机子的module编译配置目录

不是为正在运行的内核编译模块:
make -C M='pwd'
为正在运行的内核编译模块:
make -C /lib/modules/'uname -r'/build M='pwd'

不用下载kernel,直接就在本地机搞定了!

printk没有在console上打印出提示,通过
luther@gliethttp:~/work/kernel/module_drivers/hello$ dmesg |tail
可以查到,具体配置可以查看
luther@gliethttp:~/work/kernel/module_drivers/hello$ vim /etc/syslog.conf


阅读(12911) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~