当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 一个简单的内核驱动程序,编译出错了,请大家进来看看
帖子发表于 : 2007-05-09 11:52 

注册: 2007-04-12 17:18
帖子: 35
送出感谢: 0 次
接收感谢: 0 次
先是驱动程序源码
test.c
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif



#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kernel.h> /* printk() */
#include <linux/init.h>



static int test_open(struct inode *inode, struct file *filp);
static int test_release(struct inode *inode, struct file *filp);
static int test_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
unsigned long param);
static int check_test_change(kdev_t dev);
static int test_revalidate(kdev_t dev);
int test_init(void);
void test_cleanup(void);


#define MAJOR_NR 125
#define DEVICE_NAME "test" /* name for messaging */
#define DEVICE_NR(device) MINOR(device)
#define DEVICE_NO_RANDOM
#define DEVICE_OFF(d)

module_init(test_init);
module_exit(test_cleanup);

#include <linux/blk.h>


/********************************************************************************************************/



static struct block_device_operations test_fops = /* driver info */
{
owner: THIS_MODULE,
open: test_open,
release: test_release,
ioctl: test_ioctl,
check_media_change: check_test_change,
revalidate: test_revalidate,
};

static int test_open(struct inode *inode, struct file *filp)
{
MOD_INC_USE_COUNT;
return 0; /* success */
}

static int test_release(struct inode *inode, struct file *filp)
{
MOD_DEC_USE_COUNT;
return(0);
}

static int test_ioctl(struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg)
{
return 0;
}

static int check_test_change(kdev_t dev)
{
return 0;
}

static int test_revalidate(kdev_t dev)
{

return 0;
}

int test_init(void)
{
int result;

result = register_blkdev(MAJOR_NR, DEVICE_NAME, &test_fops);
if (result < 0)
{
printk(KERN_ERR DEVICE_NAME ": Unable to get major %d\n", MAJOR_NR );
return(result);
}

printk(KERN_ERR DEVICE_NAME ": init OK\n");
return(0);
}

void test_cleanup(void)
{
unregister_blkdev(MAJOR_NR, DEVICE_NAME);
}

再是Makefile
EXEC =test

OBJS =test.o

SRC =test.c



INCLUDE = /usr/src/uClinux-dist/linux-2.4.x/include

CC = arm-elf-gcc

LD = arm-elf-ld

MODCFLAGS = -D__KERNEL__ -I$(INCLUDE) -Wall -O2 -fno-strict-aliasing -fno-common -pipe -fno-builtin -D__linux__ -g -DNO_MM -mapcs-32 -march=armv4 -mtune=arm7tdmi -mshort-load-bytes -msoft-float -nostdinc -iwithprefix include

LDFLAGS = -m armelf -r



all: $(EXEC)



$(EXEC): $(OBJS)

$(LD) $(LDFLAGS) -o $@ $(OBJS)



%.o:%.c

$(CC) $(MODCFLAGS) -mapcs -c $< -o $@



clean:

-rm -f $(EXEC) *.elf *.gdb *.o

make

{standard input}: Assembler messages:
{standard input}:5686: Fatal error: Symbol sequence already defined.
test.c:36: output pipe has been closed
make: *** [test.o] 错误 1


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译