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

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

wKgZPGkaixyAZCKMAAB6W6uip7k603.png

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

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

1. UART初始化:奠定通信基礎

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在高負載場景下,直接操作UART硬件可能導致阻塞(如發(fā)送緩沖區(qū)滿時)。RK平臺通過CONFIG_RK_CONSOLE_THREAD配置項,引入線程化處理機制,提升調試可靠性。

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

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

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

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

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

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

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

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

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

線程喚醒邏輯還做了死鎖防護:通過console_thread_running標記避免在usleep_range期間喚醒,防止pi_lockconsole_lock的嵌套死鎖。

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

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

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

當啟用CONFIG_FIQ_DEBUGGER_TRUST_ZONECONFIG_ARM_SDE_INTERFACE時,通過SDEISoftware Delegated Exception Interface)實現(xiàn)FIQ的安全管理:

?注冊SDEI事件回調(fiq_sdei_event_callback),將FIQ處理邏輯委派給內核。

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

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

2.電源管理CPU離線適配

為確保調試功能在系統(tǒng)低功耗或CPU離線時可用,驅動做了針對性處理:

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

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

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

四、設備樹與初始化流程

驅動通過設備樹(Device Tree)獲取硬件信息,初始化流程如下:

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

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

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

4.調用rk_serial_debug_init完成最終初始化,注冊平臺設備(platform_device_register)。

總結

RK平臺的Debug串口驅動通過分層設計實現(xiàn)了高可靠性與靈活性:

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

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

?安全層:適配TrustZoneSDEI,支持多CPU場景下的FIQ遷移,確保極端場景下的調試可用性。

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

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

    關注

    5200

    文章

    20470

    瀏覽量

    334422
  • 調試
    +關注

    關注

    7

    文章

    647

    瀏覽量

    35694
  • 串口
    +關注

    關注

    15

    文章

    1620

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    STM32串口實驗,入門放棄 精選資料分享

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

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

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

    基于F0040的debug口實現(xiàn)AT指令的設計

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

    RK系列開發(fā)板音頻驅動適配指南(二)

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

    如何通過STM32的串口實現(xiàn)簡易脫機編程器

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

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

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

    基于FPGA的SDRAM串口實

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

    【技術分享】RK3568適配RK628 RGB to HDMI

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

    深入解析RK平臺GPIO驅動:原理到調試,開發(fā)者必看指南

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

    RK?平臺?USB?攝像頭成像調試指南:信號畫質的全流程優(yōu)化

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

    深入解析?RK?平臺顯示驅動:格式支持、處理流程與實現(xiàn)原理

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

    RK3506 MIPI轉HDMI顯示開發(fā)實戰(zhàn):硬件驅動全解析

    接芯片,可完美實現(xiàn)信號轉換。 本文將從硬件選型、驅動流程、核心機制三個維度,詳細拆解RK3506平臺MIPI轉HDMI的開發(fā)全過程,尤其聚焦驅動
    的頭像 發(fā)表于 01-06 07:09 ?640次閱讀
    <b class='flag-5'>RK</b>3506 MIPI轉HDMI顯示開發(fā)實戰(zhàn):<b class='flag-5'>從</b><b class='flag-5'>硬件</b><b class='flag-5'>到</b>驅動全<b class='flag-5'>解析</b>

    深入解析rk平臺Android Bootloader核心代碼:啟動流程AVB驗證

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

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

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