2

我正在尝试通过 RS232 串行接口从我的 linux 盒子连接到微控制器。

我已经编写了驱动程序并实现了 b/n pc 和微控制器协议,它使用内核中已经存在的 tty(/dev/ttyS0) 设备作为模块(例如,通过调用 open、close 等)。但是,当我尝试编译时,它说找不到打开、写入、读取等的引用...

如何仅使用驱动程序中的现有设备驱动程序?还有什么我需要包括的吗?

如果没有,我怎样才能从驱动程序中轻松使用串行端口?

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/cdev.h>
#include <linux/spinlock.h>
#include <linux/termios.h>
#include <linux/fcntl.h>
#include <linux/unistd.h>
4

1 回答 1

0

通常你应该在用户空间做这样的事情——在一个普通的用户空间程序中实现你的设备协议。

有可能,但绝对不建议在内核中做这些事情。例如,ppp 驱动程序在串行驱动程序之上实现网络驱动程序。我不知道在这种情况下它是如何工作的,但我希望用户空间帮助程序打开设备,初始化它的参数等,然后使用一些系统调用将文件描述符传递给内核。

您不能从内核调用任意库函数——或者实际上,根本不能调用任何库函数(实际上作为内核的一部分提供的库除外)。这包括内核系统调用。有可能调用的等效函数 - 例如,filp_open。

在大多数情况下,您不能只从内核调用正常的系统调用,因为他们希望指针指向用户空间数据,但在内核中,您的(通过 kalloc 等分配)通常会指向内核空间数据。两者不能随意混用。

于 2011-05-09T06:37:06.843 回答