当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请教驱动开发的问题
帖子发表于 : 2007-05-28 11:12 

注册: 2006-07-11 11:47
帖子: 33
地址: Dalian, China
送出感谢: 0 次
接收感谢: 0 次
小弟现在在学linux下的驱动开发。系统用的是UBUNTU。现在遇到一个问题,请高手指点一下,小弟感激不尽!

驱动程序的代码如下:

代码:
#include <linux/init.h>
#include <linux/modules.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/cdev.h>

#define DEV_MAJOR 200
#define DEV_MINOR 0

char *buf = "abcdefghijklmnopqrstuvwxyz";

static int scull_open(struct inode *scull_inode,
   struct file *scull_file);
static int scull_release(struct inode *scull_inode,
   struct file*scull_file);
static ssize_t scull_read(struct file* fp, char *ubuf,
   size_t count, loff_t *ppos);

dev_t scull_dev;
struct cdev *scull_cdev;
struct file_operations scull_fops =
{
   .owner = THIS_MODULE,
   .read = scull_read,
   .open = scull_open,
   .release = scull_release,
};

static int scull_open(struct inode *scull_inode,
   struct file *scull_file)
{
   return 0;
}

static int scull_release(struct inode *scull_inode,
   struct file*scull_file)
{
   return 0;
}

static ssize_t scull_read(struct file* fp, char *ubuf,
   size_t count, loff_t *ppos)
{
   int rc;
   rc = copy_to_user(ubuf, buf, count);
   return rc;
}

static int scull_init(void)
{
   scull_dev = MKDEV(DEV_MAJOR, DEV_MINOR);
   register_chrdev_region(scull_dev, 1, "scull");

   scull_cdev = cdev_alloc();
   scull_cdev->owner = THIS_MODULE;
   scull_cdev->ops = &scull_fops;
   cdev_init(scull_cdev, &scull_fops);
   cdev_add(scull_cdev, scull_dev, 1);

   return 0;
}

static void scull_exit(void)
{
   cdev_del(scull_cdev);
   unregister_chrdev_region(scull_dev, 1);
}

module_init(scull_init);
module_exit(scull_exit);

测试代码如下:
#include <linux/fs.h>
#include <stdio.h>

int main()
{
   char buffer[64];
   int count;
   int fd;

   fd = open("/dev/scull", 0);
   read(fd, buffer, 20);
   printf("%s", buffer);
   close(fd);

   return 0;
}


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-05-28 23:38 

注册: 2007-02-03 9:12
帖子: 39
送出感谢: 0 次
接收感谢: 0 次
你遇到了什么问题?


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-05-29 8:08 

注册: 2006-07-11 11:47
帖子: 33
地址: Dalian, China
送出感谢: 0 次
接收感谢: 0 次
谢谢楼上的热心回复,问题已经解决,把解决方案贴出来,也为以后别的兄弟留点参考。
sudo make
sudo insmod scull.ko
sudo mknod /dev/scull c 200 0
sudo ./test
sudo rmmod scull


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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