Accessing a serial port from a linux kernel module

前端 未结 2 1108
生来不讨喜
生来不讨喜 2021-01-02 03:15

Hello Linux Kernel Driver Gurus!

I\'m writing a v4l2 driver for a camera that uses a serial interface for configuration. I\'d like the driver to configure the camer

相关标签:
2条回答
  • 2021-01-02 03:33

    First I would advise you to find a way to do this from the userspace if possible: what you try to achieve here really is userspace code in kernel code.

    But if you don't find a way to do it, this article shows you how to do userspace calls in kernelspace.

    Since you want to access a serial port, you should have calls that tty oriented, for instance for open:

    serial_fd = sys_open("/dev/ttyS0",  O_RDWR | O_NOCTTY | O_NONBLOCK))
    
    0 讨论(0)
  • 2021-01-02 03:35

    I presume that since a serial port is involved, this must be some kind of embedded system. After all, not many PCs even have serial ports. I also assume that the serial port can be considered a permanent connection, at least from the user's perspective. If that is all true, then you don't really want a TTY device. You want to access the device as a private UART.

    If you have a look at the Wolfson audio codecs (sound/soc/wm*.c) you will see an example of devices that primarily communicate over I2S but have an auxiliary I2C interface for configuration. This is conceptually what you want, I believe. The driver presents a unified interface to software, and issues commands to whatever hardware is appropriate. Obviously this is much cleaner than having to expose hardware implementation details to userspace.

    I couldn't find a good example of a UART driver in the kernel that works this way, but hopefully I've described what to look for. From a practical rather than technical purity point of view, it might just be better to do file I/O from the kernel.

    0 讨论(0)
提交回复
热议问题