91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入解析RK平臺(tái)Debug串口實(shí)現(xiàn):從硬件交互到安全適配

jf_44130326 ? 來(lái)源:Linux1024 ? 2026-02-06 16:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式開發(fā)中,Debug串口是排查問(wèn)題的"生命線",尤其在系統(tǒng)崩潰、內(nèi)核掛死等極端場(chǎng)景下,穩(wěn)定可靠的串口調(diào)試功能往往是定位問(wèn)題的關(guān)鍵。Rockchip平臺(tái)通過(guò)rk_fiq_debugger.c實(shí)現(xiàn)了一套高效、可靠的Debug串口機(jī)制,不僅支持基礎(chǔ)的收發(fā)功能,還針對(duì)實(shí)時(shí)性、安全性做了深度優(yōu)化。本文將從代碼層面解析其實(shí)現(xiàn)原理。

wKgZPGkaixyAZCKMAAB6W6uip7k603.png

一、核心功能:UART硬件交互層

Debug串口的本質(zhì)是通過(guò)UART(通用異步收發(fā)傳輸器)實(shí)現(xiàn)數(shù)據(jù)交互,其核心功能包括初始化UART、發(fā)送字符、接收字符和緩沖區(qū)管理。

1. UART初始化:奠定通信基礎(chǔ)

debug_port_init函數(shù)負(fù)責(zé)UART的硬件初始化,主要完成以下工作:

?波特率配置:根據(jù)需求設(shè)置波特率(支持1152001500000等常見速率),通過(guò)寫入UART_DLL(除數(shù)鎖存低位)和UART_DLM(除數(shù)鎖存高位)寄存器實(shí)現(xiàn)。

?寄存器復(fù)位:通過(guò)UART_SRR(軟件復(fù)位寄存器)復(fù)位UART,確保初始狀態(tài)一致。

?工作模式配置:設(shè)置UART_LCR(線路控制寄存器)配置數(shù)據(jù)格式(默認(rèn)8位數(shù)據(jù)位),關(guān)閉環(huán)路模式,啟用接收中斷(UART_IER_RDI)。

?FIFO控制:通過(guò)UART_FCRFIFO控制寄存器)啟用接收FIFO,避免單字符中斷頻繁觸發(fā)導(dǎo)致的性能問(wèn)題。

// 關(guān)鍵初始化代碼片段rk_fiq_write(t,0x07,UART_SRR);// 復(fù)位UARTudelay(10);rk_fiq_write(t,0x83,UART_LCR);// 進(jìn)入波特率配置模式rk_fiq_write(t, dll,UART_DLL); // 設(shè)置波特率除數(shù)rk_fiq_write(t, dlm,UART_DLM);rk_fiq_write(t,0x03,UART_LCR);// 恢復(fù)數(shù)據(jù)格式配置rk_fiq_write(t,UART_IER_RDI,UART_IER);// 啟用接收中斷

2.數(shù)據(jù)發(fā)送:確??煽枯敵?/span>

debug_putc函數(shù)實(shí)現(xiàn)單字符發(fā)送,核心邏輯是輪詢等待發(fā)送緩沖區(qū)非滿,避免數(shù)據(jù)丟失:

?通過(guò)讀取UART_USR(狀態(tài)寄存器)的UART_USR_TX_FIFO_NOT_FULL位,判斷發(fā)送FIFO是否有空閑空間。

?若緩沖區(qū)滿,則短暫延時(shí)(udelay(10))后重試,最多重試10000次(避免無(wú)限阻塞)。

?緩沖區(qū)空閑時(shí),將字符寫入UART_TX(發(fā)送寄存器)。

對(duì)于批量數(shù)據(jù)發(fā)送,debug_put函數(shù)通過(guò)循環(huán)調(diào)用debug_putc實(shí)現(xiàn),并自動(dòng)在換行符n前添加回車符r,適配終端顯示習(xí)慣。

3.數(shù)據(jù)接收:處理輸入與特殊指令

debug_getc函數(shù)負(fù)責(zé)接收字符,同時(shí)支持特殊指令檢測(cè)(如觸發(fā)調(diào)試中斷的"fiq"指令):

?先讀取UART_IIR(中斷識(shí)別寄存器)和UART_USR(狀態(tài)寄存器),判斷中斷類型和接收狀態(tài)。

?若檢測(cè)到接收超時(shí)(UART_IIR_RX_TIMEOUT)但無(wú)實(shí)際數(shù)據(jù),通過(guò)讀取UART_RX寄存器清除無(wú)效中斷,避免死循環(huán)。

?正常接收時(shí),將字符存入緩沖區(qū),若檢測(cè)到連續(xù)輸入"fiq"(無(wú)下劃線或空格),返回FIQ_DEBUGGER_BREAK觸發(fā)調(diào)試中斷。

