Linux(Ubuntu)下编译内核模块

最近两天看 《Linux Device Drivers》3rd Edition,第一个例子讲述的是如何在2.6现边编译内核模块,但是今天拿来例子在ubuntu7.10下边编译,总是报错,没有搞清楚原因,于是我在网上找了一下,发现一篇文章, http://dev.csdn.net/article/84/84075.shtm,写的也是编译内核模块的事情,用的还是书上的那个例子,只是程序该了一下而已,但是Makefile没有改变,我看了一下仿佛跟我的一样的,但我就是过不去。
我觉得使用书本自带的完全例子应该没问题吧,于是找了个simple来编译,居然过去了。虽然运行的时候没有看到效果,但是插入的时候也正常了,没有报错,即使按照前边所讲的那片文章换到text mode,也还是看不到,郁闷。
将这个Makefile  copy到之前的那个地方去,将对应的obj的名字改成hello.o然后编译,成功了。然后将多余的地方去掉,尽量保持跟之前的makefile一致,编译也能够通过,我觉得可能是将default中最后的modules改了的原因,但是先前的错误不能重现了,我也记不清楚了。
以下是 源代码和Makefile,都是复制书本上的,虽然作者们认为读者可以随意使用复制,但是这些代码我觉的还是应该标记归属于他们,而不是我的:
/*
From 3rd Edition
hello.c
*/
#include 
  
  
   
   
#include 
   
   
    
    
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
    printk(KERN_ALERT "Hello, world/n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, cruel world/n");
}
module_init(hello_init);
module_exit(hello_exit);
   
   
  
  

# From《Linux Device Drivers》3rd Edition
# Makefile
ifneq ($(KERNELRELEASE),)
# call from kernel build system

obj-m	:= hello.o

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)

default:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

在我的ubuntu7.10上边,最后连接到的源码树是在/usr/src/linux-headers-2.6.22-14-generic目录下。
由于CSDN的源码显示功能有点问题,如果上边的格式显示有错误,希望大家谅解。


增补
刚才将启动模式改为了text mode,然后运行该模块,终于看到结果了:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值