当前位置:  技术问答>linux和unix

RS232串口驱动的一些问题,请各位执教

    来源: 互联网  发布时间:2015-11-18

    本文导语:  最近,要写一个linux下的RS232驱动程序,想在驱动程序一级实现异步IO。 但是我遇到了一些问题(我从来没有在linux下写程序,更不用说驱动了) 一:系统已经有了RS232串口的驱动。机器重新启动以后,硬件的端口地址...

最近,要写一个linux下的RS232驱动程序,想在驱动程序一级实现异步IO。
但是我遇到了一些问题(我从来没有在linux下写程序,更不用说驱动了)
一:系统已经有了RS232串口的驱动。机器重新启动以后,硬件的端口地址仍然不会改变对吧?
二:我怎么知道我的硬件(比如RS232)的的端口地址呢?
三:如果我要写一个RS232,如果硬件忙,我放到一个缓冲里面,我怎么保重硬件空闲的时候从缓冲
    中取出数据进行实际意义上的写出呢?

走过路过,不要错过。

各位请多多赐教,讲得无论多少都是对我的帮助,谢谢了!再谢谢!

|
概括一下:
驱动是自己约定的,比如内核自行约定次设备号0就是COM1,1就是COM2,那么内核就可以区分自己到底是操作哪一个IO!!!!
应用层就需要遵守这种约定,但为了简化操作,应用层在使用设备时,直接操作文件就可以了,这就需要将文件与设备关联起来,这就是设备文件的概念,需要用到mknod命令,这个命令在使用时需要遵守你内核中的约定,这样就将应用层与驱动程统一起来了!!!!!

驱动程序不管每个引脚的电平特征,直接往它上面读写就可以了么?
在PC机上的驱动程序基本上需要两个函数来操作设备,outb,inb,用于向设备的指定端口读写数据,具体的电平特征,在调试的时候可能会汲及到,比如你用示波器来看某个IO脚到底输出了数据没有!!!

如果串口被焊下来了!
我怎么探测它不见了?用什么特征(电气特征?或者用系统的某种数据结构?)可以探测到它的存在/消失?

对于一个键壮的驱动程序,有时需要在设备初始化例程中探测相应的设备是否存在,原理很简单,就是通过改写外围硬件一个寄存器,再去观察另一个会受影响的寄存器,看它是否是你想要的结果,这跟具体的硬件相关,需要结合具体硬件的芯片资料,当然,你也完全不用去判断这个硬件是否存在

|
第一次看到居然还给出99分的!!!!!!
1.如果你的串口是PC机上的标准串口,其地址是固定的,如果是PCI卡上的扩展串口,就不一定了
2.PC上的标准串口的地址是固定的,COM1的串口基地址就是0x3f8
3.那是你驱动做的事情,用户层可以不管!!!具体实现在LINUX设备驱动程序一书中有说明,你PC机上的串口驱动程序本身就支持异步方式,你需要用异步IO的方式对设备进行读写就行了,用不着去实现一个驱动,并且系统已经自带了这样的驱动,你是无法再为此写另一个驱动的,这涉及到设备是否独占的问题,默认情况下,串口设备是被独占的

|
给你代码,你自己参考一下,

////////////////////////Linux 驱动测试调试////////////////////////
#include  
#include  
#include  
#include  
#include  
#include  
#include 


#define DP_MAJOR 50 
#define DP_MINOR 0 
static int char_read(struct file *filp,char __user *buffer,size_t,loff_t *); 
static int char_open(struct inode *,struct file *); 
static int char_write(struct file *filp,const char __user *buffer,size_t ,loff_t*); 
static int char_release(struct inode *,struct file *); 
static char *arr,*p; 
static int chropen; 
struct cdev *my_cdev; 
static int len; 
struct file_operations Fops = { 
    .read = char_read, 
    .write = char_write, 
    .open = char_open, 
    .release = char_release,    /* a.k.a. close */ 
}; 