二、高級(jí)特性:線程化與緩沖區(qū)優(yōu)化

在高負(fù)載場(chǎng)景下,直接操作UART硬件可能導(dǎo)致阻塞(如發(fā)送緩沖區(qū)滿時(shí))。RK平臺(tái)通過(guò)CONFIG_RK_CONSOLE_THREAD配置項(xiàng),引入線程化處理機(jī)制,提升調(diào)試可靠性。

1.FIFO緩沖區(qū):解耦生產(chǎn)與消費(fèi)

?定義兩個(gè)環(huán)形緩沖區(qū)(fifotty_fifo),大小均為64KB,分別用于普通調(diào)試信息和TTY設(shè)備數(shù)據(jù)。

?發(fā)送數(shù)據(jù)時(shí),先寫入FIFOkfifo_in),由專門的線程負(fù)責(zé)將FIFO數(shù)據(jù)寫入UART硬件,避免主流程阻塞。

?FIFO滿,則統(tǒng)計(jì)丟棄的消息數(shù)(console_dropped_messages),并在后續(xù)空閑時(shí)提示。

2.控制臺(tái)線程:異步處理發(fā)送邏輯

console_thread作為后臺(tái)線程,負(fù)責(zé)將FIFO中的數(shù)據(jù)發(fā)送到UART

?線程處于TASK_INTERRUPTIBLE狀態(tài),僅在FIFO有數(shù)據(jù)或需退出時(shí)被喚醒(wake_up_process)。

?循環(huán)讀取FIFO數(shù)據(jù),調(diào)用console_putc發(fā)送,每發(fā)送一行(遇到n)刷新一次,平衡效率與實(shí)時(shí)性。

?處理完數(shù)據(jù)后,通過(guò)console_flush等待UART硬件完成發(fā)送(檢測(cè)UART_LSR_TEMT位確認(rèn)發(fā)送完成)。

線程喚醒邏輯還做了死鎖防護(hù):通過(guò)console_thread_running標(biāo)記避免在usleep_range期間喚醒,防止pi_lockconsole_lock的嵌套死鎖。

三、安全與兼容性:TrustZone與多CPU適配

在支持TrustZone(安全區(qū))的RK平臺(tái)上,Debug串口需兼容安全世界與非安全世界的交互,并支持多CPU核心間的FIQ(快速中斷)遷移。

1. SDEI:軟件委派異常接口

當(dāng)啟用CONFIG_FIQ_DEBUGGER_TRUST_ZONECONFIG_ARM_SDE_INTERFACE時(shí),通過(guò)SDEISoftware Delegated Exception Interface)實(shí)現(xiàn)FIQ的安全管理:

?注冊(cè)SDEI事件回調(diào)(fiq_sdei_event_callback),將FIQ處理邏輯委派給內(nèi)核。

?通過(guò)fiq_debugger_sdei_enable函數(shù)初始化SDEI事件,配置事件路由(綁定到指定CPU核心)。

?支持FIQ在不同CPU核心間遷移(_rk_fiq_dbg_sdei_switch_cpu),通過(guò)SDEI事件通知安全世界完成路由切換。

2.電源管理CPU離線適配

為確保調(diào)試功能在系統(tǒng)低功耗或CPU離線時(shí)可用,驅(qū)動(dòng)做了針對(duì)性處理:

?CPU離線:通過(guò)fiq_debugger_cpu_offine_migrate_fiq函數(shù),在CPU離線前將FIQ遷移到其他在線CPU。

?休眠喚醒:注冊(cè)PM通知器(fiq_dbg_sdei_pm_nb),在系統(tǒng)休眠前將FIQ遷移到指定核心,喚醒后恢復(fù)。

?** idle狀態(tài)**:通過(guò)fiq_debugger_cpuidle_resume_fiq函數(shù),在CPUidle狀態(tài)恢復(fù)時(shí)重新啟用FIQ

四、設(shè)備樹與初始化流程

驅(qū)動(dòng)通過(guò)設(shè)備樹(Device Tree)獲取硬件信息,初始化流程如下:

1.rk_fiqdbg_probe函數(shù)解析設(shè)備樹,讀取rockchip,serial-id(指定調(diào)試串口ID)、rockchip,baudrate(波特率)等參數(shù)。

2.查找對(duì)應(yīng)UART節(jié)點(diǎn),驗(yàn)證其是否禁用(避免與正常串口功能沖突),獲取物理地址、中斷號(hào)等資源。

3.初始化時(shí)鐘apb_pclkbaudclk),映射UART寄存器地址(of_iomap)。

4.調(diào)用rk_serial_debug_init完成最終初始化,注冊(cè)平臺(tái)設(shè)備(platform_device_register)。

總結(jié)

RK平臺(tái)的Debug串口驅(qū)動(dòng)通過(guò)分層設(shè)計(jì)實(shí)現(xiàn)了高可靠性與靈活性:

