精华内容
下载资源
问答
  • 2.6.x内核usb转串口FTDI驱动使用 ... LinuxUSB转串口的驱动 https://www.linuxidc.com/linux/2011-02/32218.htm ...驱动学习——Linux下浅析USB转串口驱动的流程 https://blog.csdn.net/baweiyao...

    2.6.x内核usb转串口FTDI驱动使用
    http://www.cnblogs.com/xiaotlili/articles/2129057.html

    Linux下USB转串口的驱动
    https://www.linuxidc.com/linux/2011-02/32218.htm

    驱动学习——Linux下浅析USB转串口驱动的流程
    https://blog.csdn.net/baweiyaoji/article/details/77776442

    展开全文
  • 4、USB serial 驱动代码分析 文件: drivers/usb/serial/usb-serial.c usb_serial_init(void) |---alloc_tty_driver /*分配serial驱动,最多支持512个USB Serial*/ | |---tty_alloc_driver | |---_...

    4、USB serial 驱动代码分析

    文件:

    drivers/usb/serial/usb-serial.c

     

    usb_serial_init(void)
        |---alloc_tty_driver  /*分配serial驱动,最多支持512个USB Serial*/
        |       |---tty_alloc_driver
        |           |---__tty_alloc_driver
        |               |---kzalloc
        |
        |---bus_register  /*注册USB Serial 总线*/
        |
        |---usb_serial_tty_driver /*设置驱动名、设备名、主次设备号、传输模式、速率*/
        |
        |---tty_set_operations /*设置Serial的操作方法*/
        |   |---tty_operations
        |
        |---tty_register_driver /*注册tty驱动*/
        |   |---tty_register_device
        |   |   |---tty_register_device_attr  /*注册一个tty设备*/
        |   |
        |   `---proc_tty_register_driver /*注册到/proc/tty/driver/*/
        |
        |---usb_register /*注册USB驱动*/
        |
        `---usb_serial_generic_register /*注册通用驱动*/

    当插入设备,device与driver配对成功,内核将调用指定驱动中的probe函数。

    usb_serial_probe
        |---search_serial_device 
        |   |---to_usb_driver /*标记USB设备驱动到USB core*/
        |   `---list_for_each_entry /*检查USB ID是否与已知设备匹配*/
        |
        |---create_serial
        |   |---kzalloc /*给Serial分配内存*/
        |   |---usb_get_dev /*返回设备指针*/
        |   `---usb_get_intf  /*返回接口指针*/
        |
        |---kzalloc /*给端点分配内存*/
        |
        |---find_endpoints /*匹配描述符,找到所需端点*/
        |
        |---dev_info /*查找其他需要的device信息*/
        |   /*设置端点信息*/
        |---setup_port_bulk_in 
        |---setup_port_bulk_out
        |---setup_port_interrupt_in
        |---setup_port_interrupt_out
        |
        |---usb_set_intfdata /*设置驱动数据*/
        |   |---dev_set_drvdata
        |       |---driver_data
        |   /*向USB core 注册所有的端口*/
        |---device_enable_async_suspend
        |---device_add
        |
        `---usb_serial_console_init /*usb 串行控制台初始化*/
            `---register_console /*注册USB串行控制台*/

     

    linux USB驱动程序需要做的第一件事件就是在linux usb子系统里注册,这个子系统就是usb-core,同事提供一些相关信息,例如这个驱动程序支持哪种设备,当被支持的设备从系统插入或者拔出时,会有哪些动作,所有这些信息都传送到usb子系统中,在usb-skeleton.c 中是这样表示的

    展开全文
  • 该程序可以完成Linux环境下的USB转串口驱动程序
  • Linux下的CDC-ACM驱动源码,USB虚拟串口驱动程序,欢迎下载学习!
  • USB串口驱动 RS232

    2012-11-11 23:40:58
    XP/WIN7/linux 适合于交换机console口驱动与编码器串口驱动
  • Linux串口驱动

    2014-02-18 17:02:02
    linuxUSB串口驱动,硬件为CH341,该硬件可被系统自动识别,对串口进行操作时,只需要调用read,write等函数即可。
  • USB转RS485串口驱动USB转RS485串口驱动安装步骤1、在安装前可以先看看使用说明再安装。将USB转换线插入电脑的USB接口中,系统会提示检测到新设备并出现新硬件添加向导,选择从列表或指定的位置安装,手动安装,找到...

    USB转RS485

    串口驱动

    32eb9d03051d20f47242a4a34fb8d0da.png

    USB转RS485串口驱动安装步骤

    1、在安装前可以先看看使用说明再安装。将USB转换线插入电脑的USB接口中,系统会提示检测到新设备并出现新硬件添加向导,选择从列表或指定的位置安装,手动安装,找到刚刚驱动的解压目录,让WINDOWS自动搜索更新驱动就OK了。

    2、最后看到设备管理器中出现COM7端口号表示已成功完成安装。根据硬件添加向导一步步的引导安装驱动

    afa2c4f16485c92d23b2e56620934fc7.png

    USB转RS485串口驱动支持系统

    Windows 8.1

    Windows 8.1 x64

    Windows 8

    Windows 8 x64

    Windows Server2012

    Windows Server 2008 R2

    Windows 7

    Windows 7 x64

    Windows Server 2008

    Windows Server 2008 x64

    Windows Vista

    Windows Vista x64

    Windows Server 2003

    Windows Server 2003 x64

    Windows XP

    Windows XP x64

    Windows ME

    Windows 98

    Linux

    Mac OS X

    Mac OS 9

    Mac OS 8

    Windows CE.NET (Version 4.2 and greater)

    Android

    Windows RT

    USB转RS485串口驱动更新日志

    1.修复部分bug

    2.优化了部分功能

    展开全文
  • Linux串口驱动

    千次阅读 2015-12-03 14:30:05
    问题描述:机器集成了13个串口linux操作系统启动后,只能识别到4个串口且无法使用。 是否解决:已基本解决。 问题分析:  经测试,该ATM定制机使用的串口控制芯片为通用串口控制器8250系列的16550A型号。该...
    问题描述:机器集成了13个串口,linux操作系统启动后,只能识别到4个串口且无法使用。
    是否解决:已基本解决。
    问题分析:
        经测试,该ATM定制机使用的串口控制芯片为通用串口控制器8250系列的16550A型号。该芯片内置3根地址线寻址范围达8字节,具有10个可编程寻址寄存器(通过地址复用),支持4级中断控制,收发双缓冲寄存器,拥有16字节fifo缓存。
        8250系列芯片默认的IO寄存器基地址以及中断号分布如下:
        /dev/ttyS0 (COM1), port 0x3f8, irq 4
        /dev/ttyS1 (COM2), port 0x2f8, irq 3
        /dev/ttyS2 (COM3), port 0x3e8, irq 4
        /dev/ttyS3 (COM4), port 0x2e8, irq 3
        但是**ATM机没有按照默认约定部署板级芯片,而是采用以下的方式分配IO寄存器地址:
        0x2E8,     /* COM1*/    
        0x3E8,     /* COM2 */    
        0x240,     /* COM3 */    
        0x248,     /* COM4 */    
        0x250,     /* COM5 */    
        0x258,     /* COM6 */    
        0x260,     /* COM7 */    
        0x268,     /* COM8 */    
        0x270,     /* COM9 */    
        0x278,     /* COM10 */    
        0x2F0,     /* COM11 */    
        0x2F8,     /* COM12 */        /* BIOS 中默认关闭 */
        0x3F8,     /* COM13 */        /* BIOS 中默认关闭 */
        而linux内核采用8250系列芯片约定的IO基地址进行配置,且默认只支持创建最多4个串口设备:
     
        ===================  _ASM_X86_SERIAL_H ==================
         #define SERIAL_PORT_DFNS                \
         /* UART    CLK    PORT    IRQ    FLAGS                */    \
        { .uart = 0,  BASE_BAUD,  0x3F8,  4,  STD_COMX_FLAGS }, /* ttyS0 */    \
        { .uart = 0,  BASE_BAUD,  0x2F8,  3,  STD_COMX_FLAGS }, /* ttyS1 */    \
        { .uart = 0,  BASE_BAUD,  0x3E8,  4,  STD_COMX_FLAGS }, /* ttyS2 */    \
        { .uart = 0,  BASE_BAUD,  0x2E8,  3,  STD_COM4_FLAGS  }, /* ttyS3 */


        ===================== MenuConfig ===========================
        [*]   Console on 8250/16550 and compatible serial port
        [*]   DMA support for 16550 compatible UART controllers 
        <*>   8250/16550 PCI device support 
        <M>   8250/16550 PCMCIA device support                
        (4)  Maximum number of 8250/16550 serial ports       
        (4)  Number of 8250/16550 serial ports to register at runtime 
        [*]   Extended 8250/16550 serial driver options      
        [*]     Support more than 4 legacy serial ports             
            < >       Support Fourport cards                          
            < >       Support Accent cards         
        因此linux默认无法操作识别全部13个串口且识别出的4个串口也因IObase地址错误无法工作,除非使用串口工具(linux下使用setserial)修改COM口对应的ioport及irq至正确方可。              

    解决方案:
        1.根据以上分析测试修改linux内核配置,并更正x86平台下8250芯片的serial寄存器地址,然后重新编译打包内核。经测试已经能够识别全部的13个串口:
    /dev/ttyS0, Line 0, UART: 16550A, Port: 0x02e8, IRQ: 7
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS1, Line 1, UART: 16550A, Port: 0x03e8, IRQ: 7
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS2, Line 2, UART: 16550A, Port: 0x0240, IRQ: 10
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS3, Line 3, UART: 16550A, Port: 0x0248, IRQ: 4
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS4, Line 4, UART: 16550A, Port: 0x0250, IRQ: 10
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS5, Line 5, UART: 16550A, Port: 0x0258, IRQ: 10
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS6, Line 6, UART: 16550A, Port: 0x0260, IRQ: 11
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS7, Line 7, UART: 16550A, Port: 0x0268, IRQ: 11
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS8, Line 8, UART: 16550A, Port: 0x0270, IRQ: 11
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS9, Line 9, UART: 16550A, Port: 0x0278, IRQ: 11
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS10, Line 10, UART: 16550A, Port: 0x02f0, IRQ: 3
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS11, Line 11, UART: 16550A, Port: 0x02f8, IRQ: 7
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    /dev/ttyS12, Line 12, UART: 16550A, Port: 0x03f8, IRQ: 7
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000
        Flags: spd_normal skip_test

    但是识别出的串口依然无法正常工作。

        2.接下来使用串口工具将串口irq重设为irq0,则对应的串口可以正常工作。接下来分析内核源码:
    =========== Data Structure ===========
    up-port.handle_irq = serial8250_default_handle_irq;

    static struct uart_ops serial8250_pops = {
        .startup    = serial8250_startup,
        ....
            .....
    }

    ========== Function Call ============
    serial8250_startup() -->
        serial8250_do_startup()

    ---------------------- request IRQ ----------------
        /*
         * If the "interrupt" for this port doesn't correspond with any
         * hardware interrupt, we use a timer-based system.  The original
         * driver used to do this with IRQ0.
         */
        if (!port->irq) {
            up->timer.data = (unsigned long)up;
            mod_timer(&up->timer, jiffies + uart_poll_timeout(port));
        } else {
            retval = serial_link_irq_chain(up);
            if (retval)
                goto out;
        }


    serial_link_irq_chain(up) -->
        request_irq(up->port.irq, serial8250_interrupt,


    up->timer.function = serial8250_timeout;

    ------------------------ IRQ Handler ---------------------------
    /* whether we have or not IRQ, have the same result */

    serial8250_interrupt() -->
        up->port.handle_irq(&up->port) == serial8250_default_handle_irq() -->
            serial8250_handle_irq(port, iir) -->
                serial8250_rx_chars(up, status);


    serial8250_timeout() --> 
        up->port.handle_irq(&up->port) == serial8250_default_handle_irq() -->
            serial8250_handle_irq(port, iir) -->
                serial8250_rx_chars(up, status);

        可见,将串口irq重置为0实际上将串口的工作模式由中断模式变更为轮询模式(实际也是中断模式,在时钟中断控制下轮询串口),不会影响其他设备工作。缺点是可能会导致CPU占用率稍微高一些,但经过实际测试未见明显差异。
        由于轮询模式与中断模式使用的是同一个处理函数操作串口,中断模式下串口无法工作,轮询模式可以工作,因此可以确定串口的ioport等寄存器设置没有问题。
        接下来将串口irq重设为irq1(键盘),发现没有按键触发时串口无法接受数据,当连续按键(连续触发irq1)时串口可已正常工作。结合内核源码测试证明中断处理函数的注册没有问题。后续又测试了irq12(鼠标)/irq23(USB)等多个中断号均证明该结论。
        接下来通过继续分析源码以及各种修改测试均发现8050的IER(中断使能寄存器)设置正常(意味着CPU允许8250控制芯片触发中断),但是CPU依然无法接收来自8250控制器的中断。

    问题结论:
        目前通过修改内核驱动增加轮询机制使得系统可以正确识别所有13个串口并能正常工作。
        但是8250中断触发问题依然没有妥善解决,经分析怀疑是芯片型号差异(即便主板使用的不是16550A,但是内核依然可能显示16550A)或板级线路设计问题,故需要该机器的主板电路原理图以作进一步分析。
        至于windows XP能够正常工作,由于windows闭源目前没有证据证明该系统采用的是中断模式,故可能采用的是轮询模式。
    展开全文
  •  主要是想对Linux 串口usb转串口驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如字符设备驱动、平台驱动等也不进行详细说明原理。如果有任何错误地方,请指出,谢谢! 声明...
  • linux PL2303 usb转串口驱动源码
  • linux内核对USB串口驱动移植

    千次阅读 2018-12-09 11:31:18
    回想一下之前用windows下的串口助手,接收和发送对底层开发板子的数据流。硬件层面上,下位机通发送数据...软件层面上,需要串口驱动 CH341 PL2303,和USB驱动。然后才能通过串口助手(应用程序)来实现与下位机的交互。
  • linuxusb转串口驱动分析

    千次阅读 2013-05-16 13:37:54
    linuxusb转串口驱动分析 分类: linux driver 2012-06-08 15:11 456人阅读 评论(0) 收藏 举报 linuxstructinterfacereturningbuffer工作 最近要做一个关于LTE的项目,模块厂家提供的驱动里面有...
  • linux使用USB转串口驱动设置

    万次阅读 2016-09-22 11:37:05
    如果直接使用串口线,而没有用到USB转串口设备,就不需要安装驱动。  如果使用了USB转串口,一般情况下也不需要安装驱动了,目前linux系统已经包含了该驱动,可以自动识别,亦可通过以下命令查看以便确认是否支持。...
  • Linux USB 串口传输速率提升设计

    千次阅读 2014-02-08 10:47:58
    内核原始的USB 串口驱动是为低速串口设备设计的,使用一个URB-R请求在USB总线上等待接收数据,这就好比是一辆车运输,每次接受数据返回后设备驱动将数据保存——卸载——在本地,再返回继续接收下一批数据。...
  • Linux添加USB转串口驱动

    千次阅读 2013-02-23 23:39:04
    Linux添加USB转串口驱动      当你的电脑没有串口时,你就必须要用到USB转串口线,这种线淘宝网等地方卖的很多,还是挺实用的。但是在PC机上使用要注意,是要按照驱动的,这个驱动嘛,自己找,下面...
  • arm linux 移植usb转串口驱动

    千次阅读 2016-07-26 10:09:53
    arm-linux下移植usb转串口 内核添加串口驱动:  Device Drivers --->   USB support --->  --- USB port drivers  USB Serial Converter support --->   
  • 自己写linux usb转串口 驱动

    千次阅读 2011-11-10 13:18:17
    在本机运行可以直接make,在开发板上运行,需要用交叉编译。... * USB Serial Converter Bus specific functions  *  * Copyright (C) 2002 Greg Kroah-Hartman (greg@kroah.com)  *  * This program is
  • USB to RS232串口驱动

    2013-07-31 12:37:04
    usb rs232 串口驱动,全部的串口驱动,包括window各个版本的还有linux和mac
  • LinuxUSB转串口驱动

    万次阅读 2014-04-06 01:00:34
    Linux发行版自带usb to serial驱动,以模块方式编译驱动,在内核源代码目录下运行Make MenuConfig选择Devces drivers-->USB seupport--> USB Serial Converter support --> USB driver for GSM and CDMA modems & [*...
  • linux下串口(serial)和串口驱动

    万次阅读 2017-08-04 17:37:21
    PC上的串口一般是ttyS,板子上Linux串口一般叫做ttySAC,是usb口转串口的是ttyUSB 外插串口卡的话默认是dev下的ttyS* ,一般ttyS0对应com1,ttyS1对应com2 1. 查看串口驱动信息  #cat /proc/tty/driver/...
  • 一、修改Android内核的编译配置  vi ~/myandroid/kernel_imx/.config文件中,确保下面的的配置项已经被选定。 (假如源码在~/myandroid目录下)   1、 USB电源管理特性的...2、 USB串口驱动相关的配置项:   
  • 我们知道,Linux对于USB设备的支持是十分强大的,USB接口...粗略翻了翻《Linux 那些事儿之我是U盘》,才意识到LinuxUSB host驱动有多复杂,不是两三天就能读懂的。( T^T..)。 这篇博文仅分析一下从内核初始化到USB
  • 1 usb转串口驱动驱动开发网tiamo的usb2com】 2 cp2102的比较全的资料 3 张帆《windows驱动开发技术详解》的随盘代码 4 ark3116的linux驱动 windows驱动代码 5 cp210x系列的linux驱动代码
  • Linux 2.6内核下USB转串口驱动源码

    热门讨论 2008-10-29 16:36:54
    Linux 2.6内核下USB转串口驱动源码,先安装内核源码然后直接make即可
  • Linux USB Host 驱动开发入门

    千次阅读 2016-10-21 00:56:36
    1. 目录结构下面以当前内核4.3.1为例,介绍... 该目录为主要的usb驱动目录,所有和usb硬件相关的代码都在这里,还包括部分类协议代码,有对mass storage设备的支持,串口设备的支持。也就是说内核默认支持u盘这类mass
  • 第二篇 4G模块-USB串口驱动测试

    千次阅读 2017-03-17 23:33:58
     在linux内核里边修改了对华为ME909S-821的支持,使用make uImage编译,然后下载到开发板上:上电开机,在系统启动过程会打印相关usb串口驱动的信息,但是,我们也可以使用dmesg随时查看,相关信息如下: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,127
精华内容 6,050
关键字:

linuxusb串口驱动

linux 订阅