QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1798|回复: 23

请教设备驱动程序

[复制链接]
发表于 2003-5-21 16:01:06 | 显示全部楼层 |阅读模式
我看了一些关于设备驱动的书 还看了Linux Device Drivers 2nd Edition
我下载了他的例子ldd.samples-2.0-beta3
我编译里面的simple.h 但是编译不通过
我用的是redhat90 2.4.20-8

谁能给我一个例子 一个最简单的 可以编译通过的例子
发表于 2003-5-21 16:55:55 | 显示全部楼层
相信这里有你要的所有东西。以后发帖子先看一下精华区:
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=17245
回复

使用道具 举报

 楼主| 发表于 2003-5-21 17:56:02 | 显示全部楼层
唉...一声叹息
我要的的是一个字符设备驱动的例子
虽说可加载模块和这也有点关系  
但是这种贴子我看了不下10几遍
可方到我机器上还是不能用  
有没有谁成功过

redhat90 2.4.20-8

注:我要实际的 别和我说理论   我比较笨
回复

使用道具 举报

发表于 2003-5-21 19:38:35 | 显示全部楼层
sigh,你这样的提问,才是sigh。
内核driver目录下,你想要什么类型的driver都有萨。这个还不实际??
回复

使用道具 举报

 楼主| 发表于 2003-5-21 20:05:23 | 显示全部楼层
你是斑竹阿  
我可没有这样的水平阿
driver下的文件我看了 因为不知道那个设备驱动是最简单的
我找了cdrom/gscd.c 随便看看

哇 好多define 好多struct阿  这样的东西让我这个初学者咋看阿?

我说的实际一点是指 实际的可以学习的代码阿
回复

使用道具 举报

发表于 2003-5-21 20:17:23 | 显示全部楼层
于linux而言,我接触的时间绝对没有你的时间长,我正式在linuxfans注册,才开始真正玩linux。
无论学什么都是急不来的。driver,首先应该从kernel的角度认识它,知道kernel是如何组织、管理device资源:irq,ports,dma。在编写不同类型的driver,需要怎么让内核识别,有了构架,剩下的事情就是根据硬件特性编写控制流程。
实际可用的driver,一般都有很多结构的萨。
今天我什么都不会,明天也许还是什么都不会,但不代表我将来什么都不会。
如果你连内核是怎么组织device的都没有搞清楚,就谈driver编程,未免有点joke吧。
已有的driver就是最好的实例。先有driver的底层构架,才有具体driver的实例。
个人感觉而已。
回复

使用道具 举报

 楼主| 发表于 2003-5-21 20:31:55 | 显示全部楼层
大概你误会了  
我没有我没有在编写一个实用的驱动程序

说白了 我只需要一个每次return 0的最简单的设备  
依此来了解device的工作方式  注:是驱动程序的工作方式 不是kernel管理驱动的方式

我已经看过一些书了
一些 read write inode file .........  之类的东西略知一二
但我觉得一次性理解kernel太困难
所以决定从 设备驱动开始 一步步深入

如果你会写这样一个 啥事都不做 只返回0 的设备驱动  请给我一份
回复

使用道具 举报

发表于 2003-5-21 20:45:25 | 显示全部楼层
嘿嘿,现在我也不会,我以前一直玩FreeBSD的,受axin和dragonfly的感染,开始转向linux
我给你谈的,只是我以前FreeBSD的经验和一点点linux的认识。
我想你就拿一个实际的driver,把哪些处理都去掉,只是printk。
只留下和kernel probe & attach相关的不就可以了。
回复

使用道具 举报

 楼主| 发表于 2003-5-21 20:55:05 | 显示全部楼层
试ing
回复

使用道具 举报

 楼主| 发表于 2003-5-21 21:00:27 | 显示全部楼层
还有一个问题:
设备驱动实用的内存是不是物理内存?

其实我的最终目的是读写物理内存
我曾经在windows里做到过 使用windows的WDM
所以我想linux设备驱动也应该用物理内存吧
回复

使用道具 举报

发表于 2003-5-21 21:20:11 | 显示全部楼层
可以用memory,也可以用设备自己的存储单元。
回复

使用道具 举报

 楼主| 发表于 2003-5-21 21:25:13 | 显示全部楼层
xiexie
回复

使用道具 举报

发表于 2003-5-21 21:38:01 | 显示全部楼层
the scull in ldd sample is a simple one.
driver/char/mem.c is also a simple one. read all functions related with zero only, that is /dev/zero device.
回复

使用道具 举报

 楼主| 发表于 2003-5-22 12:58:00 | 显示全部楼层
按照Dragonfly 所说的 我改了一下driver/char/mem.c
[code:1]
#include <linux/config.h>
#include <linux/mm.h>
#include <linux/miscdevice.h>
#include <linux/tpqic02.h>
#include <linux/ftape.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/mman.h>
#include <linux/random.h>
#include <linux/init.h>
#include <linux/raw.h>
#include <linux/tty.h>
#include <linux/capability.h>

#include <asm/uaccess.h>
#include <asm/io.h>
#include <asm/pgalloc.h>

static ssize_t read_null(struct file * file, char * buf,
                         size_t count, loff_t *ppos)
{
        return 0;
}

static ssize_t write_null(struct file * file, const char * buf,
                          size_t count, loff_t *ppos)
{
        return count;
}

static struct file_operations null_fops = {
        read:                read_null,
        write:                write_null
};

int __init chr_dev_init(void)
{
        devfs_register (NULL, "myzero", DEVFS_FL_NONE,
                        MEM_MAJOR, 255,/*<<=======我不知道这个数该添啥 原来写的是3 */
                        S_IRUGO | S_IWUGO | S_IFCHR,
                        &null_fops, NULL);       
        return 0;
}

__initcall(chr_dev_init);

[/code:1]
我把前面的一大堆include都用上了

gcc -c -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/linux-2.4/include chard.c
编译通过

#cp chard.o /lib/modules/2.4.20-8/misc/
#depmod -a
#insmod chard
Using /lib/modules/2.4.20-8/misc/chard.o
/lib/modules/2.4.20-8/misc/chard.o: couldn't find the kernel version the module
was compiled for
又是version的问题 奇怪了 我可是抄mem.c的阿   是不是我编译有问题?
还有 mem.c写的和我看的书上写的不一样  书上还要unregister设备

请指教
回复

使用道具 举报

发表于 2003-5-22 15:38:44 | 显示全部楼层
试试看:

#include <linux/module.h>
#include <linux/kernel.h>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-12-3 23:55 , Processed in 0.080534 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表