?硬件層:直接操作UART寄存器,確保收發(fā)正確性;

?緩沖層:通過(guò)FIFO和后臺(tái)線程解耦數(shù)據(jù)生產(chǎn)與硬件發(fā)送,提升系統(tǒng)響應(yīng)性;

?安全層:適配TrustZoneSDEI,支持多CPU場(chǎng)景下的FIQ遷移,確保極端場(chǎng)景下的調(diào)試可用性。

這套實(shí)現(xiàn)不僅滿足了日常開發(fā)的調(diào)試需求,更在系統(tǒng)崩潰、低功耗等特殊場(chǎng)景下提供了關(guān)鍵的問(wèn)題定位能力,是RK平臺(tái)穩(wěn)定性的重要保障。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5200

    文章

    20495

    瀏覽量

    334704
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    650

    瀏覽量

    35732
  • 串口
    +關(guān)注

    關(guān)注

    15

    文章

    1620

    瀏覽量

    82940
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何實(shí)現(xiàn)串口實(shí)時(shí)通信?

    如何實(shí)現(xiàn)串口實(shí)時(shí)通信?
    發(fā)表于 08-14 09:10

    STM32串口實(shí)驗(yàn),入門放棄 精選資料分享

    的博文,并加以歸納總結(jié),幫助新手入門放棄 。提示:以下是本篇文章正文內(nèi)容一、串口串口是什么?串口通信(Serial Communicat
    發(fā)表于 08-03 06:17

    利用USART串口實(shí)現(xiàn)電腦與STM32單片機(jī)的命令交互

    1 功能需求利用USART串口實(shí)現(xiàn)電腦與STM32單片機(jī)的命令交互,類似Linux系統(tǒng)一樣的shell功能,通過(guò)這個(gè)功能掌握STM32單片機(jī)USART串口的基本用法,具體我們實(shí)現(xiàn)以下功
    發(fā)表于 01-05 07:45

    基于F0040的debug口實(shí)現(xiàn)AT指令的設(shè)計(jì)

    ,若失敗則返回錯(cuò)誤”[AT] ERROR“給客戶端。AT 適配器配置使用pokt-f0040的默認(rèn)debug接口,UART1(PB6,和PB7),使用接收中斷來(lái)接收串口助手發(fā)送的數(shù)據(jù),具體實(shí)現(xiàn)
    發(fā)表于 08-19 15:51

    RK系列開發(fā)板音頻驅(qū)動(dòng)適配指南(二)

    RK系列開發(fā)板音頻驅(qū)動(dòng)適配指南(一)RK系列開發(fā)板音頻驅(qū)動(dòng)適配指南(二)RK系列開發(fā)板音頻驅(qū)動(dòng)適配
    發(fā)表于 10-09 11:30

    如何通過(guò)STM32的串口實(shí)現(xiàn)簡(jiǎn)易脫機(jī)編程器

    如何通過(guò)STM32的串口實(shí)現(xiàn)簡(jiǎn)易脫機(jī)編程器如何通過(guò)STM32的串口實(shí)現(xiàn)簡(jiǎn)易脫機(jī)編程器如何通過(guò)STM32的串口實(shí)現(xiàn)簡(jiǎn)易脫機(jī)編程器如何通過(guò)STM32的串口實(shí)現(xiàn)簡(jiǎn)易脫機(jī)編程器。
    發(fā)表于 04-25 09:38 ?60次下載

    ARM與FPGA的接口實(shí)現(xiàn)解析

    ARM與FPGA的接口實(shí)現(xiàn)解析(應(yīng)廣單片機(jī))-該文檔為ARM與FPGA的接口實(shí)現(xiàn)解析詳述資料,講解的還不錯(cuò),感興趣的可以下載看看…………………………
    發(fā)表于 07-22 09:47 ?14次下載
    ARM與FPGA的接<b class='flag-5'>口實(shí)現(xiàn)</b>的<b class='flag-5'>解析</b>

    基于FPGA的SDRAM串口實(shí)驗(yàn)

    基于FPGA的SDRAM串口實(shí)驗(yàn)(嵌入式開發(fā)板實(shí)驗(yàn)報(bào)告)-基于FPGA的SDRAM串口實(shí)驗(yàn),verilog語(yǔ)言編寫
    發(fā)表于 08-04 09:43 ?37次下載
    基于FPGA的SDRAM<b class='flag-5'>串口實(shí)</b>驗(yàn)

    【技術(shù)分享】RK3568適配RK628 RGB to HDMI

    RK628是一款多功能視頻橋接芯片,支持多種顯示接口的轉(zhuǎn)換。本文基于RK3568平臺(tái),分享使用RK628橋接芯片實(shí)現(xiàn)RGB信號(hào)轉(zhuǎn)換為HDMI
    的頭像 發(fā)表于 07-21 16:49 ?3216次閱讀
    【技術(shù)分享】<b class='flag-5'>RK</b>3568<b class='flag-5'>適配</b><b class='flag-5'>RK</b>628 RGB to HDMI

    深入解析RK平臺(tái)GPIO驅(qū)動(dòng):原理到調(diào)試,開發(fā)者必看指南

    平臺(tái)上,GPIO 驅(qū)動(dòng)的實(shí)現(xiàn)直接影響著硬件交互的穩(wěn)定性與效率。本文將帶你深入剖析 RK
    的頭像 發(fā)表于 02-03 15:53 ?1064次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b><b class='flag-5'>RK</b><b class='flag-5'>平臺(tái)</b>GPIO驅(qū)動(dòng):<b class='flag-5'>從</b>原理到調(diào)試,開發(fā)者必看指南

    RK?平臺(tái)?USB?攝像頭成像調(diào)試指南:信號(hào)畫質(zhì)的全流程優(yōu)化

    在?RK(瑞芯微)平臺(tái)開發(fā)中,USB?攝像頭成像效果不佳是高頻問(wèn)題,其根源多與?USB?信號(hào)質(zhì)量、PHY?寄存器配置及硬件環(huán)境相關(guān)。本文結(jié)合?Rockchip USB SQ Tool?工具,分享
    的頭像 發(fā)表于 11-26 07:05 ?862次閱讀
    <b class='flag-5'>RK</b>?<b class='flag-5'>平臺(tái)</b>?USB?攝像頭成像調(diào)試指南:<b class='flag-5'>從</b>信號(hào)<b class='flag-5'>到</b>畫質(zhì)的全流程優(yōu)化

    深入解析?RK?平臺(tái)顯示驅(qū)動(dòng):格式支持、處理流程與實(shí)現(xiàn)原理

    、驅(qū)動(dòng)處理流程、核心實(shí)現(xiàn)原理三個(gè)維度,帶您深入了解? RK? 平臺(tái)顯示驅(qū)動(dòng)的工作機(jī)制。 一、 RK? 顯示驅(qū)動(dòng)支持的顯示格式 ?
    的頭像 發(fā)表于 12-02 07:10 ?364次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b>?<b class='flag-5'>RK</b>?<b class='flag-5'>平臺(tái)</b>顯示驅(qū)動(dòng):格式支持、處理流程與<b class='flag-5'>實(shí)現(xiàn)</b>原理

    RK3506 MIPI轉(zhuǎn)HDMI顯示開發(fā)實(shí)戰(zhàn):硬件驅(qū)動(dòng)全解析

    接芯片,可完美實(shí)現(xiàn)信號(hào)轉(zhuǎn)換。 本文將從硬件選型、驅(qū)動(dòng)流程、核心機(jī)制三個(gè)維度,詳細(xì)拆解RK3506平臺(tái)MIPI轉(zhuǎn)HDMI的開發(fā)全過(guò)程,尤其聚焦驅(qū)動(dòng)
    的頭像 發(fā)表于 01-06 07:09 ?685次閱讀
    <b class='flag-5'>RK</b>3506 MIPI轉(zhuǎn)HDMI顯示開發(fā)實(shí)戰(zhàn):<b class='flag-5'>從</b><b class='flag-5'>硬件</b><b class='flag-5'>到</b>驅(qū)動(dòng)全<b class='flag-5'>解析</b>

    深入解析rk平臺(tái)Android Bootloader核心代碼:啟動(dòng)流程AVB驗(yàn)證

    下android_bootloader.c的核心代碼,帶你讀懂Android設(shè)備Bootloader內(nèi)核的完整啟動(dòng)邏輯,以及開發(fā)者關(guān)注這些代碼的核心價(jià)值。 一、代碼整體定位 這份代碼是Rockchip(瑞芯微)平臺(tái)
    的頭像 發(fā)表于 01-22 07:06 ?312次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b><b class='flag-5'>rk</b><b class='flag-5'>平臺(tái)</b>Android Bootloader核心代碼:<b class='flag-5'>從</b>啟動(dòng)流程<b class='flag-5'>到</b>AVB驗(yàn)證

    深入解析U-Boot image.c:RK平臺(tái)鏡像處理核心邏輯

    在瑞芯微(RK平臺(tái)的嵌入式開發(fā)中,U-Boot作為核心的啟動(dòng)加載程序,負(fù)責(zé)完成鏡像解析、校驗(yàn)、加載等關(guān)鍵流程。而image.c正是U-Boot中處理鏡像(uImage)的核心文件,尤其針對(duì)R
    的頭像 發(fā)表于 02-24 16:46 ?1528次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b>U-Boot image.c:<b class='flag-5'>RK</b><b class='flag-5'>平臺(tái)</b>鏡像處理核心邏輯