static int irq=4;
static char *interface="test";
/*
MODULE_PARM(interface, "s");
MODULE_PARM_DESC(interface, "A network interface");
MODULE_PARM(irq, "i");
MODULE_PARM_DESC(irq, "The IRQ of the network interface");
*/
static irqreturn_t myinterrupt(int irq, void *dev_id, struct pt_regs *regs)
{
    static int mycount = 0;

    if (mycount pid); 
    if(my_cdev==NULL){ 
        return -1; 
    } 
    
    if(register_chrdev_region(dev,10,interface)ops = &Fops; 
    cdev_init(my_cdev,&Fops); 
    cdev_add(my_cdev,dev,1); 

    return 0; 


static int char_open(struct inode *inode,struct file *file) 

    if(chropen==0) 
        chropen++; 
    else{ 
        printk(KERN_ALERT"Another process open the char devicen"); 
        return -1; 
    } 
    p=arr; 
    try_module_get(THIS_MODULE); 
    return 0; 


static int char_release(struct inode *inode,struct file *file) 

    chropen--; 
    module_put(THIS_MODULE); 
    return 0; 


static int char_read(struct file *filp,char __user *buffer,size_t length,loff_t *offset) 

    int i=0; 
    if(*p=='') 
        return 0; 
    while(length&&*p){ 
        put_user(*(p++),buffer++); 
        length--; 
        i++; 
    } 
    return i; 


static int char_write(struct file *filp,const char __user  *buffer,size_t length,loff_t *offset) 


    int i; 
    for(i=0;i

    
 
 

您可能感兴趣的文章:

  • 散分100,求解串口键盘和串口鼠标驱动
  • u boot中怎样写flash驱动以及串口驱动
  • linux串口驱动该怎么写
  • 串口modem驱动
  • 请问,那位高手研究过linux下的串口驱动程序?
  • Linux串口驱动insmod后无效
  • linux下串口驱动编写和PPP协议的实现高分相送
  • 通过linux驱动接口读取串口来自另外一个CPU发送的数据,有几个疑问:
  • linux驱动中如何向串口发送调试信息
  • 关于linux 串口驱动名称
  • 虚拟串口怎么读数据? 请有 串口 或者 usb 驱动经验的高手指点
  • linux下usb转串口驱动
  • 请问, android+linux内核 平台上, 有一个串口接口的外设置芯片, 想对它进行初化, 一般根据该平台下什么驱动改写?
  • 高分请教一个串口驱动模块加载的问题
  • linux键盘及串口驱动问题,初学,大家指教。急,在线等。谢谢了
  • 请问redhat linux 9的设备(显卡,网卡,串口,声卡等)驱动程序在什么位置?谢谢
  • 请问LINUX内核版本为2.4.31的是什么版本?自己写的串口驱动,是否向下兼容,还是必需版本相同?
  • 嵌入式下通过串口连接4线触摸屏如何搞呢?驱动?
  • 我找了个USB转串口的驱动源程序,但不知如何编译安装,哪位好心人帮帮我?
  • 在linux下如何驱动本机的串口
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • linux下几个设备通过串口串行连接,如何协调各串口发送数据
  • 网络技术 iis7站长之家
  • 高分求助:我笔记本没有串口,在linux下要和一个串口设备连,怎么办?
  • 关于linux串口通信中写串口的问题
  • 开发板串口与实际内核中的串口文件的对应关系怎么回事?谢谢帮忙
  • 怎么判断串口已经收到数据,并及时读出?怎么判断串口已经将写入的数据发送完毕?
  • 工控机有6个串口,但用光盘安装debian6.05,在dev中只找到4个串口,如何解决。
  • linux下串口发送数据用串口精灵接受不到或为全零
  • 在虚拟Linux系统下能进行串口通讯吗?最好给个串口通讯的代码!谢谢!
  • 要加多个串口,怎么分别指定他们的driver_name和dev_name以示区别各个串口?
  • 工控机上用光盘安装debian6.05,硬件上有6个串口,但是软件上即dev中只有4个串口,如何解决。
  • 嵌入式linux,串口初始化时,无法设置串口属性
  • 扩展的串口卡上的串口操作的问题
  • 请教串口通信的编程
  • 请问如何以独占的方式打开串口
  • linux下如何清空串口的输入输出缓存
  • linux下怎么监控串口?
  • u-boot中处理串口通讯的源码在哪?
  • 求助达人,USB转串口是否遇到过多台设备接入机器,串口冲突?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3