首页 文章

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

提问于
浏览
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>

1 回答

  • 0

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

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

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

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

相关问题