2012-05-05 46 views
0

我正在開發一個linux內核模塊,我需要從串口讀取數據(字符)。 我想設置字符(例如:'D','T'和' - ')作爲來自串口的條目,我想讀取這些條目。我花了很長時間嘗試使用「inb(0x3f8)」和「termios」,但沒有成功。然而寫入數據正常工作與「OUTB」 我的Ubuntu 10.10作爲垂直框配置安裝爲客人VirtualBox上 系統我設置:如何在內核模式(Linux)下從串口讀取數據(字符)?

activated serial port 
    port number : COM1 IRQ 4 PORT I/O : 0x3f8 
    Port/path D:\Oracle\serial.txt 
+1

你確定你不能讓你的代碼在用戶空間運行,並利用現有的串行驅動程序?一些非常聰明的人已經爲一些串口芯片組編寫了串口驅動程序,如果你不試圖複製他們的工作,你可以節省很多時間。 – larsks

+0

我嘗試過,無論是用戶還是內核空間,我正在使用現有的串行驅動程序。進一步我可以寫在文件「/ dev/ttyS0」上,但是當我嘗試讀取它時,我得到了程序阻塞或者我得到一個段錯誤。我認爲它應該與輪詢,中斷和線程一起工作,但我不知道如何? :-( –

回答

1

我想,如果你在一個內核線程上運行,也可以使用filp_open或其他函數來獲取文件操作指針,然後可以通過file_operations指針使用「普通」調用。

只有的作品,如果你在一個「正常」的上下文中運行 - 「用戶」的過程或可能內核線程,它絕對不會正確的,如果你在一些「不尋常的是工作「上下文。

在一個正常的任務中,這些調用可以被阻塞,並且一切都將「正常工作」。我認爲。我已經嘗試過與套接字,它的工作原理。

您可能會遇到掛載文件系統的問題,因爲內核線程可能會得到一個包含很少(或不包含)文件節點的命名空間。這可能意味着在用戶空間中打開設備並以某種方式傳遞它更容易。

也要注意內核中有限的堆棧大小。

+0

非常感謝,看起來像,這些解決方案對於內核開發領域的新來者來說非常困難! –

+0

非常感謝,看起來這些解決方案對於內核開發領域的新來者如此困難!我發現了一些(不是真正的)解決方案,我在guest虛擬機和主機之間共享文件夾「D:\ Oracle」(包含串行端口重定向文件),並使用I –

+0

從用戶空間訪問文件「serial.txt」打開「和」fgets「 –