Linux(Ubuntu)下编译内核模块
2008-07-18 14:43
465 查看
最近两天看 《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,都是复制书本上的,虽然作者们认为读者可以随意使用复制,但是这些代码我觉的还是应该标记归属于他们,而不是我的:
在我的ubuntu7.10上边,最后连接到的源码树是在/usr/src/linux-headers-2.6.22-14-generic目录下。
由于CSDN的源码显示功能有点问题,如果上边的格式显示有错误,希望大家谅解。
增补:
刚才将启动模式改为了text mode,然后运行该模块,终于看到结果了:
我觉得使用书本自带的完全例子应该没问题吧,于是找了个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,然后运行该模块,终于看到结果了:
相关文章推荐
- Ubuntu:编译Linux"内核源代码"和"内核模块"
- Ubuntu 编译安装 Linux 4.0.5 内核,并修复 vmware 网络内核模块编译错误
- Ubuntu12.10 内核源码外编译 linux模块--编译驱动模块的基本方法
- 编译、裁剪、安装、删除 Ubuntu内核和模块管理 分类: arm-linux-Ubuntu 2013-07-22 16:29 319人阅读 评论(0) 收藏
- ubuntu下helloworld内核模块编译
- ubuntu环境下编译linux内核问题解决备忘
- Ubuntu 11 编译 linux-2.6内核 出错,给出部分编译问题解决
- Ubuntu12.10 内核源码外编译 linux模块--编译驱动模块的基本方法
- 内核模块的自动加载和Ubuntu-Linux的开机流程(ubuntu9.10到现在的ubuntu发行版)
- OK6410 linux 内核模块加载--LED内核模块编译加载
- ubuntu下编译内核模块ko,并加载
- Ubuntu:编译Linux内核源代码和内核模块
- Linux:编译生成内核模块(来自国嵌的视频教学)
- ubuntu内核模块编译环境
- Ubuntu10.10下编译Linux2.6.36内核
- linux (ubuntu) 编译内核详解[转]
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程
- ubuntu编译嵌入式Linux内核Install ncurses(ncurses-devel) and try again
- Ubuntu 8.04 Linux系统下面编译更新内核版本
- Linux 内核编译步骤和模块加载