使用驱动程序内部的驱动程序的Linux

使用驱动程序内部的驱动程序的Linux

问题描述:

我想通过RS232串行接口从我的Linux机箱中的微控制器。使用驱动程序内部的驱动程序的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> 

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

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

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

在大多数情况下,你不能仅仅从内核中调用正常的系统调用,因为他们期望指向用户空间数据的指针,但是在你的内核中(通过kalloc等分配的)通常会指向内核空间数据。这两者不能*混合。

+0

PPP驱动程序使用所谓的“串行线路规程”这是一些ttyS ...特定的魔术。从技术上讲,可以从内核上下文打开fds并对它们执行系统调用。但为什么你会做这样的事情? – datenwolf 2012-01-03 01:08:12