2011-05-09 162 views
2

我想通過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> 

回答

0

通常你應該在用戶空間中做這樣的事情 - 在普通的用戶空間程序中實現你的設備的協議。

這是可能的,但絕對不建議在內核中執行這些操作。例如,ppp驅動程序在串行驅動程序之上實現網絡驅動程序。我不知道在這種情況下它是如何工作的,但我期望用戶空間幫助程序打開設備,初始化其參數等,然後使用某些系統調用將文件描述符傳遞到內核中。

您不能從內核調用任意庫函數 - 或者甚至任何庫函數(實際上作爲內核一部分提供的庫除外)。這包括內核系統調用。有可能調用的等價函數 - 例如filp_open。

在大多數情況下,你不能僅僅從內核中調用正常的系統調用,因爲他們期望指向用戶空間數據的指針,但是在你的內核中(通過kalloc等分配的)通常會指向內核空間數據。這兩者不能自由混合。

+0

PPP驅動程序使用所謂的「串行線路規程」這是一些ttyS ...特定的魔術。從技術上講,可以從內核上下文打開fds並對它們執行系統調用。但爲什麼你會做這樣的事情? – datenwolf 2012-01-03 01:08:12