当前位置: 技术问答>linux和unix
内核模块编译初级问题
来源: 互联网 发布时间:2015-05-10
本文导语: 代码: #define __KERNEL__ #define MODULE #define LINUX #include #include #include #if CONFIG_MODVERSIONS == 1 #define MODVERSIONS #include #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,9) MODULE_LICENSE("GPL"); MODULE_...
代码:
#define __KERNEL__
#define MODULE
#define LINUX
#include
#include
#include
#if CONFIG_MODVERSIONS == 1
#define MODVERSIONS
#include
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,9)
MODULE_LICENSE("GPL");
MODULE_AUTHOR("liben@163.com");
#endif
int init_module()
{
printk(" Hello, world - this is the kernel speakingn");
return 0;
}
void cleanup_module()
{
printk("Short is the life of a kernel modulen");
}
内核版本 2.4.18
编译命令:gcc -c hello.c -I/usr/include/linux -Wall
gcc -c hello.c -I/usr/src/linux/include/linux -Wall
gcc -c hello.c -I/usr/src /linux-2.4.18/include/linux -Wall
任意一个
错误:
hello.c: In function `init_module':
hello.c:26: warning: implicit declaration of function `printk'
#define __KERNEL__
#define MODULE
#define LINUX
#include
#include
#include
#if CONFIG_MODVERSIONS == 1
#define MODVERSIONS
#include
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,9)
MODULE_LICENSE("GPL");
MODULE_AUTHOR("liben@163.com");
#endif
int init_module()
{
printk(" Hello, world - this is the kernel speakingn");
return 0;
}
void cleanup_module()
{
printk("Short is the life of a kernel modulen");
}
内核版本 2.4.18
编译命令:gcc -c hello.c -I/usr/include/linux -Wall
gcc -c hello.c -I/usr/src/linux/include/linux -Wall
gcc -c hello.c -I/usr/src /linux-2.4.18/include/linux -Wall
任意一个
错误:
hello.c: In function `init_module':
hello.c:26: warning: implicit declaration of function `printk'
|
把这句话去掉就OK了
#include
#include
|
-DMODULE -D__KERNEL__
|
那只是告警不是错误
建议编译选项加上 -O2
printk打印的消息不再现实到屏幕
你可以使用
dmesg|tail进行察看
建议编译选项加上 -O2
printk打印的消息不再现实到屏幕
你可以使用
dmesg|tail进行察看
|
printk要打印出来,你的printk级别要高于终端级别
|
在编译时使用-DMODULE -D__KERNEL__与在文件中定义是一样的效果。
至于版本控制我也是不太明白,一般我也是不使用的。
你的那句printk应该是执行了,你可以把syslog打开,也可以用dmesg 来查看打印的结果。
至于版本控制我也是不太明白,一般我也是不使用的。
你的那句printk应该是执行了,你可以把syslog打开,也可以用dmesg 来查看打印的结果。
|
int init_module()
{
printk(" Hello, world - this is the kernel speakingn");
return 0;
}
void cleanup_module()
{
printk("Short is the life of a kernel modulen");
}
{
printk(" Hello, world - this is the kernel speakingn");
return 0;
}
void cleanup_module()
{
printk("Short is the life of a kernel modulen");
}