一、背景與需求說(shuō)明
在嵌入式開(kāi)發(fā)中,串口作為基礎(chǔ)調(diào)試接口至關(guān)重要。本文檔針對(duì)RK3588平臺(tái),詳細(xì)介紹如何將系統(tǒng)默認(rèn)串口修改為串口8(UART8),包括U-Boot階段和內(nèi)核階段的配置調(diào)整。該修改適用于需要使用額外串口進(jìn)行調(diào)試或通信的場(chǎng)景,例如當(dāng)默認(rèn)串口被其他功能占用時(shí),需重新映射控制臺(tái)到串口8。
二、修改涉及的關(guān)鍵文件與原理
2.1內(nèi)核設(shè)備樹(shù)配置(rk3588-linux.dtsi)
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3588-linux.dtsi+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3588-linux.dtsialiases {};chosen: chosen {- bootargs = "earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 irqchip.gicv3_pseudo_nmi=0 root=PARTUUID=614e0000-0000 rw rootwait rcupdate.rcu_expedited=1 rcu_nocbs=all mtdparts=sfc_nor:0x00040000@0x00180000(vnvm),0x00800000@0x00800000(uboot)";+ bootargs = "earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 console=ttyS8,1500000n8 irqchip.gicv3_pseudo_nmi=0 root=PARTUUID=614e0000-0000 rw rootwait rcupdate.rcu_expedited=1 rcu_nocbs=all mtdparts=sfc_nor:0x00040000@0x00180000(vnvm),0x00800000@0x00800000(uboot)";};
關(guān)鍵修改說(shuō)明:
?在bootargs中新增console=ttyS8,1500000n8參數(shù)
?ttyS8表示使用串口8作為控制臺(tái)
?1500000n8定義波特率為1500000,數(shù)據(jù)位8位,無(wú)校驗(yàn)位,1位停止位
?earlycon=uart8250,mmio32,0xfeb50000用于早期控制臺(tái)初始化,指定串口控制器基地址
2.2 U-Boot設(shè)備樹(shù)配置(rk3588-u-boot.dtsi)
--- a/u-boot/arch/arm/dts/rk3588-u-boot.dtsi+++ b/u-boot/arch/arm/dts/rk3588-u-boot.dtsistatus = "okay";};+&uart8 {+ clock-frequency = <24000000>;+ u-boot,dm-spl;+ pinctrl-names = "default";+ status = "okay";+ pinctrl-0 = <&uart8m0_xfer>;+};+&hw_decompress {u-boot,dm-spl;status = "okay";
關(guān)鍵修改說(shuō)明:
?啟用uart8設(shè)備節(jié)點(diǎn):
?clock-frequency = <24000000>:設(shè)置串口時(shí)鐘頻率為24MHz,用于波特率計(jì)算
?u-boot,dm-spl:標(biāo)記該串口用于U-Boot SPL(Secondary Program Loader)階段
?pinctrl-0 = <&uart8m0_xfer>:指定串口8的引腳復(fù)用配置,需確保與硬件設(shè)計(jì)一致
?該配置使U-Boot在啟動(dòng)階段能夠初始化并使用串口8
2.3 U-Boot CLI代碼修改(cli.c)
--- a/u-boot/common/cli.c+++ b/u-boot/common/cli.c@@-15,6+15,10@@++++DECLARE_GLOBAL_DATA_PTR;@@-218,6+222,16@@ err:voidcli_loop(void){+ structudevice*uart_dev;+ writel(0x00ff00aa,0xfd5f8088);+ if(uclass_get_device_by_seq(UCLASS_SERIAL,8, &uart_dev))+ printf("uart: failed to get devicen");+ else+ printf("uart: got devicen");+ serial_dev_setbrg(uart_dev,1500000);++ gd->flags |= GD_FLG_SERIAL_READY;+ gd->cur_serial_dev = uart_dev;parse_file_outer();/* This point is never reached */
關(guān)鍵修改說(shuō)明:
?新增頭文件包含:serial.h、dm.h等,用于串口設(shè)備管理
?通過(guò)uclass_get_device_by_seq(UCLASS_SERIAL, 8, &uart_dev)獲取串口8設(shè)備句柄
?serial_dev_setbrg(uart_dev, 1500000)設(shè)置波特率為1500000
?更新全局?jǐn)?shù)據(jù)結(jié)構(gòu)gd,標(biāo)記串口已準(zhǔn)備就緒并設(shè)置為當(dāng)前串口設(shè)備
三、完整修改步驟與實(shí)現(xiàn)流程
3.1內(nèi)核配置修改流程
1.定位設(shè)備樹(shù)文件
進(jìn)入內(nèi)核源碼目錄:cd kernel/arch/arm64/boot/dts/rockchip/
2.修改bootargs參數(shù)
使用文本編輯器打開(kāi)rk3588-linux.dtsi,在chosen節(jié)點(diǎn)中添加console=ttyS8,1500000n8,確保內(nèi)核啟動(dòng)時(shí)使用串口8作為控制臺(tái)。
3.2 U-Boot配置修改流程
1.定位U-Boot設(shè)備樹(shù)文件
進(jìn)入U-Boot源碼目錄:cd u-boot/arch/arm/dts/
2.啟用串口8設(shè)備節(jié)點(diǎn)
打開(kāi)rk3588-u-boot.dtsi,添加&uart8節(jié)點(diǎn)配置,包括時(shí)鐘頻率、引腳控制和狀態(tài)設(shè)置,確保U-Boot階段能初始化串口8。
3.修改CLI代碼初始化串口
進(jìn)入U-Boot源碼目錄:cd u-boot/common/
打開(kāi)cli.c,添加串口設(shè)備獲取、波特率設(shè)置及全局?jǐn)?shù)據(jù)更新邏輯,確保U-Boot命令行使用串口8。
四、硬件連接與引腳配置說(shuō)明
4.1串口8硬件連接要求
?控制器基地址:根據(jù)設(shè)備樹(shù)配置,串口8的基地址為0xfeb50000(由earlycon=uart8250,mmio32,0xfeb50000指定)
?引腳復(fù)用:需確保uart8m0_xfer引腳配置與硬件設(shè)計(jì)一致,通常包括:
?TXD8(發(fā)送引腳)
?RXD8(接收引腳)
?GND(接地)
五、驗(yàn)證與調(diào)試方法
5.1 U-Boot階段驗(yàn)證
1.啟動(dòng)日志檢查
連接串口8到調(diào)試終端(波特率1500000,8N1),重啟設(shè)備后觀察U-Boot輸出:
?若配置正確,U-Boot啟動(dòng)時(shí)會(huì)輸出uart: got device日志
?命令行提示符(如=>)應(yīng)出現(xiàn)在串口8終端
1.串口設(shè)備查詢
在U-Boot命令行中執(zhí)行:
printenvconsole# 應(yīng)輸出類似 "console=ttyS8,1500000"dev list | grep serial# 應(yīng)顯示串口 8 設(shè)備已注冊(cè)
5.2內(nèi)核階段驗(yàn)證
1.內(nèi)核日志檢查
內(nèi)核啟動(dòng)后,串口8應(yīng)輸出完整的啟動(dòng)日志(dmesg內(nèi)容),并顯示ttyS8設(shè)備初始化信息:
[ 0.000000]console[ttyS8]enabled[ 1.234567]serial8250.8: ttyS8 at MMIO0xfeb50000 (irq =123) is a16550A
1.串口設(shè)備測(cè)試
在系統(tǒng)中執(zhí)行:
|
#檢查串口設(shè)備是否存在
ls /dev/ttyS8
#測(cè)試串口通信(例如向串口8發(fā)送數(shù)據(jù))
echo "Test Data" > /dev/ttyS8
|
5.3常見(jiàn)故障排除
?無(wú)輸出問(wèn)題:
a.檢查硬件連接是否正確,引腳是否短路或虛接
b.確認(rèn)串口8的時(shí)鐘頻率(24MHz)與波特率(1500000)計(jì)算是否正確
c.檢查設(shè)備樹(shù)中的status是否為"okay",確保設(shè)備未被禁用
?波特率異常:
?確認(rèn)serial_dev_setbrg和console參數(shù)中的波特率一致
?檢查clock-frequency設(shè)置是否與硬件時(shí)鐘匹配
通過(guò)以上步驟,可在RK3588平臺(tái)成功將系統(tǒng)串口修改為串口8,實(shí)現(xiàn)U-Boot和內(nèi)核階段的串口重定向,滿足特定硬件調(diào)試與通信需求。重要說(shuō)明,uboot階段的并沒(méi)有完全修改為串口8,如需完全顯示log,還需要修改其他,比如ddr.bin文件等。
-
嵌入式
+關(guān)注
關(guān)注
5196文章
20323瀏覽量
332219 -
串口
+關(guān)注
關(guān)注
15文章
1616瀏覽量
82460 -
RK3588
+關(guān)注
關(guān)注
8文章
529瀏覽量
7200
發(fā)布評(píng)論請(qǐng)先 登錄
瑞芯微RK3588開(kāi)發(fā)板RK3588 EVB和RK3588S EVB解讀
RK3588-UART
RK3588 EVB 用戶使用指南
TB-RK3588開(kāi)發(fā)板Windows上串口調(diào)試與Linux主機(jī)調(diào)試說(shuō)明
有什么方法可以去修改RK3588默認(rèn)的串口波特率嗎
通過(guò)以下代碼修改RK3588的默認(rèn)串口波特率
基于RK3588平臺(tái)的會(huì)議平板即將發(fā)布
rk3588和rk3588s的區(qū)別
rk3588是什么類型的芯片?
rk3588參數(shù)詳解 rk3588芯片參數(shù)
rk3588是armv8嗎?rk3588硬件資料
Banana Pi BPI-W3 RK3588平臺(tái)驅(qū)動(dòng)調(diào)試篇 [ PCIE篇二 ] - PCIE的開(kāi)發(fā)指南
PET_RK3588_P01開(kāi)發(fā)板介紹
RK3588平臺(tái)串口配置修改指南:切換至串口8
評(píng)論