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

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

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

3天內不再提示

解決USB DWC3控制器兩大內存泄漏問題!基于RV1103B/RK3588的實戰(zhàn)補丁解析

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

掃碼添加小助手

加入工程師交流群

嵌入式Linux領域,USB控制器是連接外部設備的核心組件,而USB DWC3控制器因其高性能、支持OTG/Host/Device多模式,被廣泛應用于瑞芯微RV1103B、RK3588等主流嵌入式平臺。但在實際開發(fā)中,工程師常遇到一個棘手問題:動態(tài)模式切換或驅動裝卸時的內存泄漏——長期運行會導致系統(tǒng)內存逐漸耗盡,引發(fā)卡頓、崩潰等穩(wěn)定性問題。

今天我們就從問題復現(xiàn)、根源分析到補丁落地,完整拆解USB DWC3控制器的內存泄漏解決方案,附上可直接參考的代碼片段與作用分析,所有方案均已通過硬件驗證。

wKgZPGkaiwyAPRO7AACoubsRDH8185.png

一、問題背景:兩類高頻場景觸發(fā)內存泄漏

在對RV1103B/RK3588平臺的USB DWC3控制器測試中,我們發(fā)現(xiàn)兩種高頻使用場景會穩(wěn)定觸發(fā)內存泄漏,且可通過簡單腳本復現(xiàn):

