當前位置:首頁 » 操作系統 » linux打開串口

linux打開串口

發布時間: 2023-05-14 22:17:24

A. linux 用open打不開串口

操作硬體之前都是要先open設備,先來分析下這里的open函數具體做了那些工作(做了大量工作 ,真的!)。
應用層通過open系統調用open(「/dev/s3c2410_serial0」,)一層一層調用到會調用到tty_open。
因為串口在linux下是作為tty設備的,結合前面的注冊過程可以分析這里首先調用的就是tty_open這個函數。
cdev_init(&driver->cdev, &tty_fops);cdev_init(&driver->cdev, &tty_fops);因為根據注冊的時候將s3c2410_serial0注冊為一個字元設備,字元設備對應的驅動為tty_fops 詳細介紹查看下《linux就該這么學》

B. 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 "來運行腳本。

參考資料

C. 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 文件。

參考:

D. 如何查看linux下串口是否可用串口名稱等

分析如下:

1、查看串口是否可用,可以對串口發送數據比如對com1口,echo lyjie126 > /dev/ttyS0。

2、查看串口名稱使用ls-l/dev/ttyS* 一般情況下串口的名稱全部在dev下面,如果你沒有外插串口卡的話默認是dev下的ttyS* ,一般ttyS0對應com1,ttyS1對應com2,當然也不一定是必然的;

3、查看串口驅動:cat /proc/tty/drivers/serial。

4、查看串口設備:dmesg | grep ttyS*。

(4)linux打開串口擴展閱讀

串口控制器顧名思義,就是可通過串口實現控制功能的一台控制器。即由上位機通過串口發送特定協議格式的指令給控制器,進而來控制外圍設備或器件,也叫單片機串口控制器。

串口控制器就是1台寫入了串口通信程序的單片機控制器,有2種工作模式:

1)上位機監控模式:可由上位機串口控制,實現串口監控;

2)離線控制模式:在通過上位機設置好相關參數後,也可脫離上位機進行獨立控制。

串口控制器就是1台寫入了串口通信程序的單片機控制器,有2種工作模式:

1)上位機監控模式:可由上位機串口控制,實現串口監控;

2)離線控制模式:在通過上位機設置好相關參數後,也可脫離上位機進行獨立控制。

E. 如何在linux下如何查看串口是否打開

在linux下查看串口可以用dmesg命令,參考下圖:

上圖中顯示有兩個串口,com1=0x3f8,com2=0x2f8 對應linux設備名稱是ttyS0和ttyS1

F. Linux普通用戶運行串口

將USB串口設備插入USB口後,會在/dev/目錄下生成/dev/ttyUSB0文件(也可能為/dev/ttyUSB1,/dev/ttyUSB2...),
查看此文件

輸出為:

c說明表明設備為字元設備文件(d表示目錄文件,-表示普通文件,l表示鏈接文件,b表示塊文件),
其中rw-rw----表示root用戶作為文件所有者可以讀和寫,dialout用戶組內的用戶可以讀和寫,其他用戶不允許讀、寫和執行(r表示可讀,w表示可寫,x表示可執行)
因此,需要將當前用戶增加到dialout用戶組中

G. 如何在linux上使用串口設備

簡單的運行 dmesg 命令
$ dmesg | grep tty
輸出:
[ 37.531286] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 37.531841] 00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 37.532138] 0000:04:00.3: ttyS1 at I/O 0x1020 (irq = 18) is a 16550A

setserial 命令
setserial 是一個程序用於設定並/或報告某個串口關聯的配置信息。該信息包括串口用到的I/O 埠和中斷號,以及Break鍵是否應被解釋為Secure Attention Key 等等。 僅僅是輸出如下的命令:
$ setserial -g /dev/ttyS[0123]
輸出:
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x1020, IRQ: 18
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

帶-g選項的setserial幫助找到你的Linux板子上的物理串口。
Linux 串口控制台程序
一旦串口被確定了,你就能使用許多的工具來配置Linux板子:
minicom- 用於控制modem和連接到mp 設備的最好的串口通信程序。
wvidial or other GUI dial up networking program - 一個內建智能PPP 撥號器。
getty / agetty - agetty 打開一個 tty 埠, 提示登錄名稱並調用 /bin/login 命令。
grub / lilo configuration - 配置串口為系統控制台。

H. linux必須手動啟動串口服務

