簡單說幾句吧,linux下的設備都是文件,流程也無非是open, read/write, close等當然,串口你得設置各種屬性才行對不對,比如在win下的超級終端就設置了波特率啊,停止位啊,奇偶校驗啊什麼的,這些屬性都通過 int tcgetattr(int fd, struct termios *termios_p); int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);函數來設置。完整代碼嗎自己去google,一把一把的,其實最重要的是設置好屬性,剩下的就是read,write的問題咯。希望對你有用對了,了解終端函數的詳情請在linux命令行終端獲取: man termios
B. Linux普通用戶運行串口
將USB串口設備插入USB口後,會在/dev/目錄下生成/dev/ttyUSB0文件(也可能為/dev/ttyUSB1,/dev/ttyUSB2...),
查看此文件
輸出為:
c說明表明設備為字元設備文件(d表示目錄文件,-表示普通文件,l表示鏈接文件,b表示塊文件),
其中rw-rw----表示root用戶作為文件所有者可以讀和寫,dialout用戶組內的用戶可以讀和寫,其他用戶不允許讀、寫和執行(r表示可讀,w表示可寫,x表示可執行)
因此,需要將當前用戶增加到dialout用戶組中
C. Linux串口讀二進制文件讀不完整,而.c和.txt文件都可以正常從串口讀取
檢查串口來的工作模式。
我記得串源行有一種 7bit 的傳輸模式,這個模式下,只能傳輸 7bit 的數據,對應的就是 ASCII 文本,二進制傳輸都會出問題。
其實,你也可以完全不考慮傳輸模式的問題。發送數據時,用 base64 編碼,收到數據後再解碼就 OK 了。這樣 base64 數據完全都是 7bit 的。
D. Linux 串口傳輸文件到Window系統去
1如果要是來無線傳的話源,需要socket 設置發送端和接收端,然後再用write去寫.
2想遍歷整個文件夾的話用c的話好復雜,如果您是在linux中想遍歷整個目錄,不如使用shell,一個`ls`就解決,在linux中shell腳本和程序配合使用是非常好用的
E. Linux串口調試工具--minicom
安裝完成後,請不要著急打開軟體。需先進行配置。具體步驟如下:
查看串口設備及文件許可權
linux下的所有操作面向用戶的都是文件操作,在對串口操作之前,我們應該先確認自己對該文件有沒有讀寫許可權。
linux下的usb串口命名為ttyUSB*,運行上面命令,可以看到有幾個設備掛載。
我們這里是:
只有ttuUSB0.再用lsusb查看:
usb 004正是我們掛上去的usb轉串口線纜,使用的晶元是PL2303。
但是正如上面顯示,ttyUSB0這個設備是root所有的,所以,我們以普通用戶身份打開minicom是沒法訪問該文件的。
運行sudo minicom -s便進入了minicom的配置界面,使用上下鍵選擇Serial port setup,回車。此時游標在「change which setting」後面停留,它的上面有如下菜單:
我們只需輸入上面對應的字母,就可以進如相應的菜單進行設置。設置完成,回車,游標會回到「change which setting」後面,如此重復。完成按回車返回主菜單即可。
返回主菜單後,選擇「Save setup as df1」,將其保存為默認設置,然後選擇 Exit退出。需退出後重新打開minicom,軟體才會使用上述參數進行初始化。
注意:如果沒有使用USB轉串口,而是直接使用串口,那麼Serial Device要配置為/dev/ttyS0。
如果上面設置順利,打開minicom
重新給設備上電後,此時,窗口裡就有信息列印出來了。
1)需使用Ctrl+a 進入設置狀態
2)按z進入設置菜單
(1)O鍵:打開配置選項;
(2)W鍵:自動卷屏。當顯示的內容超過一行之後,自動將後面的內容換行。這個功能在查看內核的啟動信息時很有用。
(3)C鍵:清除屏幕的顯示內容;
(4)B鍵:瀏覽minicom的歷史顯示;
(5)X鍵:退出minicom,會提示確認退出。
Ctrl + A --> O
選擇"Filenames and paths"
更多的參數,參見"man minicom"的輸出。
如果不加這個項,那麼在minicom和pc交互的時候中鍵入命令超過一行時候會被截斷,(這時候可以通過 <C-a> w 來開和關切換截斷行功能).
這樣,啟動之後我們會發現顯示的內容不是黑白的了。
這樣,啟動之後,所在minicom的輸出都會在<filename>中保留一份,如果原來文件存在,則追加,不存在則創建一個。
這樣,我們可以取代用 <C-a> * 發送命令的方式,將 <C-a> 替換成 [Alt] 或者 [ESC] .
這里,<filename>是你的腳本文件的名字,應該指定絕對路徑,否則就會在你啟動minicom的路徑下尋找。
Minicom是基於窗口的。要彈出所需功能的窗口,可按下 Ctrl-A (以下使用C-A來表示Ctrl-A),然後再按各功能鍵(a-z或A-Z)。先按C-A,再按'z',將出現一個幫助窗口,提供了所有命令的簡述。配置 minicom(-s 選項,或者C-A、O)時,可以改變這個轉義鍵,不過現在我們還是用Ctrl-A吧。
這里,只給出很少的命令,更多的交互命令參見"<C-a> z"的幫助輸出。
minicom -s 或啟動minicom之後運行 <C-a> o 來進行配置。
C:腳本文件的存放位置: <C-a> g 運行腳本時的路徑 。
D:選擇腳本程序: 默認 runscript ,也可以選擇 bash 腳本格式。
可以參考man手冊 man runscript .交互命令中可以運行" <C-a> G "來運行腳本。
參考資料 :
F. linux 內核 配置串口
由於linux的內核參數信息都存在內存中,因此可以通過命令直接修改,並且修改後直接生效。但是,當系統重新啟動後,原來設置的參數值就會丟失,而系統每次啟動時都會自動去/etc/sysctl.conf文件中讀取內核參數,因此將內核的參數配置寫入這個文件中,是一個比較好的選擇。
首先打開/etc/sysctl.conf文件,查看如下兩行的設置值,這里是:
kernel.shmall = 2097152
kernel.shmmax = 4294967295 如果系統默認的配置比這里給出的值大,就不要修改原有配置。同時在/etc/sysctl.conf文件最後,添加以下內容:
fs.file-max = 6553600
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
這里的「fs.file-max = 6553600」其實是由「fs.file-max = 512 * processes」得到的,我們指定processes的值為12800,即為「fs.file-max =512 *12800」。
sysctl.conf文件修改完畢後,接著執行「sysctl -p」使設置生效。
[root@localhost ~]# sysctl -p 常用的內核參數的含義如下。
kernel.shmmax:表示單個共享內存段的最大值,以位元組為單位,此值一般為物理內存的一半,不過大一點也沒關系,這里設定的為4gb,即「4294967295/1024/1024/1024=4g」。
kernel.shmmni:表示單個共享內存段的最小值,一般為4kb,即4096bit.
kernel.shmall:表示可用共享內存的總量,單位是頁,在32位系統上一頁等於4kb,也就是4096位元組。
fs.file-max:表示文件句柄的最大數量。文件句柄表示在linux系統中可以打開的文件數量。
ip_local_port_range:表示埠的范圍,為指定的內容。
kernel.sem:表示設置的信號量,這4個參數內容大小固定。
net.core.rmem_default:表示接收套接字緩沖區大小的預設值(以位元組為單位)。
net.core.rmem_max :表示接收套接字緩沖區大小的最大值(以位元組為單位)
net.core.wmem_default:表示發送套接字緩沖區大小的預設值(以位元組為單位)。
net.core.wmem_max:表示發送套接字緩沖區大小的最大值(以位元組為單位)。
G. Linux C 配置串口
配置串口需要包含頭文件
其中最核心的配置結構體為:
如何獲取該結構呢?我們操作串口跟操作文件一樣,也是調用 open() 函數來打開串口,
這樣我們就能夠得到一個文件描述符 fd ,然後就可以調用 tcgetattr() 函數來獲取上述配置結構體了。
Linux 串口默認的配置為:波特率 9600,數據位 8 位,無奇偶校驗,停止位 1 位,無 CTS/RTS 。
以下介紹一些常用的配置項:波特率、奇偶校驗、數據位、停止位、硬體控制流。
相關介面:
Linux 將串口的波特率分為了輸入波特率和輸出波特率,不過最常用的場景是將兩者設置成一樣。
cfgetispeed() 函數獲取輸入波特率, cfgetospeed() 函數獲取輸出波特率。 cfsetispeed() 函數設置輸入波特率, cfsetospeed() 函數用於設置輸出波特率,當然 cfsetspeed() 函數擴展為同時設置輸入和輸出波特率。
上述介面中的 speed_t 是一系列波特率的標志位,例如常用的 115200 波特率就為 B115200,參考下述選項:
設置奇偶校驗位可以通過修改 termios 結構體中的 c_cflag 成員來實現,若無校驗,則將 PARENB 位設為 0;若有校驗,則 PARENB 為 1。之後再根據 PARODD 來區分奇偶校驗, PARODD 為 1 表示奇校驗, PARODD 為 0 表示偶校驗。例如設置無奇偶校驗位:
設置數據位可以通過修改 termios 結構體中的 c_cflag 成員來實現,CS5、CS6、CS7 和 CS8 分別代表數據位 5、6、7 和 8。不過在設置數據位之前,需要先用 CSIZE 來做屏蔽欄位,清楚這幾個標志位,例如設置數據位為 8 位:
設置停止位可以通過修改 termios 結構體中的 c_cflag 成員來實現, CSTOPB 位為 1 表示 2 位停止位, CSTOPB 位為 0 標志 1 位停止位。例如設置停止位為 1 位:
設置硬體控制流可以通過修改 termios 結構體中的 c_cflag 成員來實現, CRTSCTS 為 1 表示使用硬體控制流,為 0 表示不使用硬體控制流。例如使能硬體控制流:
當然,最後還需要用 tcflush() 拋棄存儲在 fd 里的未接收的數據。
再利用介面 tcsetattr() 函數將配置信息寫入文件描述符 fd :
這樣整個串口最常用的用法就配置完成了。
具體的配置使用可以參考我的項目 HCI-Middleware 里的 hci_transport_uart_linux.c 文件。
參考:
H. 嵌入式linux怎樣用串口傳送文件
如果直接使用串口線,而沒有用到USB轉串口設備,就不需要安裝驅動。 如果使用了專USB轉串口,一般情況下也不屬需要安裝驅動了,目前linux系統已經包含了該驅動,可以自動識別,亦可通過以下命令查看以便確認是否支持。
I. 如何通過串口把一個程序發給linux
使用串口協議登錄Linux終端控制台,通過Zmodem文件傳輸協議接收一個外部文件。
命令:rz -y會彈出文件瀏覽窗口,選擇要上傳的文件即可。
-y
表示若文件已存在,則覆蓋。
J. 如何用JAVA通過串口來連接到linux系統,並對系統中的文件進行編輯操作
多用戶系統,除了系統資源有爭搶以外,2個用戶的操作不會互相影響 操作界面,有字元界面,也有圖形界面。linux的圖形界面和系統關系不大,只是一個應用程序,圖形界面有很多種,每個人都可以定製自己的linux 文件系統,和圖形界面一樣,跟linux....