今天刚研究起linux驱动模块,遇到不少问题,此类问题网上也有不少解决方法,自己发出来也供各位朋友参考。
首先,为了能在2.6.x版本内核下成功编译模块,最好能将已经安装好的linux重新编译一次:
不重新编译的话,当你编译内核模块的时候,可能会出现makefile文件和程序源码是没问题的,
但却编译不出modules的问题。 MODPOST 0 modules 就是这个。
所以还是重新编译一次吧
cd /usr/src/kernel/$(uname -r)
make mrproper 清除一些以前遗留的文件,获得清爽的源代码
make menuconfig 命令行模式下的图形内核配置方式(make config(古老的交互式) make xconfig(K桌面) make gconfig(G桌面))
make bzImage 编译内核镜像,编译完之后,留心最后的显示内容(他就在那里)
make modules 内核模块的编译(最耗时间了)
因为是编译安装好的系统的源码,所以不用去重新去配置/boot目录下的config文件和/boot/grub/menu.lst
当重新开机的时候,会重装一次内核(原来的分区不会重新分配)
Linux设备驱动程序里的那些源码,很适合拿来学习,我也是用这个开始学习模块编译的。
不过遇到一个问题,在编译一些 *.c 源文件时,有事会发生缺少“linux/config.h”的错误,自己网上找答案,
说是现在内核源码里面没有config.h文件了,成了autoconfig.h 。需要将后者软链接为config.h,就可以了。
我自己试过之后,可能是和那位仁兄的版本也不一样,在内核源码里还是没find到config.h,却发现了kconfig.h
,查看多处源码,发现此文件在不少目录里面出现,索性ln -s kconfig.h config.h
再来编译问题便解决了。
本人还是菜鸟一只,如有错误之处,还望能指点,大家共同进步
阅读(3624) | 评论(0) | 转发(0) |