(1)在把項目打成jar包部署的時候,該jar包不能做成鏡像容器運行,因為某些設備是採用485通訊,即是將設備的485線轉成一個USB插入到伺服器,之後服務運行的時候,是通過查詢系統有哪些串口,並且是該USB的串口與服務進行通訊。整乎擾個流程通訊都是在物理伺服器游頃余上面,做成鏡像容器運行無法連接串口通訊。

(2)在運行jar包的時候,需要在伺服器部署jdk,同時需要在部署好的jdk裡面需要上傳一些串口服務運行的RXTXcomm.jar和librxtxParallel.so,librxtxSerial.so,具體可以網路;在一些其他的物理伺服器上面librxtxSerial.so這個文件的版本有時候有問題,需要安裝x86_64-unknown-linux-gnu文件夾裡面的librxtxSerial.so文件;同理window上的jdk也需要這些;

(3)程序運行出錯提示的沒有串口相關的文件jar包,這個需要需要考慮服務運行時候用的是那個神滾jdk,是否把(2)裡面的文件放到程序運行的jdk裡面

I. 如何實現在LINUX系統上直接控制串口RTS信號電

嵌入式開發板到手後一般都會開放串口,對串口的操作可以說是最基本的操作,那麼拿到開發板後怎樣操作串口呢?怎樣利用串口向外發送數據呢?

我做的是一個通過串口來發送一串字元,實現NBIot的傳輸,系統是linux系統下的,發送的數據需要是16進制的數據。以下是c語言開發串口的相關代碼記錄。
1.找到串口的設備號
在linux系統下,所有的設備都是文件,所以要先找到串口這個設備文件,之後就可以對這個串口進行操作。
#define UART_DEV "/dev/ttyAMA2"
2.打開串口並初始化串口

串口的打開只需要一個open函數就可以打開,下面有一個初始化的函數,先將串口打開,如果打開成功,會返回一個設備描述符。

J. Linux串口相關的操作及綁定

@ toc

可在控制台輸入

也可以用stty設置串口參數

使用後相當於串口回傳,發什麼回什麼

發送數據

可以對串口發送數據比如對com1口

一般情況下串口的名稱全部在dev下面,如果你沒有外插串口卡的話默認是dev下的ttyS* ,一般ttyS0對應com1,ttyS1對應com2,當然也不一定是必然的;

如果有ttyS設備,再看/dev/有沒有ttyS*,如沒有就建立一個:

如果板子的設備中沒有標准串口設備ttyS0,也沒有ttySAC0。/dev下應該有一個USB串口:/dev/ttyUSB0.

當一個串列卡或數據卡被偵測到時,它會被指定成為第一個可用的串列設備。通常是/dev/ttyS1(cua1)或/dev/ttyS2(cua2),這完成看原已內建的串口數目。ttyS*設備會被報告在/var/run/stab內。

PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC

可能是linux下的串口設備沒有打開,需要改變串口設備
的許可權,或者根據文章頭添加用戶到組處理

可以通過以下命令 查看 板子上的硬體埠的內核設備名

該條命令會將 ttyUSB0所對應的硬體埠的kernel設備名 顯現出來, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0

cmd.sh如下:

./getUSB.py 調用當前路徑下的getUSB.py這個Python語言,明確此次是哪個,ttyUSB0,或者ttyUSB1掛載在埠3-1.1上

getUSB.py:

完成之後 ,設置開機啟動cmd.sh(在/etc/rc.local中設置)則每次開機之後,會從/dev/ttydata獲取到固定埠的數據

方式一

寫入內容如下:

方式二

我的硬體序列號:ATTRS{serial}=="FTSYWCXZ"這個號是唯一的

可以通過/dev/usb_0打開串口設備

常用的匹配類型:

熱點內容
c語言自考 發布:2025-05-15 07:52:42 瀏覽:499
壓縮的玉 發布:2025-05-15 07:51:22 瀏覽:788
android的控制項 發布:2025-05-15 07:50:36 瀏覽:551
南崗法院伺服器ip地址 發布:2025-05-15 07:46:02 瀏覽:286
實況如何退出賬號安卓 發布:2025-05-15 07:45:56 瀏覽:917
深入編譯器 發布:2025-05-15 07:41:35 瀏覽:878
電信手機號服務密碼怎麼查 發布:2025-05-15 07:40:10 瀏覽:613
python全局變數文件 發布:2025-05-15 07:35:06 瀏覽:954
位元組和存儲位元組 發布:2025-05-15 07:32:10 瀏覽:521
linux應用開發工程師 發布:2025-05-15 07:32:07 瀏覽:261