樹莓派4b安裝ubuntu server18後如何開啟序列槽?
樹莓派4b的引腳圖如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL90TQldnTYR2bO1mYspkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwQzNyAjNxYTMzETMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
其中GPIO14和GPIO15是硬體序列槽。
因為我安裝的不是Raspian系統,是以無法用raspi-config打開該序列槽。
ubuntu server raspi系統的/boot/firmware/config.txt裡也說明了,enable_uart=1預設啟用這個序列槽,linux裡面名字叫 /ttyAMA0,但是預設是當序列槽控制台使用了(/boot/firmware/nobtcmd.txt裡也寫了console = /ttyAMA 921600)
而且這個硬體序列槽也和藍牙連接配接在一起。想要用這個序列槽給另外的外設使用,必須禁用掉序列槽控制台和藍牙。
方法:
1、/boot/firmware/nobtcmd.txt裡删除console = /ttyAMA 921600進而禁用序列槽控制台。這個txt檔案也可以用讀卡器把sd卡插到windows系統裡在system-boot裡找到。
2、/boot/firmware/config.txt 裡設定enable_uart=1(預設就是)。如果=0表示啟用minicom序列槽,而不是這個硬體序列槽。
3、/boot/firmware/config.txt 裡加入一行dtoverlay=disable-bt進而禁用藍牙。
4、sudo systemctl disable bluetooth…… 禁用掉和藍牙有關的開機啟動項。直到桌面不再顯示藍牙标志,但是還有/ttyAMA0存在。
這樣,開機後連接配接序列槽外設,使用/ttyAMA0就能正常序列槽通信了。
建議閱讀樹莓派官方文檔:
https://www.raspberrypi.org/documentation/configuration/uart.md
還有linux的文檔:
https://elinux.org/RPi_Serial_Connection
但現在還有個問題,如果在開機前就連接配接外設,那麼序列槽外設發送的序列槽資料會幹擾ubuntu開機,因為ubuntu開機時u-boot(類似bootloader)會預設等待序列槽資料2s再進入autoboot打開系統,這期間一旦有序列槽資料就會進入u-boot(類似電腦開機按F2會進入BIOS)。這會導緻系統無法打開,螢幕一直顯示序列槽裝置發來的亂碼。
解決辦法是取消這個u-boot的2s等待時間,直接進入系統(但這樣也會導緻以後再也進不了u-boot了)
主要參考這篇用bing搜到的解答,askubuntu.com真的是個不錯的網站:
https://askubuntu.com/questions/1215848/how-to-disable-ttyama0-console-on-boot-raspberry-pi
裡面提到了兩種取消等待時間的方法:
方法一:在自己電腦上重新編譯修改過的u-boot,再把.bin檔案替代原來的rasp4.bin(/boot/firmware裡面)
方法二:開機利用序列槽進入u-boot,鍵入指令取消開機等待
我兩種方法都試過,但是方法一好像不起作用,可能是raspi4還不成熟,不能這麼替換自己編譯的.bin檔案。
方法二成功了。具體如下:
u-boot環境變量的說明可以看https://www.denx.de/wiki/view/DULG/UBootEnvVariables
這裡提一下怎麼通過序列槽進入u-boot。用一個序列槽轉usb連接配接樹莓派和自己電腦,然後用自己電腦上的序列槽調試助手發送指令。
開機按任意鍵進入u-boot,然後輸入
setenv bootdelay -2
saveenv
進而設定環境變量取消等待時間并儲存。
注意每行輸入後都要加回車。
樹莓派的螢幕上顯示如下:
搞定!