LuoTianyi_HOLOMAIN/docs/OrangePi_CM5/Android底层开发 _ Radxa Docs.html
Rdzleo 713cbd1835 修复律动期间 UART0 TX 拥堵 + 补充踩坑文档 + 硬件文档归类 + Mac 开发工程入库
一、代码修复(HOLOMAIN.ino)
1、processCommand 响应改为只发 Serial (USB CDC / Windows 调试),不再回发 SerialLinux (Android)
   背景:Android 随音乐律动高频发送 LED 命令时,ESP32 每条命令的响应挤占 UART0 TX,
         导致刷卡产生的 SORC_xxx 业务数据延迟到达 Android,表现为律动期间刷卡经常无效
   效果:UART0 TX 释放给业务数据使用,Windows 调试仍能通过 USB CDC 看到响应

二、踩坑经验文档补充(ESP32踩坑经验文档.md)
1、新增坑 12:音乐律动时高频 LED 命令导致 RFID 高概率失败【物理层面干扰】
2、内容涵盖:
   - 现象描述与触发条件(律动期间 vs 静态场景)
   - 根本原因推演:高频亮度跳变 → WS2812 电流瞬变 → 电源噪声耦合 → RC522 SPI 异常
   - 与坑 7(WS2812 关中断)的区别:坑 12 是物理电源噪声,即使用 RMT 也无法避免
   - 四层解决方案按优先级排列:
     方案1 Android 端降频+去重+节拍化(已验证,60FPS→5次/秒,失败率显著降低)
     方案2 ESP32 响应只发调试口(已实施,本次提交)
     方案3 ESP32 亮度平滑过渡(预备方案,含完整代码和 step_max 调校参考)
     方案4 RC522 供电去耦电容(硬件方案,终极根治)
3、经验教训:主机端源头减量 > 固件端平滑过渡 > 硬件去耦电容

三、硬件文档目录归类(docs/)
1、新建 docs/ESP32/ 分类目录
2、新建 docs/OrangePi_CM5/ 分类目录
3、移动原散落在 docs/ 根目录的文档到对应分类
4、新增资料:
   - docs/OrangePi_CM5/OPI CM5 BASE-TABLET_V1_1_SCH.pdf(底板原理图)
   - docs/OrangePi_CM5/开发工具用户手册_v1.0.pdf

四、Mac 开发工程入库(Luotianyi_Mac/)
1、新增 Luotianyi_Mac/Luotianyi_Mac.ino
2、用途:Windows 切换到 Mac 开发环境后,后续 ESP32 业务在此工程继续开发
3、HOLOMAIN.ino 保留作为 Windows Arduino IDE 下的基线版本

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 14:35:42 +08:00

