feifan1023 发表于 2012-12-29 17:43

在内核空间中如何操作串口??

最近在做开发的时候遇到了一个问题一直搞不明白,想请大家帮忙解决一下。问提是这样的,我需要做一个打印机驱动,驱动实现的功能是:驱动程序接受到用户空间的数据,然后处理数据,最后在驱动中把数据通过串口传输给打印机。我想问的是怎么样在内核驱动中来设置串口的波特率,实现读写的操作???串口的驱动在系统中是已经有了的。

feifan1023 发表于 2013-01-02 12:35

有没有回复一下子啊

star316 发表于 2013-01-02 16:10

可以参照这个注册的函数

static int __init usb_serial_init(void)
{
        int i;
        int result;

        usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
        if (!usb_serial_tty_driver)
                return -ENOMEM;

        /* Initialize our global data */
        for (i = 0; i < SERIAL_TTY_MINORS; ++i)
                serial_table = NULL;

        result = bus_register(&usb_serial_bus_type);
        if (result) {
                printk(KERN_ERR "usb-serial: %s - registering bus driver "
                     "failed\n", __func__);
                goto exit_bus;
        }

        usb_serial_tty_driver->owner = THIS_MODULE;
        usb_serial_tty_driver->driver_name = "usbserial";
        usb_serial_tty_driver->name =         "ttyUSB";
        usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
        usb_serial_tty_driver->minor_start = 0;
        usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
        usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
        usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
                                                TTY_DRIVER_DYNAMIC_DEV;
        usb_serial_tty_driver->init_termios = tty_std_termios;
        usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
                                                        | HUPCL | CLOCAL;
        usb_serial_tty_driver->init_termios.c_ispeed = 9600;
        usb_serial_tty_driver->init_termios.c_ospeed = 9600;
        tty_set_operations(usb_serial_tty_driver, &serial_ops);
        result = tty_register_driver(usb_serial_tty_driver);
        if (result) {
页: [1]
查看完整版本: 在内核空间中如何操作串口??