当前位置: 技术问答>linux和unix
怎么编译驱动模块呢?
来源: 互联网 发布时间:2015-10-12
本文导语: 照猫画虎写了个字符设备驱动,不过该如何编译啊? gcc -c myfirstdev.c -D_KERNEL_ -DMODULE -O2 -I/usr/src/linux-2.4.20-8/include -g -Wall -o myfirstdev.o 结果是: In file included from /usr/src/linux-2.4.2...
照猫画虎写了个字符设备驱动,不过该如何编译啊?
gcc -c myfirstdev.c -D_KERNEL_ -DMODULE -O2 -I/usr/src/linux-2.4.20-8/include -g -Wall -o myfirstdev.o
结果是:
In file included from /usr/src/linux-2.4.20-8/include/linux/sched.h:16,
from /usr/src/linux-2.4.20-8/include/asm/uaccess.h:8,
from myfirstdev.c:6:
/usr/src/linux-2.4.20-8/include/linux/timex.h:173: field `time' has incomplete type
/usr/src/linux-2.4.20-8/include/linux/timex.h:188: confused by earlier errors, bailing out
这些错好像都是指向内核中的。
#include
#include
#include
#include
#include
#include
#include
#include
#include
static test_major=254;
ssize_t test_read(struct file *filp,char *buf,size_t count,loff_t *f_pos);
static ssize_t test_write(struct file *filp,const char *buf,size_t count,loff_t *ppos);
int test_open(struct inode *inode,struct file *filp);
int test_release(struct inode *inode,struct file *filp);
struct file_operations test_ops={
open: test_open,
release:test_release,
read: test_read,
write: test_write,
};
sszie_t test_read(struct file *filp,char *buf,size_t count,loff_t *f_pos)
{
//read operation
printk("read operationn");
}
static ssize_t test_write(struct file *filp,const char *buf,size_t count,loff_t *ppos)
{
//write operation
printk("write operationn");
}
int test_open(struct inode *inode,struct file *filp)
{
//open operation
MOD_INC_USE_COUNT;
printk("open operationn");
return 0;
}
int test_release(struct inode *inode,struct file *filp)
{
//release operation
MOD_DEC_USE_COUNT;
printk("release operationn");
}
int init_module(void)
{
int result;
printk("init module operationn");
result=register_chrdev(test_major,"test",&test_ops);
printk("Major is %d!n",test_major);
return 0;
}
void cleanup_module(void)
{
unregister_chrdev(test_major,"test");
printk("exit modulen");
}
gcc -c myfirstdev.c -D_KERNEL_ -DMODULE -O2 -I/usr/src/linux-2.4.20-8/include -g -Wall -o myfirstdev.o
结果是:
In file included from /usr/src/linux-2.4.20-8/include/linux/sched.h:16,
from /usr/src/linux-2.4.20-8/include/asm/uaccess.h:8,
from myfirstdev.c:6:
/usr/src/linux-2.4.20-8/include/linux/timex.h:173: field `time' has incomplete type
/usr/src/linux-2.4.20-8/include/linux/timex.h:188: confused by earlier errors, bailing out
这些错好像都是指向内核中的。
#include
#include
#include
#include
#include
#include
#include
#include
#include
static test_major=254;
ssize_t test_read(struct file *filp,char *buf,size_t count,loff_t *f_pos);
static ssize_t test_write(struct file *filp,const char *buf,size_t count,loff_t *ppos);
int test_open(struct inode *inode,struct file *filp);
int test_release(struct inode *inode,struct file *filp);
struct file_operations test_ops={
open: test_open,
release:test_release,
read: test_read,
write: test_write,
};
sszie_t test_read(struct file *filp,char *buf,size_t count,loff_t *f_pos)
{
//read operation
printk("read operationn");
}
static ssize_t test_write(struct file *filp,const char *buf,size_t count,loff_t *ppos)
{
//write operation
printk("write operationn");
}
int test_open(struct inode *inode,struct file *filp)
{
//open operation
MOD_INC_USE_COUNT;
printk("open operationn");
return 0;
}
int test_release(struct inode *inode,struct file *filp)
{
//release operation
MOD_DEC_USE_COUNT;
printk("release operationn");
}
int init_module(void)
{
int result;
printk("init module operationn");
result=register_chrdev(test_major,"test",&test_ops);
printk("Major is %d!n",test_major);
return 0;
}
void cleanup_module(void)
{
unregister_chrdev(test_major,"test");
printk("exit modulen");
}
|
提示很清楚啊!time 的类型没定义还差头文件吧