82 lines
60 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=zh-CN dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-som/cm/cm5/android/low-level-dev" data-has-hydrated=false><meta charset=UTF-8><meta name=generator content="Docusaurus v3.8.1"><title data-rh=true>底层开发 | Radxa Docs</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"><meta data-rh=true name=twitter:card content=summary_large_image><meta data-rh=true property=og:url content=https://docs.radxa.com/som/cm/cm5/android/low-level-dev><meta data-rh=true property=og:locale content=zh_CN><meta data-rh=true property=og:locale:alternate content=en_US><meta data-rh=true name=docusaurus_locale content=zh><meta data-rh=true name=docsearch:language content=zh><meta data-rh=true name=docusaurus_version content=current><meta data-rh=true name=docusaurus_tag content=docs-default-current><meta data-rh=true name=docsearch:version content=current><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-current><meta data-rh=true property=og:title content="底层开发 | Radxa Docs"><meta data-rh=true name=description content="主要介绍 uboot, kernel, aosp 编译打包等内容"><meta data-rh=true property=og:description content="主要介绍 uboot, kernel, aosp 编译打包等内容"><link data-rh=true rel=icon href=/img/favicon.ico><link data-rh=true rel=canonical href=https://docs.radxa.com/som/cm/cm5/android/low-level-dev><link data-rh=true rel=alternate href=https://docs.radxa.com/en/som/cm/cm5/android/low-level-dev hreflang=en-US><link data-rh=true rel=alternate href=https://docs.radxa.com/som/cm/cm5/android/low-level-dev hreflang=zh-CN><link data-rh=true rel=alternate href=https://docs.radxa.com/som/cm/cm5/android/low-level-dev hreflang=x-default><link data-rh=true rel=preconnect href=https://KB2V2SQ6N9-dsn.algolia.net crossorigin=anonymous><script data-rh=true type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"https://docs.radxa.com/som/cm/","name":"CM 系列","position":1},{"@type":"ListItem","item":"https://docs.radxa.com/som/cm/cm5/","name":"瑞莎 CM5","position":2},{"@type":"ListItem","item":"https://docs.radxa.com/som/cm/cm5/android/","name":"Android 系统","position":3},{"@type":"ListItem","item":"https://docs.radxa.com/som/cm/cm5/android/low-level-dev","name":"底层开发","position":4}]}</script><link rel=preconnect href=https://www.google-analytics.com><link rel=preconnect href=https://www.googletagmanager.com><script async src="https://www.googletagmanager.com/gtag/js?id=G-2V3W91WFXP"></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-2V3W91WFXP",{anonymize_ip:!0})</script><script async src=https://hm.baidu.com/hm.js?b95e7f9830b48df01fcb1c3267e7d73b></script><script>window._hmt=window._hmt||[],function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?b95e7f9830b48df01fcb1c3267e7d73b";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)}()</script><link rel=stylesheet href=/assets/css/styles.3fad7f3b.css><script src=/assets/js/runtime~main.a65a8a44.js defer></script><script src=/assets/js/main.ea07db7f.js defer></script><body class=navigation-with-keyboard><svg xmlns=http://www.w3.org/2000/svg style="display: none;"><defs>
<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t="light",e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id=__docusaurus><link rel=preload as=image href=/page/radxa-docs.svg><div role=region aria-label=跳到主要内容><a class=skipToContent_fXgn href=#__docusaurus_skipToContent_fallback>跳到主要内容</a></div><div class="theme-announcement-bar announcementBar_mb4j" style=background-color:#2b2b2b;color:#fff role=banner><div class="content_knG7 announcementBarContent_xLdY"><div id=bulletin><a target=_blank rel="noopener noreferrer" href=https://radxa.com>Home</a><a target=_blank rel="noopener noreferrer" href=https://radxa.com/products>Products</a><a target=_blank rel="noopener noreferrer" href=https://radxa.com/news>News</a><a target=_blank rel="noopener noreferrer" href=https://radxa.com/services>Services</a><a target=_blank rel="noopener noreferrer" href=https://radxa.com/support>Support</a><a target=_blank rel="noopener noreferrer" href=https://radxa.com/about>About</a></div></div></div><nav aria-label=主导航 class="theme-layout-navbar navbar navbar--fixed-top"><div class=navbar__inner><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a class=navbar__brand href=/><div class=navbar__logo><img src=/page/radxa-docs.svg alt=Radxa class="themedComponent_mlkZ themedComponent--light_NVdE"><img src=/page/radxa-docs.svg alt=Radxa class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate"></b></a><a class="navbar__item navbar__link" target=_self href=/welcome>所有文档</a><div class="navbar__item dropdown dropdown--hoverable"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link>单板计算机</a><ul class=dropdown__menu><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/rock2>ROCK 2 系列</a><ul class=dropdown_item2_dhIT><li><a href=/rock2/rock2a>→ ROCK 2A</a><li><a href=/rock2/rock2f>→ ROCK 2F</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/rock3>ROCK 3 系列</a><ul class=dropdown_item2_dhIT><li><a href=/rock3/rock3a>→ ROCK 3A</a><li><a href=/rock3/rock3b>→ ROCK 3B/3B+</a><li><a href=/rock3/rock3c>→ ROCK 3C</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/rock4>ROCK 4 系列</a><ul class=dropdown_item2_dhIT><li><a href=/rock4/rock4ab-se>→ ROCK 4A/4B/4A+/4B+/4SE</a><li><a href=/rock4/rock4c+>→ ROCK 4C+</a><li><a href=/rock4/rock4d>→ ROCK 4D</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/rock5>ROCK 5 系列</a><ul class=dropdown_item2_dhIT><li><a href=/rock5/rock5a>→ ROCK 5A</a><li><a href=/rock5/rock5b>→ ROCK 5B/5B+</a><li><a href=/rock5/rock5c>→ ROCK 5C</a><li><a href=/rock5/rock5t>→ ROCK 5T</a><li><a href=/rock5/rock5itx>→ ROCK 5 ITX</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/rockpi>ROCK Pi 系列</a><ul class=dropdown_item2_dhIT><li><a href=/rockpi/rockpis>→ ROCK Pi S</a><li><a href=/rockpi/rockpie>→ ROCK Pi E</a><li><a href=/rockpi/rockpis0>→ ROCK Pi S0</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/zero>ZERO 系列</a><ul class=dropdown_item2_dhIT><li><a href=/zero/zero>ZERO</a><li><a href=/zero/zero2pro>ZERO 2 Pro</a><li><a href=/zero/zero3>ZERO 3W/3E</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/x>X 系列</a><ul class=dropdown_item2_dhIT><li><a href=/x/x2l>X2L</a><li><a href=/x/x4>X4</a><li><a href=/x/x5>X5</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/nio>NIO 系列</a><ul class=dropdown_item2_dhIT><li><a href=/nio/12l>NIO 12L</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/sirider>SiRider 系列</a><ul class=dropdown_item2_dhIT><li><a href=/sirider/s1>SiRider S1</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/orion>Orion 系列</a><ul class=dropdown_item2_dhIT><li><a href=/orion/o6>Orion O6</a><li><a href=/orion/o6n>Orion O6N</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/cubie>Cubie 系列</a><ul class=dropdown_item2_dhIT><li><a href=/cubie/a5e>Cubie A5E</a><li><a href=/cubie/a7a>Cubie A7A</a><li><a href=/cubie/a7z>Cubie A7Z</a><li><a href=/cubie/a7s>Cubie A7S</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/dragon>Dragon 系列</a><ul class=dropdown_item2_dhIT><li><a href=/dragon/q6a>Dragon Q6A</a></ul></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link>核心模组</a><ul class=dropdown__menu><li class=menu2_li_hover_y2p4><a aria-current=page class="dropdown__link dropdown__link--active" href=/som/cm>CM 系列</a><ul class=dropdown_item2_dhIT><li><a href=/som/cm/cm3>CM3</a><li><a href=/som/cm/cm3i>CM3I</a><li><a href=/som/cm/cm3j>CM3J</a><li><a href=/som/cm/cm4>CM4</a><li><a aria-current=page class=active href=/som/cm/cm5>CM5</a></ul><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/som/nx>NX 系列</a><ul class=dropdown_item2_dhIT><li><a href=/som/nx/nx4>NX4</a><li><a href=/som/nx/nx5>NX5</a><li><a href=/som/nx/orin-nx>Orin NX</a></ul></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link>网络计算</a><ul class=dropdown__menu><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/e/e20c>E20C</a><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/e/e24c>E24C</a><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/e/e52c>E52C</a><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/e/e54c>E54C</a></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link>边缘计算</a><ul class=dropdown__menu><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/fogwise/airbox>Airbox</a><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/fogwise/airbox-q900>AIRbox Q900</a></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link>智核系列</a><ul class=dropdown__menu><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/aicore/ax-m1>AX-M1</a><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/aicore/dx-m1>DX-M1 / DX-M1M</a><li class=menu2_li_hover_y2p4><a class=dropdown__link href=/aicore/sg2300x>SG2300X</a></ul></div></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link><svg viewBox="0 0 24 24" width=20 height=20 aria-hidden=true class=iconLanguage_DSK9><path fill=currentColor d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></svg>中文</a><ul class=dropdown__menu><li class=menu2_li_hover_y2p4><a href=/en/som/cm/cm5/android/low-level-dev target=_self rel="noopener noreferrer" class=dropdown__link lang=en-US>English</a><li class=menu2_li_hover_y2p4><a href=/som/cm/cm5/android/low-level-dev target=_self rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang=zh-CN>中文</a></ul></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type=button disabled title="system mode" aria-label="切换浅色/暗黑模式当前为system mode"><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill=currentColor d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill=currentColor d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill=currentColor d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"/></svg></button></div><div class=navbarSearchContainer_Bca1><button type=button class="DocSearch DocSearch-Button" aria-label="搜索 (Command+K)"><span class=DocSearch-Button-Container><svg width=20 height=20 class=DocSearch-Search-Icon viewBox="0 0 20 20" aria-hidden=true><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke=currentColor fill=none fill-rule=evenodd stroke-linecap=round stroke-linejoin=round /></svg><span class=DocSearch-Button-Placeholder>搜索</span></span><span class=DocSearch-Button-Keys></span></button></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class=docsWrapper_hBAB><button aria-label=回到顶部 class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type=button></button><div class=docRoot_UBD9><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class=sidebarViewport_aRkj><div class=sidebar_njMd><nav aria-label=文档侧边栏 class="menu thin-scrollbar menu_SIkG menuWithAnnouncementBar_GW3s"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/som>核心模组产品线</a><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist menu__link--active" href=/som/cm>CM 系列</a><button aria-label="折叠侧边栏分类 'CM 系列'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul class=menu__list><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm3j>瑞莎 CM3J</a><button aria-label="展开侧边栏分类 '瑞莎 CM3J'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm4>瑞莎 CM4</a><button aria-label="展开侧边栏分类 '瑞莎 CM4'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist menu__link--active" tabindex=0 href=/som/cm/cm5>瑞莎 CM5</a><button aria-label="折叠侧边栏分类 '瑞莎 CM5'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul class=menu__list><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm5/getting-started>快速上手</a><button aria-label="展开侧边栏分类 '快速上手'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm5/radxa-os>瑞莎系统</a><button aria-label="展开侧边栏分类 '瑞莎系统'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist menu__link--active" tabindex=0 href=/som/cm/cm5/android>Android 系统</a><button aria-label="折叠侧边栏分类 'Android 系统'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class=menu__link tabindex=0 href=/som/cm/cm5/android/install-os>系统安装</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class=menu__link tabindex=0 href=/som/cm/cm5/android/app-dev>应用开发</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class=menu__link tabindex=0 href=/som/cm/cm5/android/remote-login>远程登录</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class=menu__link tabindex=0 href=/som/cm/cm5/android/system-config>系统配置</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-4 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/som/cm/cm5/android/low-level-dev>底层开发</a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm5/low-dev>底层开发</a><button aria-label="展开侧边栏分类 '底层开发'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm5/other-os>其他系统</a><button aria-label="展开侧边栏分类 '其他系统'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm5/accessories>配件</a><button aria-label="展开侧边栏分类 '配件'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-3 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm5/hardware>硬件信息</a><button aria-label="展开侧边栏分类 '硬件信息'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/som/cm/cm5/faq>FAQ</a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/som/cm/cm5/download>资源下载汇总</a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm3>瑞莎 CM3</a><button aria-label="展开侧边栏分类 '瑞莎 CM3'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" tabindex=0 href=/som/cm/cm3i>瑞莎 CM3I</a><button aria-label="展开侧边栏分类 '瑞莎 CM3I'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="menu__link menu__link--sublist" href=/som/nx>NX 系列</a><button aria-label="展开侧边栏分类 'NX 系列'" aria-expanded=false type=button class="clean-btn menu__caret"></button></div></ul></nav><button type=button title=收起侧边栏 aria-label=收起侧边栏 class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width=20 height=20 aria-hidden=true class=collapseSidebarButtonIcon_kv0_><g fill=#7a7a7a><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"/><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"/></g></svg></button></div></div></aside><main class=docMainContainer_TBSr><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_z5aJ"><div class=docItemContainer_c0TR><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label=页面路径><ul class=breadcrumbs><li class=breadcrumbs__item><a aria-label=主页面 class=breadcrumbs__link href=/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_YNFT><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li class=breadcrumbs__item><a class=breadcrumbs__link href=/som/cm><span>CM 系列</span></a><li class=breadcrumbs__item><a class=breadcrumbs__link href=/som/cm/cm5><span>瑞莎 CM5</span></a><li class=breadcrumbs__item><a class=breadcrumbs__link href=/som/cm/cm5/android><span>Android 系统</span></a><li class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link>底层开发</span></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_bxCs"><button type=button class="clean-btn tocCollapsibleButton_TO0P">本页总览</button></div><div class="theme-doc-markdown markdown"><header><h1>底层开发</h1></header>
<p>主要介绍 uboot, kernel, aosp 编译打包等内容</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=环境配置>环境配置<a href=#环境配置 class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h2>
<p>为了规避 Android 编译过程中因为环境配置出问题提高开发效率我们引入了Docker这一工具。</p>
<p>Docker 是一个开源的应用容器引擎,可以帮助开发者更有效地构建、部署和管理应用程序。</p>
<p>Dockerfile 是一个构建 Docker 镜像的文本文件,可以根据以下内容构建编译 Android12 所需环境。</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">FROM ubuntu:20.04</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN rm /etc/apt/sources.list</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse" | tee /etc/apt/sources.list</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse" >> /etc/apt/sources.list</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse" >> /etc/apt/sources.list</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse" >> /etc/apt/sources.list</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain">ENV DEBIAN_FRONTEND noninteractive</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN apt-get update -y && apt-get install -y software-properties-common apt-utils</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN add-apt-repository -y ppa:deadsnakes/ppa</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN apt-get update -y && apt-get install -y python3.8</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 150</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN apt-get install -y python3-pip && pip install pycrypto</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN apt-get update -y && apt-get install -y openjdk-8-jdk python git-core gnupg flex bison gperf build-essential \</span><br></span><span class=token-line style=color:#393A34><span class="token plain"> zip curl gawk liblz4-tool zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \</span><br></span><span class=token-line style=color:#393A34><span class="token plain"> libncurses5 libncurses-dev x11proto-core-dev libx11-dev lib32z-dev ccache \</span><br></span><span class=token-line style=color:#393A34><span class="token plain"> libgl1-mesa-dev libxml2-utils xsltproc unzip mtools u-boot-tools \</span><br></span><span class=token-line style=color:#393A34><span class="token plain"> htop iotop sysstat iftop pigz bc device-tree-compiler lunzip \</span><br></span><span class=token-line style=color:#393A34><span class="token plain"> dosfstools vim-common parted udev libssl-dev sudo rsync python3-pyelftools cpio</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /usr/local/bin/repo && \</span><br></span><span class=token-line style=color:#393A34><span class="token plain"> chmod +x /usr/local/bin/repo && \</span><br></span><span class=token-line style=color:#393A34><span class="token plain"> which repo</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain">ENV REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'</span><br></span><span class=token-line style=color:#393A34><span class="token plain">ENV PS1="\[\033[01;37m\]\u@build\[\033[00m\]:\[\033[01;32m\]\w\[\033[00m\]:$ "</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN apt-get install -y lzop swig</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN apt-get update -y && apt-get install -y tzdata</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN mkdir /opt/toolchains</span><br></span><span class=token-line style=color:#393A34><span class="token plain">COPY ./gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf /opt/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf</span><br></span><span class=token-line style=color:#393A34><span class="token plain">COPY ./gcc-linaro-aarch64-none-elf-4.8-2013.11_linux /opt/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux</span><br></span><span class=token-line style=color:#393A34><span class="token plain">COPY ./gcc-linaro-aarch64-none-elf-4.8-2013.11_linux /opt/toolchains/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux</span><br></span><span class=token-line style=color:#393A34><span class="token plain">COPY ./gcc-arm-none-eabi-6-2017-q2-update /opt/toolchains/gcc-arm-none-eabi-6-2017-q2-update</span><br></span><span class=token-line style=color:#393A34><span class="token plain">COPY ./gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf /opt/toolchains/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf</span><br></span><span class=token-line style=color:#393A34><span class="token plain">COPY ./gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu /opt/toolchains/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu</span><br></span><span class=token-line style=color:#393A34><span class="token plain">COPY ./gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf /opt/toolchains/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-elf</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN apt-get install -y net-tools gcc-arm-linux-gnueabihf gcc-arm-none-eabi</span><br></span><span class=token-line style=color:#393A34><span class="token plain">ENV TZ=Asia/Shanghai</span><br></span><span class=token-line style=color:#393A34><span class="token plain">RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span></code></pre></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id=构建-docker-镜像>构建 Docker 镜像<a href=#构建-docker-镜像 class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">$ </span><span class="token function" style=color:#d73a49>docker</span><span class="token plain"> build </span><span class="token parameter variable" style=color:#36acaa>-t</span><span class="token plain"> android-builder:12.x --build-arg </span><span class="token assign-left variable" style=color:#36acaa>USER_ID</span><span class="token operator" style=color:#393A34>=</span><span class="token variable" style=color:#36acaa>`</span><span class="token variable function" style=color:#d73a49>id</span><span class="token variable" style=color:#36acaa> </span><span class="token variable parameter variable" style=color:#36acaa>-u</span><span class="token variable" style=color:#36acaa>`</span><span class="token plain"> --build-arg </span><span class="token assign-left variable" style=color:#36acaa>GROUP_ID</span><span class="token operator" style=color:#393A34>=</span><span class="token variable" style=color:#36acaa>`</span><span class="token variable function" style=color:#d73a49>id</span><span class="token variable" style=color:#36acaa> </span><span class="token variable parameter variable" style=color:#36acaa>-g</span><span class="token variable" style=color:#36acaa>`</span><span class="token plain"> </span><span class="token variable" style=color:#36acaa>$(</span><span class="token variable" style=color:#36acaa>which-dir-dockerfile-in</span><span class="token variable" style=color:#36acaa>)</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=下载-radxa-android-sdk>下载 Radxa Android SDK<a href=#下载-radxa-android-sdk class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h2>
<p>Radxa Android SDK 包含数百个 Git 仓库,如果不用 repo 逐个下载会非常繁琐。</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=repo>Repo<a href=#repo class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h3>
<p>Repo 是 Android 开发中用于管理多个 Git 仓库的工具它是一个Python脚本方便开发者对多个 Git 库进行版本控制和管理。</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id=下载-repo>下载 Repo<a href=#下载-repo class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">$ </span><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'"</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>>></span><span class="token plain"> ~/.bashrc</span><br></span><span class=token-line style=color:#393A34><span class="token plain">$ </span><span class="token builtin class-name">source</span><span class="token plain"> ~/.bashrc</span><br></span><span class=token-line style=color:#393A34><span class="token plain">$ </span><span class="token function" style=color:#d73a49>curl</span><span class="token plain"> https://mirrors.tuna.tsinghua.edu.cn/git/git-repo </span><span class="token parameter variable" style=color:#36acaa>-o</span><span class="token plain"> /tmp/repo</span><br></span><span class=token-line style=color:#393A34><span class="token plain">$ </span><span class="token function" style=color:#d73a49>sudo</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>cp</span><span class="token plain"> /tmp/repo /usr/local/bin/repo</span><br></span><span class=token-line style=color:#393A34><span class="token plain">$ </span><span class="token function" style=color:#d73a49>sudo</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>chmod</span><span class="token plain"> +x /usr/local/bin/repo</span><br></span></code></pre></div></div>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id=代码下载>代码下载<a href=#代码下载 class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">$ repo init </span><span class="token parameter variable" style=color:#36acaa>-u</span><span class="token plain"> https://github.com/radxa/manifests.git </span><span class="token parameter variable" style=color:#36acaa>-b</span><span class="token plain"> Android12_Radxa_rk14 </span><span class="token parameter variable" style=color:#36acaa>-m</span><span class="token plain"> rockchip-s-release.xml</span><br></span><span class=token-line style=color:#393A34><span class="token plain">$ repo </span><span class="token function" style=color:#d73a49>sync</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-d</span><span class="token plain"> --no-tags </span><span class="token parameter variable" style=color:#36acaa>-j4</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=镜像编译>镜像编译<a href=#镜像编译 class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h2>
<p>镜像编译可以使用两种方法</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=方法一-推荐>方法一 (<strong>推荐</strong>)<a href=#方法一-推荐 class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h3>
<p>使用 SDK 编译脚本方式编译</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">source</span><span class="token plain"> build/envsetup.sh</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ lunch RadxaCM5-userdebug</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ ./build.sh </span><span class="token parameter variable" style=color:#36acaa>-AUCKup</span><br></span></code></pre></div></div>
<p>等待编译完成就可以在 IMAGE 目录找到镜像</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id=方法二>方法二<a href=#方法二 class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h3>
<p>可以根据这个方法一步一步编译镜像</p>
<ol>
<li>设置编译项目的环境</li>
</ol>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style=color:#36acaa>PRODUCT_NAME</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"RadxaCM5"</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style=color:#36acaa>PRODUCT_UBOOT_CONFIG</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"rk3588"</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style=color:#36acaa>PRODUCT_KERNEL_CONFIG</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"rockchip_defconfig android-11.config RadxaCM5.config"</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style=color:#36acaa>PRODUCT_KERNEL_DTS</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"rk3588s-radxa-cm5-io"</span><br></span></code></pre></div></div>
<ol start=2>
<li>编译 U-boot</li>
</ol>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">cd</span><span class="token plain"> u-boot</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/u-boot $ </span><span class="token function" style=color:#d73a49>make</span><span class="token plain"> clean</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/u-boot $ </span><span class="token function" style=color:#d73a49>make</span><span class="token plain"> mrproper</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/u-boot $ </span><span class="token function" style=color:#d73a49>make</span><span class="token plain"> distclean</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/u-boot $ ./make.sh </span><span class="token variable" style=color:#36acaa>${PRODUCT_UBOOT_CONFIG}</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">cd</span><span class="token plain"> -</span><br></span></code></pre></div></div>
<ol start=3>
<li>编译内核</li>
</ol>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">cd</span><span class="token plain"> kernel</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/kernel $ </span><span class="token assign-left variable" style=color:#36acaa>ADDON_ARGS</span><span class="token operator" style=color:#393A34>=</span><span class="token string" style=color:#e3116c>"CC=../prebuilts/clang/host/linux-x86/clang-r383902b/bin/clang LD=../prebuilts/clang/host/linux-x86/clang-r383902b/bin/ld.lld"</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/kernel $ </span><span class="token function" style=color:#d73a49>make</span><span class="token plain"> clean</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/kernel $ </span><span class="token function" style=color:#d73a49>make</span><span class="token plain"> </span><span class="token variable" style=color:#36acaa>$ADDON_ARGS</span><span class="token plain"> </span><span class="token assign-left variable" style=color:#36acaa>ARCH</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">arm64 </span><span class="token variable" style=color:#36acaa>${PRODUCT_KERNEL_CONFIG}</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/kernel $ </span><span class="token function" style=color:#d73a49>make</span><span class="token plain"> </span><span class="token variable" style=color:#36acaa>$ADDON_ARGS</span><span class="token plain"> </span><span class="token assign-left variable" style=color:#36acaa>ARCH</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">arm64 </span><span class="token variable" style=color:#36acaa>${PRODUCT_KERNEL_DTS}</span><span class="token plain">.img -j</span><span class="token variable" style=color:#36acaa>$(</span><span class="token variable" style=color:#36acaa>nproc</span><span class="token variable" style=color:#36acaa>)</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">cd</span><span class="token plain"> -</span><br></span></code></pre></div></div>
<ol start=4>
<li>编译AOSP</li>
</ol>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">source</span><span class="token plain"> build/envsetup.sh</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ lunch </span><span class="token variable" style=color:#36acaa>${PRODUCT_NAME}</span><span class="token plain">-userdebug</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token function" style=color:#d73a49>make</span><span class="token plain"> -j</span><span class="token variable" style=color:#36acaa>$(</span><span class="token variable" style=color:#36acaa>nproc</span><span class="token variable" style=color:#36acaa>)</span><br></span></code></pre></div></div>
<ol start=5>
<li>制作 Images</li>
</ol>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token function" style=color:#d73a49>rm</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-rf</span><span class="token plain"> rockdev</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token function" style=color:#d73a49>ln</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-s</span><span class="token plain"> RKTools/linux/Linux_Pack_Firmware/rockdev </span><span class="token builtin class-name">.</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12 $ ./mkimage.sh</span><br></span></code></pre></div></div>
<ol start=6>
<li>打包 Image</li>
</ol>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><span class=token-line style=color:#393A34><span class="token plain">android12 $ </span><span class="token builtin class-name">cd</span><span class="token plain"> rockdev</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/rockdev $ </span><span class="token function" style=color:#d73a49>rm</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-rf</span><span class="token plain"> Image</span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/rockdev $ </span><span class="token function" style=color:#d73a49>ln</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-s</span><span class="token plain"> Image-</span><span class="token variable" style=color:#36acaa>${PRODUCT_NAME}</span><span class="token plain"> Image</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># 打包成 RK update 格式镜像</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/rockdev $ ./mkupdate_rk356x.sh</span><br></span><span class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br></span><span class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># 打包成 GPT 格式镜像</span><span class="token plain"></span><br></span><span class=token-line style=color:#393A34><span class="token plain">android12/rockdev $ ./android-gpt.sh</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id=常见问题>常见问题<a href=#常见问题 class=hash-link aria-label=标题的直接链接 title=标题的直接链接></a></h2></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class=issues_center_hgDx><a href="https://github.com/radxa-docs/docs/issues/new?title=Issue%20from%20som%2Fcm%2Fcm5%2Fandroid%2Flow-level-dev&body=URL%3A%20%5Bhttps%3A%2F%2Fdocs.radxa.com%2Fsom%2Fcm%2Fcm5%2Fandroid%2Flow-level-dev%5D(https%3A%2F%2Fdocs.radxa.com%2Fsom%2Fcm%2Fcm5%2Fandroid%2Flow-level-dev)%0A%0ATime%3A%204%2F14%2F2026%2C%2011%3A30%3A17%20AM" target=_blank rel="noopener noreferrer"><svg t=1727244518678 class=icon viewBox="0 0 1024 1024" version=1.1 xmlns=http://www.w3.org/2000/svg p-id=6366 xlink=http://www.w3.org/1999/xlink width=20 height=20><path d="M940 512H792V412c76.8 0 139-62.2 139-139 0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 34.8-28.2 63-63 63H232c-34.8 0-63-28.2-63-63 0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 76.8 62.2 139 139 139v100H84c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h148v96c0 6.5 0.2 13 0.7 19.3C164.1 728.6 116 796.7 116 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-44.2 23.9-82.9 59.6-103.7 6 17.2 13.6 33.6 22.7 49 24.3 41.5 59 76.2 100.5 100.5 28.9 16.9 61 28.8 95.3 34.5 4.4 0 8-3.6 8-8V484c0-4.4 3.6-8 8-8h60c4.4 0 8 3.6 8 8v464.2c0 4.4 3.6 8 8 8 34.3-5.7 66.4-17.6 95.3-34.5 41.5-24.3 76.2-59 100.5-100.5 9.1-15.5 16.7-31.9 22.7-49C812.1 793.1 836 831.8 836 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-79.3-48.1-147.4-116.7-176.7 0.4-6.4 0.7-12.8 0.7-19.3v-96h148c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8z" p-id=6367 fill=#2e8555 /><path d="M304 280h416c4.4 0 8-3.6 8-8 0-40-8.8-76.7-25.9-108.1-17.2-31.5-42.5-56.8-74-74C596.7 72.8 560 64 520 64h-16c-40 0-76.7 8.8-108.1 25.9-31.5 17.2-56.8 42.5-74 74C304.8 195.3 296 232 296 272c0 4.4 3.6 8 8 8z" p-id=6368 fill=#2e8555 /></svg>报告问题</a></div><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class=col><a href=https://github.com/radxa-docs/docs/edit/main/docs/som/cm/cm5/android/low-level-dev.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_Z9Sw aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"/></g></svg>编辑此页</a></div><div class="col lastUpdated_JAkA"></div></div></footer><ul class=dedicateUl_vnqO></ul></article><nav class=pagination-nav aria-label=文档分页导航><a class="pagination-nav__link pagination-nav__link--prev" href=/som/cm/cm5/android/system-config><div class=pagination-nav__sublabel>上一页</div><div class=pagination-nav__label>系统配置</div></a><a class="pagination-nav__link pagination-nav__link--next" href=/som/cm/cm5/low-dev><div class=pagination-nav__sublabel>下一页</div><div class=pagination-nav__label>底层开发</div></a></nav></div><div style="margin-top:2rem;padding-top:2rem;border-top:1px solid #000" class=giscus-container><p style=font-size:.8rem;color:#74bc1f;text-align:center>您需要登录 GitHub 才能发表评论。如果您已登录,请忽略此消息。</div><p style=text-align:center;margin-top:2rem;margin-bottom:0><a href=https://docs.radxa.com>Radxa-docs</a> © 2026 by <a href=/license> Radxa Computer (Shenzhen) Co.,Ltd.</a> is licensed under <a href=https://creativecommons.org/licenses/by/4.0/> CC BY 4.0</a></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href=#环境配置 class="table-of-contents__link toc-highlight">环境配置</a><li><a href=#下载-radxa-android-sdk class="table-of-contents__link toc-highlight">下载 Radxa Android SDK</a><ul><li><a href=#repo class="table-of-contents__link toc-highlight">Repo</a></ul><li><a href=#镜像编译 class="table-of-contents__link toc-highlight">镜像编译</a><ul><li><a href=#方法一-推荐 class="table-of-contents__link toc-highlight">方法一 (<strong>推荐</strong>)</a><li><a href=#方法二 class="table-of-contents__link toc-highlight">方法二</a></ul><li><a href=#常见问题 class="table-of-contents__link toc-highlight">常见问题</a></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class=footer__title>瑞莎</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://radxa.com/ target=_self rel="noopener noreferrer" class=footer__link-item>主页</a><li class=footer__item><a href=https://radxa.com/product target=_self rel="noopener noreferrer" class=footer__link-item>产品</a><li class=footer__item><a href=https://radxa.com/news target=_self rel="noopener noreferrer" class=footer__link-item>新闻</a><li class=footer__item><a href=https://radxa.com/services target=_self rel="noopener noreferrer" class=footer__link-item>服务</a><li class=footer__item><a href=https://radxa.com/community target=_self rel="noopener noreferrer" class=footer__link-item>社区</a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>支持</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://docs.radxa.com/ target=_blank rel="noopener noreferrer" class=footer__link-item>帮助文档<svg width=13.5 height=13.5 aria-hidden=true class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://forum.radxa.com/ target=_blank rel="noopener noreferrer" class=footer__link-item>支持论坛<svg width=13.5 height=13.5 aria-hidden=true class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://github.com/radxa target=_blank rel="noopener noreferrer" class=footer__link-item>开源仓库<svg width=13.5 height=13.5 aria-hidden=true class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>关于</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://radxa.com/about target=_blank rel="noopener noreferrer" class=footer__link-item>关于瑞莎</a><li class=footer__item><a href=https://radxa.com/about?#contact target=_blank rel="noopener noreferrer" class=footer__link-item>联系瑞莎</a><li class=footer__item><a href=https://radxa.com/about#distributors target=_blank rel="noopener noreferrer" class=footer__link-item>瑞莎分销商</a><li class=footer__item>
<div class=footer_box>
<div class=footer_center>
<div class=log></div>
<div class=iconBox>
<div class=men>Follow us</div>
<ul>
<li>
<a class="a_on1 iconpg" href=https://github.com/radxa></a>
</li>
<li>
<a class="a_on2 iconpg" href=https://discord.com/invite/mn73YNWdHY></a>
</li>
<li>
<a class="a_on3 iconpg" href=https://t.me/rockpi4></a>
</li>
<li class=a_on4_li>
<div class="a_on4 iconpg"></div>
<div class=vxMa></div>
</li>
<li class=a_on5_li>
<div class="a_on5 iconpg"></div>
<div class=qqMa></div>
</li>
</ul>
</div>
</div>
</div>
</ul></div></div></div></footer></div><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9ec90476edbd2f57',t:'MTc3NjIzNTg0MQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon='{"version":"2024.11.0","token":"47fce5d503594c12ac6e88b3a177c883","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>