我目前的任務是將一個驅動程序從QNX移植到Linux的一些16550兼容芯片。該芯片提供了幾個UART,每個都被視爲一個標準的16550串行端口,雖然有一些擴展。命令行配置一個TTY設備
現在,在QNX中,整個設備驅動程序被打包成一個獨立的可執行程序,既可以作爲驅動程序,也可以作爲所提供的UART的初始配置程序(波特率,環回模式等)。這在QNX中很自然因爲設備驅動程序在用戶空間中運行並且比標準可執行文件多一點。
在Linux,OTOH上,驅動程序現在作爲內核模塊實現,可以隨意加載。更多的,這個模塊是由製作人提供的,所以我不想修改或修補它太多。
對我來說,剩下的任務是提供一些機制來設置這些UART的參數。它們被視爲/ dev/ttyPREFIXX設備。我打算通過在感興趣的串行端口上調用一個標準的C程序可執行文件來調用標準termios(即tcsetattr()或ioctls)。
這引出了我的問題:我的方法是對的嗎?如果是,那麼如何實現持久配置?當我認識到這個事實時(從這個例子:http://www.easysw.com/~mike/serial/serial.html),termios函數在OPEN設備上起作用。簡而言之:他們打開設備,設置參數,讀取或寫入參數,然後關閉端口。關閉端口後,配置(波特率等)是否丟失?我希望它不是,因爲它已經存儲在硬件中。
可以somebodey向我確認配置是持久的嗎?如果沒有,如何實現持久性,未來的應用程序將再次打開該端口,並期望它具有一些預先建立的參數?如果沒有,我應該修改模塊內核來接受一些參數,然後在加載時進行配置嗎?
我現在打算的方法是編寫C可執行文件,用於打開端口,設置其配置,然後關閉端口。我希望後面的應用程序將看到具有所需配置的端口。
謝謝。
謝謝你提到'stty'。你是對的,其中的代碼應該做我想要做的。我主要關心的是設備驅動程序的釋放功能撤消了所有配置,並且在設備關閉時調用此釋放功能。但看着'stty'應該能給我一點啓發。 – user1284631 2012-08-16 06:02:13