作者 主題: Linux跟Solaris的RS232設定差異問題  (閱讀 2512 次)

0 會員 與 1 訪客 正在閱讀本文。

特級大肉腳

  • 憂鬱的高中生
  • ***
  • 文章數: 113
    • 檢視個人資料
Linux跟Solaris的RS232設定差異問題
« 於: 2013-01-07 18:45 »
各位大師好,
本肉腳最近在寫console操作的程式,但是有發現到同樣一段code在Linux跟Solaris上執行顯示的完全不一樣。
肉腳先用這裡的sample code做測試:
http://www.vr.ncue.edu.tw/esa/EmbeddedSystemProgramming2010/ch06.htm

發現讀取跟寫入資料是正常,但是將此code拿到Solaris上後發現噴出的都是亂碼。
想嘗試從網路上找相關差異性的文件,卻幾乎找不到。
有檢查過相對應的DEVICE名稱跟BAUDRATE值,這部份有確認改正確。

這兩支程式範例code,Solaris跟Linux只有改這兩行,其他code都沒有動到:
#define BAUDRATE B57600
#define MODEMDEVICE "/dev/cua/0"

有實際用cat /dev/cua/0去讀值去,從反應確認是這個裝置沒錯。
也有試著設定/etc/remote,可以從tip看到正常的console畫面。
所以想請問一下各位大師,是否有相關說明文件或注意事項?
謝謝。

特級大肉腳

  • 憂鬱的高中生
  • ***
  • 文章數: 113
    • 檢視個人資料
Re: Linux跟Solaris的RS232設定差異問題
« 回覆 #1 於: 2013-01-09 10:47 »
結果又是自己找到答案了,雖然肉腳還是搞不清楚Solaris跟Linux的差異在哪裡:
https://groups.google.com/d/topic/comp.unix.solaris/qDh5mMgEd7g/discussion

程式碼要修改的地方如下,就能動了:
#define MODEMDEVICE "/dev/term/1"

/*
        newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;
        newtio.c_lflag = ICANON;
        newtio.c_cflag &= ~OPOST;
*/
將這幾行改成:
        cfsetispeed(&newtio,BAUDRATE);
        cfsetospeed(&newtio,BAUDRATE);
        newtio.c_cflag |= CS8;
        newtio.c_cflag &= ~PARENB;
        newtio.c_cflag &= ~CSTOPB;
        newtio.c_cflag &= ~CSIZE;
        newtio.c_cflag &= ~CRTSCTS;
        newtio.c_cc[VMIN] = 1;
        newtio.c_cc[VTIME] = 0;