場景1OTG模式動態(tài)切換(Device Host

USB DWC3支持通過otg_mode節(jié)點動態(tài)切換工作模式(比如從設備模式切換為主機模式),但循環(huán)執(zhí)行切換操作時,內存會持續(xù)減少。

復現(xiàn)腳本

whiletruedo# 切換為OTG模式echootg > /sys/devices/platform/[usb_phy節(jié)點]/otg_modesleep1# 切換為Host模式echohost > /sys/devices/platform/[usb_phy節(jié)點]/otg_modesleep1# 清理頁緩存、目錄項緩存和inode緩存echo3 > /proc/sys/vm/drop_cachessleep1# 查看剩余內存,觀察是否持續(xù)減少cat/proc/meminfo | grep MemFreedone&

根源:模式切換過程中調用的debugfs_lookup()函數(shù)存在缺陷——該函數(shù)獲取dentry(目錄項)后,需要手動調用dput()釋放引用,否則會導致內存無法回收,循環(huán)切換會持續(xù)累積泄漏。

場景2Host模式下驅動bind/unbind

DWC3控制器工作在Host only模式時,通過bind/unbind操作加載/卸載驅動(常見于驅動調試或動態(tài)設備管理),同樣會出現(xiàn)內存泄漏。

復現(xiàn)腳本

whiletruedo# 卸載DWC3驅動echo"usb控制器節(jié)點"> /sys/bus/platform/drivers/dwc3/unbindsleep1# 重新加載DWC3驅動echo"usb控制器節(jié)點"> /sys/bus/platform/drivers/dwc3/bindsleep1# 清理緩存echo3 > /proc/sys/vm/drop_cachessleep1# 觀察剩余內存cat/proc/meminfo | grep MemFreedone&

根源:驅動加載時使用platform_device_add_properties()添加設備屬性,但該函數(shù)創(chuàng)建的軟件節(jié)點(software node)生命周期未與設備綁定——設備卸載時節(jié)點未被自動回收,導致內存泄漏。

二、補丁方案:從API替換到生命周期管理

針對上述兩個核心問題,我們通過5個關鍵補?。ê嫌瓮胶突厮菅a?。崿F(xiàn)徹底修復,每個補丁都包含明確的代碼修改與功能定位,且已通過RV1103B/RK3588平臺驗證。

1.修復OTG切換泄漏:用debugfs_lookup_and_remove替代debugfs_lookup

核心思路debugfs_lookup()需要手動釋放引用,而debugfs_lookup_and_remove()會自動完成查找+刪除+釋放流程,同時重構debugfs管理邏輯,避免重復查找開銷。

1.1修改struct dwc3結構體(drivers/usb/dwc3/core.h

先調整DWC3核心結構體,用debug_root保存debugfs根目錄,替代舊的root指針,避免重復查找:

// 舊代碼structdwc3 { // ... 其他成員 structdentry  *root; // 舊的debugfs根目錄指針 // ... 其他成員};// 新代碼structdwc3 { // ... 其他成員 structdentry  *debug_root; // 新的debugfs根目錄指針,保存設備專屬根目錄 // ... 其他成員 // 移除舊的struct dentry *root;};

作用debug_root會在dwc3_debugfs_init()中初始化,后續(xù)操作直接復用該指針,無需反復調用debugfs_lookup()查找根目錄,減少冗余操作與泄漏風險。

1.2新增端點目錄刪除函數(shù)(drivers/usb/dwc3/debug.h

添加dwc3_debugfs_remove_endpoint_dir()聲明,統(tǒng)一處理端點目錄的刪除邏輯:

// 舊代碼#ifdefCONFIG_DEBUG_FSexternvoiddwc3_debugfs_create_endpoint_dir(structdwc3_ep *dep);externvoiddwc3_debugfs_init(structdwc3 *d);externvoiddwc3_debugfs_exit(structdwc3 *d);#elsestaticinlinevoiddwc3_debugfs_create_endpoint_dir(structdwc3_ep *dep){ }staticinlinevoiddwc3_debugfs_init(structdwc3 *d){ }staticinlinevoiddwc3_debugfs_exit(structdwc3 *d){ }#endif// 新代碼#ifdefCONFIG_DEBUG_FSexternvoiddwc3_debugfs_create_endpoint_dir(structdwc3_ep *dep);externvoiddwc3_debugfs_remove_endpoint_dir(structdwc3_ep *dep); // 新增函數(shù)聲明externvoiddwc3_debugfs_init(structdwc3 *d);externvoiddwc3_debugfs_exit(structdwc3 *d);#elsestaticinlinevoiddwc3_debugfs_create_endpoint_dir(structdwc3_ep *dep){ }staticinlinevoiddwc3_debugfs_remove_endpoint_dir(structdwc3_ep *dep){ } // 新增靜態(tài)內聯(lián)實現(xiàn)staticinlinevoiddwc3_debugfs_init(structdwc3 *d){ }staticinlinevoiddwc3_debugfs_exit(structdwc3 *d){ }#endif

作用:為后續(xù)驅動卸載時刪除端點目錄提供統(tǒng)一接口,避免分散調用debugfs_lookup()導致的泄漏。

1.3實現(xiàn)debugfs核心邏輯(drivers/usb/dwc3/debugfs.c

替換debugfs_lookup()debugfs_lookup_and_remove(),并調整目錄創(chuàng)建/刪除邏輯:

// 1. 重構端點目錄創(chuàng)建函數(shù)// 舊代碼staticvoiddwc3_debugfs_create_endpoint_files(structdwc3_ep *dep,structdentry *parent){ inti; for(i =0; i ARRAY_SIZE(dwc3_ep_file_map); i++) {   conststructfile_operations*fops = dwc3_ep_file_map[i].fops;   constchar*name = dwc3_ep_file_map[i].name;   debugfs_create_file(name,0444, parent, dep, fops);  }}voiddwc3_debugfs_create_endpoint_dir(structdwc3_ep *dep){ structdentry*dir;  dir =debugfs_create_dir(dep->name, dep->dwc->root); // 依賴舊的root指針 dwc3_debugfs_create_endpoint_files(dep, dir);}// 新代碼voiddwc3_debugfs_create_endpoint_dir(structdwc3_ep *dep){ structdentry*dir; // 用debug_root替代root,直接復用已保存的根目錄  dir =debugfs_create_dir(dep->name, dep->dwc->debug_root); for(inti =0; i ARRAY_SIZE(dwc3_ep_file_map); i++) {   conststructfile_operations*fops = dwc3_ep_file_map[i].fops;   constchar*name = dwc3_ep_file_map[i].name;   debugfs_create_file(name,0444, dir, dep, fops);  }}// 2. 實現(xiàn)端點目錄刪除函數(shù)voiddwc3_debugfs_remove_endpoint_dir(structdwc3_ep *dep){ // 自動完成“查找+刪除+釋放dentry”,無需手動dput() debugfs_lookup_and_remove(dep->name, dep->dwc->debug_root);}// 3. 初始化debugfs根目錄voiddwc3_debugfs_init(structdwc3 *dwc){ structdentry*root; // ... 其他初始化邏輯  root =debugfs_create_dir(dev_name(dwc->dev), usb_debug_root);  dwc->debug_root = root; // 保存根目錄到debug_root // ... 其他文件創(chuàng)建邏輯(如regdump、lsp_dump)}// 4. 清理debugfs資源voiddwc3_debugfs_exit(structdwc3 *dwc){ // 直接刪除根目錄,避免殘留文件 debugfs_lookup_and_remove(dev_name(dwc->dev), usb_debug_root); kfree(dwc->regset);}

作用

?debugfs_lookup_and_remove():內部會自動調用dput()釋放dentry引用,徹底解決查找后未釋放的泄漏問題;

?復用debug_root:避免每次創(chuàng)建/刪除端點目錄時重復查找根目錄,提升效率的同時減少錯誤。

1.4驅動卸載時調用新函數(shù)(drivers/usb/dwc3/gadget.c

在端點釋放邏輯中,用新的刪除函數(shù)替代舊的手動查找:

// 舊代碼staticvoiddwc3_gadget_free_endpoints(struct dwc3 *dwc) { // ... 其他邏輯 debugfs_remove_recursive(debugfs_lookup(dep->name, dwc->root)); // 未釋放dentry kfree(dep); // ... 其他邏輯}// 新代碼staticvoiddwc3_gadget_free_endpoints(struct dwc3 *dwc) { // ... 其他邏輯 dwc3_debugfs_remove_endpoint_dir(dep); // 調用新函數(shù),自動釋放 kfree(dep); // ... 其他邏輯}

作用:驅動卸載時,通過統(tǒng)一接口安全刪除端點目錄,徹底杜絕該場景下的內存泄漏。

2.修復驅動bind/unbind泄漏:引入托管軟件節(jié)點” API

這類泄漏的核心是節(jié)點生命周期未綁定設備,解決方案分三步:先提供托管API,再修復API缺陷,最后替換DWC3驅動中的舊調用。

步驟1:新增device_create_managed_software_nodeAPIdrivers/base/swnode.c+include/linux/property.h

先實現(xiàn)一個托管式軟件節(jié)點創(chuàng)建函數(shù),讓節(jié)點生命周期與設備強綁定:

2.1.1定義托管標記(drivers/base/swnode.c

struct swnode中添加managed標記,區(qū)分托管節(jié)點與普通節(jié)點:

// 舊代碼structswnode{ structswnode*parent; unsignedintallocated:1; // 標記是否動態(tài)分配};// 新代碼structswnode{ structswnode*parent; unsignedintallocated:1; unsignedintmanaged:1;  // 新增:標記是否為托管節(jié)點(生命周期綁定設備)};
2.1.2實現(xiàn)托管APIdrivers/base/swnode.c

/*** device_create_managed_software_node - 為設備創(chuàng)建托管軟件節(jié)點* @dev: 綁定的設備* @properties: 節(jié)點屬性列表* @parent: 父節(jié)點(可選)* 返回:0成功,負數(shù)錯誤碼*/intdevice_create_managed_software_node(structdevice *dev,                   conststructproperty_entry *properties,                   conststructsoftware_node *parent) { structfwnode_handle *p = software_node_fwnode(parent); structfwnode_handle *fwnode; // 父節(jié)點無效時返回錯誤 if(parent && !p)   return-EINVAL; // 創(chuàng)建軟件節(jié)點(深拷貝屬性,避免原數(shù)據(jù)修改影響)  fwnode = fwnode_create_software_node(properties, p); if(IS_ERR(fwnode))   returnPTR_ERR(fwnode); // 標記為托管節(jié)點,生命周期綁定設備  to_swnode(fwnode)->managed =true; // 將節(jié)點綁定到設備的次要fwnode  set_secondary_fwnode(dev, fwnode); return0;}EXPORT_SYMBOL_GPL(device_create_managed_software_node);
2.1.3聲明APIinclude/linux/property.h

在頭文件中添加函數(shù)聲明,供其他驅動調用:

// 舊代碼intdevice_add_software_node(structdevice *dev,conststructsoftware_node *node);voiddevice_remove_software_node(structdevice *dev);// 新代碼intdevice_add_software_node(structdevice *dev,conststructsoftware_node *node);voiddevice_remove_software_node(structdevice *dev);// 新增托管API聲明intdevice_create_managed_software_node(structdevice *dev,                   conststructproperty_entry *properties,                   conststructsoftware_node *parent);

作用

?托管特性:managed標記會讓節(jié)點在設備刪除時自動回收,無需手動調用刪除函數(shù);

?深拷貝屬性:避免原屬性列表被釋放后,節(jié)點引用無效內存;

?支持層級:可指定父節(jié)點,滿足復雜設備的節(jié)點結構需求。

步驟2:修復托管API的引用計數(shù)下溢(drivers/base/swnode.c

問題software_node_notify()處理KOBJ_REMOVE事件時,會對托管節(jié)點執(zhí)行兩次引用計數(shù)遞減,導致refcount_warn_saturate內核錯誤。

修復:在API中添加引用計數(shù)平衡邏輯:

// 舊代碼intdevice_create_managed_software_node(structdevice *dev,                   conststructproperty_entry *properties,                   conststructsoftware_node *parent) { // ... 前面的創(chuàng)建邏輯  to_swnode(fwnode)->managed =true;  set_secondary_fwnode(dev, fwnode); return0;}// 新代碼intdevice_create_managed_software_node(structdevice *dev,                   conststructproperty_entry *properties,                   conststructsoftware_node *parent) { // ... 前面的創(chuàng)建邏輯  to_swnode(fwnode)->managed =true;  set_secondary_fwnode(dev, fwnode); // 新增:設備已注冊時,觸發(fā)KOBJ_ADD事件,平衡后續(xù)KOBJ_REMOVE的引用計數(shù) if(device_is_registered(dev))    software_node_notify(dev, KOBJ_ADD); return0;}

作用KOBJ_ADD事件會觸發(fā)一次引用計數(shù)遞增,后續(xù)KOBJ_REMOVE事件的兩次遞減會被抵消一次,最終引用計數(shù)正常歸零,避免下溢錯誤。

步驟3DWC3 Host驅動替換舊APIdrivers/usb/dwc3/host.c

platform_device_add_properties()替換為新的托管API,讓屬性節(jié)點隨設備回收:

// 舊代碼intdwc3_host_init(structdwc3 *dwc){ // ... 其他邏輯 if(prop_idx) {   // 舊API:節(jié)點生命周期未綁定設備,卸載時泄漏    ret =platform_device_add_properties(xhci, props);   if(ret) {     dev_err(dwc->dev,"failed to add properties to xHCIn");     gotoerr;    }  } // ... 其他邏輯}// 新代碼intdwc3_host_init(structdwc3 *dwc){ // ... 其他邏輯 if(prop_idx) {   // 新API:節(jié)點生命周期綁定xhci->dev,設備卸載時自動回收    ret =device_create_managed_software_node(&xhci->dev, props,NULL);   if(ret) {     dev_err(dwc->dev,"failed to add properties to xHCIn");     gotoerr;    }  } // ... 其他邏輯}

作用xhci設備卸載時,托管節(jié)點會被自動刪除,徹底解決“bind/unbind”場景下的內存泄漏。

3.補充修復:probe階段的電源管理泄漏(drivers/usb/dwc3/core.c

除了上述兩大核心問題,DWC3 probe階段若初始化失敗,會導致電源供應器引用未釋放,需補充錯誤分支處理:

// 舊代碼staticintdwc3_probe(structplatform_device *pdev){ // ... 其他邏輯  dwc3_get_properties(dwc); // 內部調用power_supply_get_by_name獲取usb_psy // 重置控制器獲取失敗時,直接返回錯誤,未釋放usb_psy  dwc->reset = devm_reset_control_array_get_optional_shared(dev); if(IS_ERR(dwc->reset))   returnPTR_ERR(dwc->reset); // 時鐘獲取失?。‥PROBE_DEFER)時,未釋放usb_psy if(dev->of_node) {    ret = devm_clk_bulk_get_all(dev, &dwc->clks);   if(ret == -EPROBE_DEFER)     returnret;   // ... 其他邏輯  } // 重置解除失敗時,未釋放usb_psy  ret = reset_control_deassert(dwc->reset); if(ret)   returnret; // ... 其他邏輯assert_reset:  reset_control_assert(dwc->reset); // 未處理usb_psy釋放}// 新代碼staticintdwc3_probe(structplatform_device *pdev){ // ... 其他邏輯  dwc3_get_properties(dwc); // 重置控制器獲取失敗:跳轉到put_usb_psy釋放引用  dwc->reset = devm_reset_control_array_get_optional_shared(dev); if(IS_ERR(dwc->reset)) {    ret = PTR_ERR(dwc->reset);   gotoput_usb_psy;  } // 時鐘獲取失敗:跳轉到put_usb_psy釋放引用 if(dev->of_node) {    ret = devm_clk_bulk_get_all(dev, &dwc->clks);   if(ret == -EPROBE_DEFER)     gotoput_usb_psy;   // ... 其他邏輯  } // 重置解除失敗:跳轉到put_usb_psy釋放引用  ret = reset_control_deassert(dwc->reset); if(ret)   gotoput_usb_psy; // ... 其他邏輯assert_reset:  reset_control_assert(dwc->reset);// 新增錯誤分支:釋放usb_psy引用put_usb_psy: if(dwc->usb_psy)    power_supply_put(dwc->usb_psy);}

作用:無論probe階段哪個步驟失敗,都會通過goto put_usb_psy釋放power_supply_get_by_name()獲取的引用,避免電源管理相關內存泄漏。

三、驗證結果:RV1103B/RK3588上的穩(wěn)定性測試

所有補丁均在RV1103B(嵌入式邊緣計算平臺)RK3588(高性能AI平臺)上完成驗證,測試標準如下:

1.穩(wěn)定性:執(zhí)行兩種場景的復現(xiàn)腳本,持續(xù)運行24小時,MemFree數(shù)值波動范圍≤1%(屬于正常緩存變化),無持續(xù)減少;

2.無錯誤日志:查看dmesg,無refcount_warn_saturate、內存分配失?。?/span>out of memory)等錯誤;

3.功能正常:長時間運行后,USB設備插拔、OTG模式切換、Host驅動裝卸均正常響應,無功能異常。

四、開發(fā)啟示:內存泄漏修復的3個關鍵思路

從這次DWC3控制器的泄漏修復中,我們可以提煉出嵌入式Linux驅動開發(fā)的通用經驗:

1.優(yōu)先使用托管類API”:內核提供的devm_*(設備托管)、managedAPI(如本次的device_create_managed_software_node)會自動管理資源生命周期,避免手動釋放遺漏——這是預防泄漏的最佳實踐,能減少80%以上的人為失誤。

2.場景化復現(xiàn)是關鍵:內存泄漏需結合實際使用場景(如模式切換、驅動裝卸)設計復現(xiàn)腳本,通過/proc/meminfo觀察整體內存變化,用slabtop定位具體泄漏的內存slab(如dentrysoftware_node相關),精準鎖定泄漏點。

3.重視上游補丁同步:本次修復的核心API(如debugfs_lookup_and_remove、托管軟件節(jié)點)均來自Linux內核上游(5.12 +版本),回溯上游補丁不僅能保證方案的穩(wěn)定性,還能減少后續(xù)內核升級的適配成本——避免自己造輪子導致的兼容性問題。

補丁獲取與適配建議

若你的項目使用了USB DWC3控制器(尤其是RV1103BRK3588等瑞芯微平臺),可按以下方式適配:

1.獲取補丁:補丁已提交至瑞芯微官方內核倉庫(linux-rockchip),可直接提取上述代碼片段手動修改,或基于5.10 +內核版本同步相關提交;

2.適配其他平臺:若使用非瑞芯微平臺(如高通NXP),需確認DWC3驅動版本——核心修改(debugfs替換、托管節(jié)點)通用,但需調整平臺相關的設備節(jié)點(如usb_phy節(jié)點路徑);

3.測試驗證:適配后務必執(zhí)行本文中的復現(xiàn)腳本,持續(xù)運行至少4小時,確認內存無泄漏且功能正常。

內存泄漏是嵌入式設備長期穩(wěn)定運行的隱形殺手,尤其是USB這類高頻使用的外設。希望本次DWC3控制器的修復案例,能為大家提供實用的排查和解決思路,讓設備跑得更穩(wěn)、更久~

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

    關注

    114

    文章

    17786

    瀏覽量

    192993
  • 嵌入式
    +關注

    關注

    5198

    文章

    20435

    瀏覽量

    333894
  • usb
    usb
    +關注

    關注

    60

    文章

    8437

    瀏覽量

    284389
  • 內存泄漏
    +關注

    關注

    0

    文章

    41

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    瑞芯微RK3588開發(fā)板RK3588 EVB和RK3588S EVB解讀

    開發(fā)工程師Damon的解答。 RK3588開發(fā)板的款產品分別為RK3588 EVB及RK3588S EVB。RK3588 EVB 主要面向
    的頭像 發(fā)表于 09-22 15:54 ?2.3w次閱讀
    瑞芯微<b class='flag-5'>RK3588</b>開發(fā)板<b class='flag-5'>RK3588</b> EVB和<b class='flag-5'>RK3588</b>S EVB解讀

    RK3588 PCB推薦疊層及阻抗設計

    近期華秋電子聯(lián)合瑞芯微、凡億重磅發(fā)布了:《RK3588 PCB設計指導白皮書》,幫助開發(fā)者更好地規(guī)范利用RK3588開發(fā)產品,提高所設計的PCB質量,在實戰(zhàn)中鞏固及提高PCB設計水平。本文
    發(fā)表于 08-10 09:32 ?1924次閱讀
    <b class='flag-5'>RK3588</b> PCB推薦疊層及阻抗設計

    米爾RK3576和RK3588怎么選?-看這篇就夠了

    ISP帶有HDR和3DNR,RK3588的像素ISP分辨率更高(48M對比16M) 具備豐富的接口配置 者都配備了豐富的接口配置,PCIe/ SATA/ TYPE C/ USB
    發(fā)表于 12-27 11:44

    RK3588 EVB開發(fā)板原理圖講解【八】 RK3588 power Tree

    本帖最后由 瑞芯微方案開發(fā)老王 于 2025-3-1 11:41 編輯 一、RK3588電源架構核心特點 ?多電源域設計? 芯片通常劃分為多個獨立電源域(Power Domain),例如
    發(fā)表于 03-01 11:38

    RK這2款旗艦芯片RK3588 PK RK3576,誰是最優(yōu)選

    Mali G52 MC3RK3588 配備 ARM Mali - G610MC4,都支持 OpenGL ES 1.1、2.0 和 3.2,Vulkan 1.2,在支持的圖形標準上者類似,但在
    發(fā)表于 07-10 18:24

    RK3399平臺上USB控制器和PHY的連接方式和配置說明

    USB3.0 OTG具有USB3.0 OTG功能,且向下兼容USB2.0 OTG功能,大傳輸速率為5Gbps。USB3.0 HOST控制器
    發(fā)表于 05-12 17:46

    分享一種RK3588 USB芯片級DTSI的配置方法

    RK3588 DTSI 文件中 USB 控制器和 PHY 相關的主要節(jié)點如下所示,因為 USB DTSI 節(jié)點配置的是 USB
    發(fā)表于 05-23 11:27

    RK3588RK3588S在ARM陣列服務上的應用

      RK3588RK3588S是瑞芯微2022年初量產的旗艦8核高能處理,CPU、GPU、NPU性能強勁,并支持最高32GB 內存LPDDR4/LPDDR4x/LPDDR5,特別適
    發(fā)表于 07-18 17:54

    【新品】工業(yè)級別!RK3588行業(yè)主機系列

    RK3588行業(yè)主機系列采用RK3588J/RK3588八核64位處理,最大可配32GB大內存;支持8K視頻編解碼;支持千兆以太網、WiF
    的頭像 發(fā)表于 03-15 11:23 ?4525次閱讀
    【新品】工業(yè)級別!<b class='flag-5'>RK3588</b>行業(yè)主機系列

    rk3588rk3588s的區(qū)別

    高性能、低功耗的處理,是針對不同市場設計的不同版本。這篇文章將介紹這種處理的區(qū)別。 RK3588RK3588S的概述 -
    的頭像 發(fā)表于 08-15 16:44 ?2.1w次閱讀

    RK35883588s的區(qū)別

    RK35883588s的區(qū)別 Rockchip RK3588RK3588s是種功能強大且廣受歡迎的片上系統(tǒng)(SoC)解決方案,用于一系
    的頭像 發(fā)表于 08-15 17:03 ?2.9w次閱讀

    RK3588RK3399的區(qū)別

    存儲,并且支持PCIe4.0和USB 3.2 Gen1接口,可實現(xiàn)高速傳輸和多設備連接。在AI方面,RK3588支持多種神經網絡,如ResNet、SSD、YOLO、FCN等,并可以通過開放的SDK進行
    的頭像 發(fā)表于 08-15 17:04 ?9754次閱讀

    rk3588參數(shù)詳解 rk3588芯片參數(shù)

    rk3588參數(shù)詳解 rk3588芯片參數(shù) Rockchip官方已經推出了全新一代的高端芯片RK3588,作為旗艦芯片,其蘊含的高性能與先進科技引起了廣泛關注。本篇文章將詳細介紹RK3588
    的頭像 發(fā)表于 08-21 17:16 ?4.5w次閱讀

    一文搞懂?RK3588 PCIe:從硬件資源到拆分配置?+?避坑指南(含腦圖)

    資源解析3? 大拆分方案實戰(zhàn)、關鍵配置步驟及避坑要點,附帶可視化腦圖,助力開發(fā)者快速落地? PCIe? 相關項目。 ? ? ? 一、 RK3588 PCIe? 核心硬件資源 ? 1
    的頭像 發(fā)表于 11-20 18:18 ?3786次閱讀
    一文搞懂?<b class='flag-5'>RK3588</b> PCIe:從硬件資源到拆分配置?+?避坑指南(含腦圖)

    【技術分享】RK3588如何搭建xenomai3+ethercat

    說明使用的RK3588的分支版本是linux-6.1-stan-rkr6內核版本是6.1.99把瑞芯微的SDK更新到linux-6.1-stan-rkr6這個版本即可。編譯xenomai3的內核請參考上一篇技術分享:技術分享|RK358
    的頭像 發(fā)表于 12-11 17:26 ?1022次閱讀
    【技術分享】<b class='flag-5'>RK3588</b>如何搭建xenomai<b class='flag-5'>3</b>+ethercat