轉:https://blog.csdn.net/qq_38880380/article/details/77662637
一,安裝
sudo apt-get install minicom
二,配置
安裝完成后, 請不要着急打開軟件。需先進行配置。具體步驟如下:
1.linux下的所有操作面向用戶的都是文件操作,在對串口操作之前,我們應該先確認自己對該文件有沒有讀寫權限。
ls -l /dev/ttyUSB*
linux下的usb串口命名為ttyUSB,運行上面命令,可以看到有幾個設備掛載。
我們這里是:
crw-rw---- 1 root dialout 188, 0 Apr 10 17:10 /dev/ttyUSB0
只有ttuUSB0.
再用lsusb察看:
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 002: ID 046d:c05a Logitech, Inc. Optical Mouse M90
Bus 007 Device 002: ID 046d:c31d Logitech, Inc.
Bus 004 Device 009: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
usb 004正是我們掛上去的usb轉串口線纜,使用的芯片是PL2303。
但是正如上面顯示,ttyUSB0這個設備是root所有的,所以,我們以普通用戶身份打開minicom是沒法訪問該文件的。
2.配置minicom的參數
運行$ sudo minicom -s
便進入了minicom的配置界面,使用上下鍵選擇Serial port setup,回車。此時光標在“change which setting”后面停留,它的上面有如下菜單:
Serial port setup [Enter]
+-------------------------------------------------------------+
| A - Serial Device : /dev/ttyUSB0 |
| B - Lockfile Location : /var/lock |
| C - Callin Program : |
| D - Callout Program -: |
| E - Bps/Par/Bits : 115200 8N1 |
| F - Hardware Flow Control : No |
| G - Software Flow Control : No |
| |
| Change which setting? |
+-------------------------------------------------------------+
我們只需輸入上面對應的字母,就可以進如相應的菜單進行設置。設置完成,回車,光標會回到“change which setting”后面,如此重復。完成按回車返回主菜單即可。
注意:如果沒有使用USB轉串口,而是直接使用串口,那麼Serial Device要配置爲/dev/ttyS0。
返回主菜單后,選擇“Save setup as df1”,將其保存為默認設置,然后選擇 Exit推出。需退出后重新打開minicom,軟件才會使用上述參數進行初始化。
3.minicom使用
如果上面設置順利,打開minicom
sudo minicom
重新給開發板上電后,此時,窗口里就有信息打印出來了。
minicom基本操作如下:
1)需使用Ctrl+a 進入設置狀態
2)按z進入設置菜單
(2)W鍵:自動卷屏。當顯示的內容超過一行之後,自動將後面的內容換行。這個功能在查看內核的啓動信息時很有用。
(3)C鍵:清除屏幕的顯示內容;
(4)B鍵:瀏覽minicom的歷史顯示;
(5)X鍵:退出mInicom,會提示確認退出。
4丶配置文件所在目錄
Ctrl + A --> O
+-----[configuration]------+
| Filenames and paths |
| File transfer protocols -|
| Serial port setup |
| Modem and dialing |
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
+--------------------------+
選擇"Filenames and paths"
+-----------------------------------------------------------------------+
| A - Download directory : /home/crliu |
| B - Upload directory : /tmp |
| C - Script directory : |
| D - Script program : runscript |
| E - Kermit program : |
| F - Logging options |
| |
| Change which setting? |
+-----------------------------------------------------------------------+
(1)A - download 下載文件的存放位置(開發板 ---> PC)
開發板上的文件將被傳輸到PC機上的/home/crliu目錄下。
(2)B - upload 從此處讀取上傳的文件(PC ---> 開發板)
PC機向開發板發送文件,需要發送的文件在/tmp目錄下(PC機上的目錄)。做了此項配置後,每次向開發板發送文件時,只需輸入文件名即可,無需輸入文件所在目錄的絕對路徑。
啟動minicom的時候,會檢測MINICOM環境變量,將它們作為命令參數,如果命令中指定了某個參數,那么這個MINICOM中的相應的某個參數會被替換。注意必須對這個環境變量進行export才行。例如:
MINICOM='-m -c on'
export MINICOM
這樣,啟動minicom的時候,會自動地將這個環境變量指定的參數作為minicom的啟動參數。如果命令行中又指定了這個環境變量中的某個參數,那么命令行中指定的參數值將會覆蓋這個環境變量的參數值。
或者其它等效的設置,然后啟動minicom,minicom 會假定你的終端有Meat鍵或Alt鍵,並且支持彩色。如果你從一個不支持彩色的終端登錄,並在你的啟動文件(.profile或等效文件)中設置了 MINICOM,而且你又不想重置你的環境變量,那么你就可以鍵入‘minicom -c off’,來運行這次沒有色彩支持的會話。
The configuration 參數更有趣。通常,minicom從文件“minirc.dfl”中獲取其缺省值。不過,若你給minicom一個參數,它將嘗試從文件“minirc.configuration”中獲取缺省值。因此,為不同端口、不同用戶等創建多個配置文件是可能的。最好使用設備名,如:tty1, tty64,sio2等。如果用戶創建了自己的配置文件,那么該文件將以“.minirc.dfl”為名出現在他的home目錄中。
minicom的全局配置文件通常在/etc/minirc.dfl. minicom將其配置文件保存在一個目錄中,通常是:/var/lib/minicom, /usr/local/etc或者/etc。要想知道minicom編譯時內定的缺省目錄,可用命令“minicom -h”,在那兒你可能還會找到runscript(1) 的demo文件。
配置文件的文件名格式:minirc.user。minicom默認加載配置文件minirc.df1,但你也可以仿照minirc.df1編輯自己的配置文件minirc.user,輸入minicom user啟動時則加載minirc.user。如在本機上,我做了一個minirc.root,輸入minicom root 啟動minicom,則系統自動加載/etc/minirc.root中的配置。
$HOME/.minirc.*
$HOME/.dialdir
$HOME/minicom.log
/usr/share/locale/*/LC_MESSAGES/minicom.mo
*命令行啟動minicom的參數
更多的參數,參見"man minicom"的輸出。
-s
設置。 root 使用此選項在/etc/minirc.dfl中編輯系統范圍的缺省值。使用此參數后,minicom 將 不 進行初始化, 而是直接進入配置菜單。如果因為你的系統被改變,或者第一次運行minicom時,minicom不能啟動,這個參數就會很有用。對於多數系統,已經內定了比較合適的缺省值。
-o
不進行初始化。minicom 將跳過初始化代碼。如果你未復位(reset)就退出了minicom,又想重啟一次會話(session),那么用這個選項就比較爽(不會再有錯誤提示:modem is locked ---- 注)。但是也有潛在的危險:由於未對lock文件等進行檢查,因此一般用戶可能會與uucp之類的東東發生沖突......也許以后這個參數會被去掉。現在姑且假定,使用modem的用戶對自己的行為足夠負責。
-m
用Meta或Alt鍵重載命令鍵。在1.80版中這是缺省值,也可以在minicom 菜單中配置這個選項。不過若你一直使用不同的終端,其中有些沒有Meta或Alt鍵,那么方便的做法還是把缺省的命令鍵設置為Ctrl-A,當你有了支持 Meta或Alt鍵的鍵盤時再使用此選項。Minicom假定你的Meta鍵發送ESC前綴,而不是設置字符最高位的那一種(見下)。
-M
跟“-m”一樣,但是假定你的Meta鍵設置字符高端的第八位(發送128+字符代碼)。
-z
使用終端狀態行。僅當終端支持,並且在其termcap或terminfo數據庫入口中有相關信息時才可用。
-l
逐字翻譯 高位被置位的字符。使用此標志, minicom將不再嘗試將IBM行字符翻譯為ASCII碼,而是將其直接傳送。許多PC-Unix克隆不經翻譯也能正確顯示它們(Linux使用專門的模式:Coherent和Sco)。
-w
在啟動的時候就自動換行,這樣啟動之后不用運行<C-a> w進行設置了,詳細參考后面。
-a
特性使用。 有些終端,特別是televideo終端, 有個很討厭的特性處理(串行而非並行)。minicom缺省使用‘-a on’,但若你在用這樣的終端,你就可以(必須!)加上選項‘-a off’。尾字‘on’或‘off’需要加上。
-t
終端類型。使用此標志, 你可以重載環境變量TERM, 這在環境變量MINICOM 中使用很方便; 你可以創建一個專門的 termcap 入口以備minicom 在控制台上使用,它將屏幕初始化為raw模式, 這樣,連同‘-l’標志一起,就可以不經翻譯而顯示IBM行字符。
-c
顏色使用。些終端(如linux控制台)支持標准ANSI轉義序列色彩。由於termcap顯然沒有對於色彩的支持,因而minicom 硬性內置了這些轉義序列的代碼。所以此選項缺省為off。使用‘-c on’可以打開此項。把這個標志,還有‘-m’放入MINICOM環境變量中是個不錯的選擇。
-S
腳本。 啟動時執行給定名字的腳本。到目前為止,還不支持將用戶名和口令傳送給啟動腳本。如果你還使用了‘-d’選項,以在啟動時開始撥號,此腳本將在撥號之前運行,撥號項目入口由‘-d’指明。
-p
要使用的偽終端。 它超載配置文件中定義的終端端口,但僅當其為偽tty設備。提供的文件名必須采用這樣的形式:(/dev/)tty[p-z][0-f]
-C
文件名。 啟動時打開捕獲文件。
-8
不經修改地傳送8位字符。“連續”意指未對地點/特性進行真正改變,就不插入地點/特性控制序列。此模式用於顯示8位多字節字符,比如日本字(TMD!應該是中國字!!)。不是8位字符的語言都需要(例如顯示芬蘭文字就不需要這個)。
[舉例]
*啟動minicom的時候,開啟自動換行:
$minicom -w
如果不加這個項,那么在minicom和pc交互的時候中鍵入命令超過一行時候會被截斷,(這時候可以通過<C-a> w來開和關切換截斷行功能).
*啟動minicom的時候,顯示顏色:
$minicom -c on
這樣,啟動之后我們會發現顯示的內容不是黑白的了。
*啟動一個圖形的minicom:
$xminicom
*啟動minicom的時候,自動創建日志捕捉文件my_capturefile:
$minicom -C my_capturefile
這樣,啟動之后,所在minicom的輸出都會在my_capturefile中保留一份,如果原來文件存在,則追加,不存在則創建一個。
*啟動minicom的時候,將命令鍵修改成Meta鍵(<C-a>變成[Alt]或者[ESC]等):
$minicom -m
這樣,我們可以取代用<C-a> *發送命令的方式,將<C-a>替換成[Alt]或者[ESC].
*啟動minicom的時候,指定運行的腳本:
$minicom -S <filename>
這里,<filename>是你的腳本文件的名字,應該指定絕對路徑,否則就會在你啟動minicom的路徑下尋找。關於minicom的腳本,可以參考man手冊"man runscript".交互命令中可以運行"<C-a>G"來運行腳本。
關於runscript腳本:
注釋是'#'開始的。
send命令中的字符串,有\c就不會發送默認的\r了。例:send "ls \c"就不會自動回車,這里'\c'也可以在前面。
目前發現,腳本功能比較弱。在minicom原代碼中有簡單的例子:scriptdemo和unixlogin,可以直接在linux運行runscript.
可以指定minicom的腳本運行程序,
D - Script program
作為腳本解釋器的程序。缺省是“runscript”,也可用其它的東東(如: /bin/sh 或 "expect",這樣就可以用shell或者其他的腳本了^_^)。Stdin和Stdout連接到modem,Stderr連接到屏幕。
**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"的幫助輸出。
*查看幫助:
輸入"<C-a> z".
這樣會顯示所命令列表,便於查找。
*回到shell:
輸入"<C-a> j".
這樣minicom會在后台stop,直到fg將它調到前台。
*開/關捕捉minicom中的輸出到一個文件:
輸入"<C-a> l".
這樣會打開/關閉捕捉輸出功能,捕捉的輸出會存放在一個你選擇的文件中。
*退出minicom:
輸入"<C-a> x".
這樣會退出minicom.
**
[其他]
*配置minicom:
配置minicom的目的是讓pc機可以通過minicom連接開發板。
下面是一個配置的例子:
(1)#minicom -s
(2)選擇"Serial port setup"
配置其中的如下配置項:
A - Serial Device : /dev/ttyS0
E - Bps/Par/Bits : 115200 8N1
F - Hardware Flow Control : No
G - Software Flow Control : No
這里,也可以在啟動minicom之后運行"<C-a> o"來進行配置。
*使用minicom在開發板和主機之間傳輸文件
這里詳細講述如何在minicom下面,開發板子和pc機器直接通過串口傳輸文件。
主要內容:
1)准備需要的文件
假設我的開發板是arm體系的cpu。那么需要如下文件:
a)lrzsz-0.12.20.tar.gz: 傳輸文件的工具,需要編譯成開發板子可運行的,也要再編譯一份在pc上面運行的。
b)bin_forarm/* :這里是隨便建立的一個目錄,里面存放編譯好的在開發板子運行的文件傳輸工具(也就是前面那個lrzsz的arm運行版本,編譯它們需要借助交叉編譯工具),需要拷貝到板子上的/usr/bin目錄下。
c)bin_forpc_maybe/* :這里是隨便建立的一個目錄,里面存放編譯好的在pc運行的文件傳輸工具(也就是前面那個lrzsz的pc運行版本),因為可能pc上面原來就有lrzsz工具,所以可以先只把bin_forarm的內容拷貝到開發板上面嘗試一下看能否傳輸,如果只拷貝bin_forarm/*不好用的話就把這里的內容拷貝到pc的/usr/bin下。
2)工具(lrzsz,minicom)的獲取
a)下載lrzsz-0.12.20
http://download.chinaunix.NET/download/0007000/6293.shtml
b)編譯
交叉編譯lrzsz拷貝到開發板上.
編譯lrzsz並拷貝到pc機器上.
c)下載minicom
#apt-get install minicom
這里假設我的系統是ubuntu.
3)配置
a)打開minicom,配置環境。
b)配置文件所在目錄
--------------------------------------------------
Ctrl + a o
+-----[configuration]------+
| Filenames and paths |
| File transfer protocols -|
| Serial port setup |
| Modem and dialing |
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
+--------------------------+
+-----------------------------------------------------------------------+
| A - Download directory : /tmp |
| B - Upload directory : /home/quietheart/tmpTrans |
| C - Script directory : |
| D - Script program : runscript |
| E - Kermit program : |
| F - Logging options |
| |
| Change which setting? |
+-----------------------------------------------------------------------+
A - download 下載的文件的存放位置
B - upload 從此處讀取上傳的文件
download 開發板 ---> PC
upload PC ---> 開發板
B - Upload directory : /home/quietheart/tmpTrans
PC機向開發板發送文件,需要發送的文件在/home/quietheart/tmpTrans目錄下(PC機上的目錄)。
做了此項配置后,每次向開發板發送文件時,只需輸入文件名即可>,無需輸入文件所在目錄的絕對路徑
4)傳輸文件
實際前面的upload directory表示pc機器的上傳目錄,將會把這個目錄中的內容傳到板子上面.上面的配置不是必須的,但在后面選擇的時候使用上面的目錄做為默認。
方法:
假設我在pc上面,使用minicom,在minicom中,
PC-->開發板
a)首先minicom中,運行開發板子上的rz,准備接受數據:
#lrz
b)在minicom中,輸入
[Ctrl]a S
這里的Send表示從pc發送到開發板子.然后會進入選擇文件的目錄(默認為upload目錄),選擇PC機上面准備傳輸的文件,然后確認即可。
這樣會開始傳輸文件,傳輸的文件最終存放在開發板子上運行lrz命令的地方。
開發板-->PC
a)在開發板子上面運行:
#lsz filename
b)在開發板子上minicom下運行(有時候不需要這一步)
[Ctrl]a R
這樣,會自動把要傳送的文件傳送到前面設置的Download directory上面(/tmp)
*參考資料:
http://blog.csdn.net/sikinzen/archive/2010/04/05/5451758.aspx
minicom手冊
其他網上收集的資料
user版本打開uart
如何在user版本中使用串口(uart)
bootable/bootloader/lk/app/mt_boot/mt_boot.c
582 #ifdef USER_BUILD
583 sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=1");
584 #else
585 sprintf(cmdline,"%s%s",cmdline," printk.disable_uart=0 ddebug_query=\"file *mediatek* +p ; file *gpu* =_\"");
586 #endif
1
2
3
4
5
將上面的printk.disable_uart=1改成printk.disable_uart=0,然后重新編譯lk, download lk 即可;或者直接download eng版本的lk。
如何開啟Uart 的控制台(console/sh)
system/core/rootdir/init.rc
515 service console /system/bin/sh
516 class core
517 console
518 disabled
519 user shell
520 seclabel u:r:shell:s0
521
522 on property:ro.debuggable=1
523 start console
1
2
3
4
5
6
7
8
9
注釋掉on property:ro.debuggable=1,然后重新編譯bootimage 即可。
如何在Uart 上抓取上層LOG
Uart 上進行輸入,實際就是開啟了一個sh 對接起來,所以絕對不能在uart 上輸入一個長命令(不可中斷),否則uart 將被卡住,不能再輸入。
抓取上層log, 我們通常需要使用logcat, 但logcat 是不可中斷的,將導致uart 不能再輸入。
處理的方法即將logcat 轉入后台執行,如下操作即可:
Main log: logcat -v time &
Radio log: logcat -v time -b radio &
Event log: logcat -v time -b events &
1
2
3
如果想關閉上層log, 直接ps 查閱前面開啟的logcat process pid, 然后kill -9 pid 殺掉即可。
注意一定要帶“&”,否則將block 住uart輸入
讓Android log從串口kernel log輸出
分析無法開機問題,如串口RX/TX連接正常,可正常輸入,請參考上面第3點。
如確認RX/TX連接正常,但不能輸入,則可能是下面原因導致:
數據流控制是否正確,一般需關閉,下面為RS232的三種流控制模式介紹:
DTR/DSR:硬件上要有對應接口,軟件上實現對應協議,才能實現此流控制。具體實現起來,一般好像是和RTS/CTS一直搭配使用。
RTS/CTS:硬件上要有對應接口,軟件上實現對應協議,才能實現此流控制。一般常見的也就是這種。但是很多開發板用secureCRT連接開發板的時候,往往都是在Uboot階段,那時候還沒有實現對應的RTS/CTS的流控制,所以此處需要取消此選擇,否則,secureCRT就會去一直檢測對應的RTS(Request To Send)pin腳,發現一直是無效,所以就一直沒有接受到數據,就“卡”在那了。同樣,你要輸入數據,就是secureCRT要發送數據,所以其先發了個RTS給開發板,然后就一直檢測自己的CTS是否有效,直到自己的CTS有效后,才能發送數據,而此處由於開發板上的驅動沒有實現RTS/CTS,所以secureCRT就一直檢測CTS,就“卡”死了,即你無法輸入數據。
XON/XOFF:軟件上實現的流控制,硬件上無需像上面的RTS/CTS或DTR/DSR那樣要增加對應的引腳。但是由於XON/XOFF分別對應的兩個二進制的值,所以如果本身傳輸數據中包括該值,那么此軟件的流控制就失效了。現在好像也很少用此種流控制了。
是否打開回顯
串口分析kernel log正常但adb連不上時,並且串口只能輸出時,希望讓android log也從串口輸出,可以嘗試此方法,以下是一個驗證過的示例。
原理上就是根據kernel log能夠從串口輸出,只要將logcat重定向到kmsg即可實現,因此各個平台的原理是一樣的應該通用。(但須注意這樣打印雖然能夠有android log從串口輸出,但串口輸出量過大可能會出現丟log的情況)
system/core/rootdir/init.rc中添加:
chmod 0660 /proc/kmsg
###############################################################
# redirect logs(LOGE, LOGI...) to linux console
###############################################################
service logcat /system/bin/logcat -f /dev/kmsg *:D
class main
user root
group log