当前位置: 技术问答>linux和unix
linux驱动入门问题,高手解惑!
来源: 互联网 发布时间:2016-09-05
本文导语: /* kernel-devel install path: /usr/src/kernels/2.6.29.4-167.fc11.i586 下面是 find 的几个头文件的存放目录 /usr/src/kernels/2.6.29.4-167.fc11.i586/include/linux/module.h /usr/src/kernels/2.6.29.4-167.fc11.i586/arch/x86/include/asm/module.h /usr/src/kernels/2.6.29....
/*
kernel-devel install path: /usr/src/kernels/2.6.29.4-167.fc11.i586
下面是 find 的几个头文件的存放目录
/usr/src/kernels/2.6.29.4-167.fc11.i586/include/linux/module.h
/usr/src/kernels/2.6.29.4-167.fc11.i586/arch/x86/include/asm/module.h
/usr/src/kernels/2.6.29.4-167.fc11.i586/include/acpi/processor.h
/usr/src/kernels/2.6.29.4-167.fc11.i586/include/config/acpi/processor.h
/usr/src/kernels/2.6.29.4-167.fc11.i586/arch/x86/include/asm/processor.h
*/
/*
compile statement1:
gcc -D__KERNEL__ -I /usr/src/kernels/2.6.29.4-167.fc11.i586/include -DMODULE -Wall -O2 -c hello.c -o hello.o
compile statement2:
gcc -D__KERNEL__ -I /usr/src/kernels/2.6.29.4-167.fc11.i586/include -I /usr/src/kernels/2.6.29.4-167.fc11.i586/arch/x86/include -DMODULE -Wall -O2 -c hello.c -o hello.o
*/
#include
#if defined(CONFIG_SMP)
#define __SMP__
#endif
#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include
#endif
#include
int init_module(void)
{
printk(KERN_DEBUG "Hello, kernel!n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_DEBUG "Good-bye, kernel!n");
}
// 问题:这是一个linux下驱动模块的简单demo,
我用的linux是fedora11,kernel 和 kernel-devel 的版本也是一致的
开始用yum 安装的软件,后来又下载的 rpm 格式的文件,都会出现下面的问题
// 当使用第一个编译语句时,会报出 asm/processor.h 等一些 asm下的头文件未找到;
// 当使用第二个编译语句时,又会报一些宏没有定义,或有些函数重定义的错误,这个问题怎么解决啊?
先谢谢了!
kernel-devel install path: /usr/src/kernels/2.6.29.4-167.fc11.i586
下面是 find 的几个头文件的存放目录
/usr/src/kernels/2.6.29.4-167.fc11.i586/include/linux/module.h
/usr/src/kernels/2.6.29.4-167.fc11.i586/arch/x86/include/asm/module.h
/usr/src/kernels/2.6.29.4-167.fc11.i586/include/acpi/processor.h
/usr/src/kernels/2.6.29.4-167.fc11.i586/include/config/acpi/processor.h
/usr/src/kernels/2.6.29.4-167.fc11.i586/arch/x86/include/asm/processor.h
*/
/*
compile statement1:
gcc -D__KERNEL__ -I /usr/src/kernels/2.6.29.4-167.fc11.i586/include -DMODULE -Wall -O2 -c hello.c -o hello.o
compile statement2:
gcc -D__KERNEL__ -I /usr/src/kernels/2.6.29.4-167.fc11.i586/include -I /usr/src/kernels/2.6.29.4-167.fc11.i586/arch/x86/include -DMODULE -Wall -O2 -c hello.c -o hello.o
*/
#include
#if defined(CONFIG_SMP)
#define __SMP__
#endif
#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include
#endif
#include
int init_module(void)
{
printk(KERN_DEBUG "Hello, kernel!n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_DEBUG "Good-bye, kernel!n");
}
// 问题:这是一个linux下驱动模块的简单demo,
我用的linux是fedora11,kernel 和 kernel-devel 的版本也是一致的
开始用yum 安装的软件,后来又下载的 rpm 格式的文件,都会出现下面的问题
// 当使用第一个编译语句时,会报出 asm/processor.h 等一些 asm下的头文件未找到;
// 当使用第二个编译语句时,又会报一些宏没有定义,或有些函数重定义的错误,这个问题怎么解决啊?
先谢谢了!
|
参考 http://blog.csdn.net/wenxy1/archive/2008/03/20/2199507.aspx
或者看《linux设备驱动程序》第三版。
或者看《linux设备驱动程序》第三版。
|
不好意思 我已经看了好几遍了
可是跟编程有关的 我基本都不会饿
|
你咋编译的?
写个 makefile 试试,
http://blog.csdn.net/pottichu/archive/2007/11/19/1892245.aspx
如果还有问题, 就重新编译下内核好了。
写个 makefile 试试,
http://blog.csdn.net/pottichu/archive/2007/11/19/1892245.aspx
如果还有问题, 就重新编译下内核好了。
|
内核最好重新编译一次
|
看Makefile里面的路径啊,大家都说清楚了,楼主难道还没有解决?
要是我,先把绝对路径加上试试看。
要是我,先把绝对路径加上试试看。
|
不懂帮顶
|
第二种编译模式下,哪些宏你没有定义,你定义一下试一下,看行不行。
|
使用root权限,echo $PATH 是你的环境变量有问题,我觉得。
|
你的参考资料太过时了,使用gcc 命令编译的是 2.4 内核时代的故事。
在 2.6 内核中都要用 make 了。参考 LDD 第三版 第一章吧
|
Linux设备驱动编程第三版
|
用拉拉给的Makefile有什么提示?把完整的提示贴下。