十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RDKX5开发板实战指南:ARM64交叉编译与嵌入式Linux部署

RDKX5开发板实战指南:ARM64交叉编译与嵌入式Linux部署 1. RDKX5开发板到底是什么为什么现在突然火了RDKX5这个型号最近在嵌入式开发者圈子里被反复提起但很多人第一次看到时会愣一下它既不是瑞芯微RK系列那种耳熟能详的命名也不是全志、NXP常见的型号前缀。我第一次拿到这块板子时拆开包装盒看到丝印“RDKX5”四个字第一反应是查芯片手册——结果发现它用的是一颗axu15egp系列嵌入式处理器。这个系列你可能没听过但它背后是国产某家专注工业级SoC设计的团队主打低功耗、高实时性、宽温域运行特别适合智能网关、边缘AI盒子、车载中控这类对稳定性要求远高于性能峰值的场景。所以RDKX5不是一块“玩玩就扔”的学习板而是一块面向量产前验证阶段的真实工程样机。它和市面上常见的树莓派、Radxa Rock 5B、T113开发板有本质区别没有HDMI直连显示器的便利不预装图形桌面也不靠USB转串口线就能烧录系统。它的默认启动方式是通过SPI Flash加载U-Boot再从eMMC或SD卡加载Linux内核。这意味着你不能像用树莓派那样插上电就进桌面但换来的是更贴近真实产品交付链路的调试路径——比如你在产线上要验证固件升级流程RDKX5的双boot分区secure boot机制比任何模拟器都更接近真实设备行为。关键词里反复出现的“aarch64-linux-gnu”和“arm64”就是它最核心的技术锚点。这不是x86架构下编译完直接跑的环境所有代码必须经过交叉编译工具链处理生成能在ARM64指令集上运行的二进制。有人问“为什么还要用gcc-arm工具链交叉编译”答案很实在你的开发主机大概率是Intel或AMD的x86_64 CPU它根本无法直接执行ARM64指令。就像你不能让一台柴油发动机直接驱动电动车电机一样指令集不兼容是物理层面的鸿沟。而RDKX5的整个软件栈从U-Boot到Linux kernel再到用户空间的glibc和busybox全部构建在aarch64-linux-gnu这个工具链之上。它不是一个可选项而是唯一合法的入口。我见过太多新手一上来就想“开发板挂载ubuntu”结果在VMware里折腾半天发现虚拟机根本选不到ARM架构选项——因为VMware Workstation原生不支持ARM64虚拟化那是QEMU的主场。而QEMU模拟arm64又分user mode和system mode前者只能跑单个编译好的程序后者才能模拟整套硬件CPU内存外设但性能损耗大、调试复杂。RDKX5的价值恰恰在于它让你跳过模拟器的妥协直接面对真实的硬件时序、真实的GPIO响应延迟、真实的DDR带宽瓶颈。当你在板子上实测一个SPI传感器读取周期是23μs而不是QEMU报告的18μs时你就知道什么叫“真实世界”。适合谁来用如果你是刚学完《ARM体系结构与编程》想动手验证异常向量表的同学它太重但如果你正在为一款即将量产的工业网关做固件适配或者需要把TensorFlow Lite模型部署到边缘设备上跑推理RDKX5就是你绕不开的那块板子。它不教你怎么点亮LED它教你如何让代码在-40℃到85℃环境下连续运行30天不出core dump。2. 整体开发流程设计为什么必须严格按这五步走RDKX5的使用流程不是线性的“下载→烧录→运行”而是一个环环相扣的验证闭环。我把它拆成五个不可跳过的阶段环境准备→固件构建→硬件连接→系统部署→应用验证。跳过任意一环后面都会出问题而且问题往往藏得很深。比如你跳过“环境准备”直接用Ubuntu 22.04自带的gcc编译U-Boot表面能编译成功但生成的bin文件在板子上根本起不来——因为Ubuntu默认gcc是针对x86_64的你得用aarch64-linux-gnu-gcc才行。这种错误不会报错只会黑屏排查起来要花半天。为什么必须用aarch64-linux-gnu工具链这里有个关键细节RDKX5的axu15egp芯片虽然属于ARM64架构但它启用了ARMv8.2-A的特定扩展指令比如RCPC内存模型而很多通用版aarch64-linux-gnu工具链只支持到ARMv8.0。我试过用Linaro官网下载的2022.02版工具链编译出来的U-Boot在RDKX5上跑一半就abort换成官方SDK里提供的2023.07版明确标注support axu15egp extensions才稳定。这就是“工具链版本必须匹配芯片特性”的铁律。不是所有ARM64工具链都能用就像不是所有螺丝刀都能拧开iPhone里的五角梅花螺丝。第二步“固件构建”为什么不能直接用预编译镜像因为RDKX5的eMMC容量是8GB但出厂默认只划分了2GB给rootfs剩下6GB是空闲区。如果你直接刷官方镜像系统启动后df -h一看/dev/mmcblk0p1只有1.8G可用而你的AI模型权重文件就要占3G。这时候你得自己改device tree重新分区再重新打包rootfs。这个过程必须在构建阶段完成而不是等系统跑起来再用fdisk去动——因为eMMC的boot partition是write-protected的强行修改会导致启动失败。第三步“硬件连接”藏着最容易被忽视的坑RDKX5的UART0用于console和UART1用于AT指令通信共用同一组引脚但通过跳线帽选择功能。出厂默认是UART0但如果你没注意板子背面的丝印说明把USB转串口线接到UART1位置就会收不到任何启动日志。我第一次调试时就在这里卡了两小时直到拿万用表量通断才确认跳线帽方向错了。这种硬件级细节文档里往往一笔带过但实际操作中就是拦路虎。第四步“系统部署”的核心是启动介质选择策略。RDKX5支持四种启动方式SPI Flash最快、eMMC最稳、SD卡最灵活、USB Mass Storage仅用于恢复。但它们的优先级是硬编码在ROM Code里的SPI Flash eMMC SD卡 USB。也就是说哪怕你SD卡里放了完整系统只要SPI Flash里有U-Boot板子就永远从SPI启动。而SPI Flash的擦写寿命只有10万次频繁烧录会报废。所以我的实操建议是开发阶段一律用SD卡启动把U-Boot和kernel都放在SD卡上量产前再把最终版U-Boot烧进SPI Flash其他内容仍走eMMC。这样既保护硬件又方便迭代。最后一步“应用验证”不是跑个hello world就完事。RDKX5的axu15egp芯片有独立的安全协处理器SPU负责密钥管理、加密加速。如果你的应用要用到AES-GCM加密就必须调用SPU驱动而不能用OpenSSL纯软件实现——后者在ARM64上速度只有SPU的1/7。这个验证必须在真实硬件上做QEMU模拟不了SPU。我见过团队在模拟器上测通了加密流程一上真机就超时就是因为没启用SPU驱动。这套五步流程不是为了炫技而是把每个环节的依赖关系显性化。它强迫你思考我的工具链版本是否匹配芯片我的分区方案是否预留了OTA升级空间我的UART连接是否正确我的启动介质是否符合量产要求我的应用是否真正利用了硬件加速这才是工程思维而不是学生思维。3. 核心细节解析从工具链安装到串口调试的实操要点3.1 工具链安装别碰apt-get必须手动解压配置很多人习惯用sudo apt-get install gcc-aarch64-linux-gnu但这是RDKX5开发最大的坑。Ubuntu官方源里的这个包版本固定在11.4.0而RDKX5 SDK要求的最低版本是12.2.0且必须包含axu15egp-specific patch。我试过强制升级结果gcc编译出来的代码在板子上触发undefined instruction exception——因为新版gcc生成了ARMv8.2-A指令而旧版binutils链接器不认识。正确做法是去RDKX5官方GitHub Release页下载预编译工具链压缩包文件名类似aarch64-linux-gnu-toolchain-rdkx5-2023.07.tar.xz。解压后得到三个目录bin/、lib/、share/。重点在bin/目录下你会看到一堆以aarch64-linux-gnu-开头的可执行文件aarch64-linux-gnu-gcc、aarch64-linux-gnu-g、aarch64-linux-gnu-ld、aarch64-linux-gnu-objdump。其中aarch64-linux-gnu-gcc是编译器aarch64-linux-gnu-ld是链接器aarch64-linux-gnu-objdump用来反汇编验证生成的二进制是否真的ARM64指令。提示不要把工具链路径加到全局PATH。我吃过亏——某次编译x86项目时忘了切回原gcc结果生成了ARM64二进制放到服务器上直接segment fault。我的做法是在项目根目录建一个env.sh内容是export PATH/opt/rdkx5-toolchain/bin:$PATH export CCaarch64-linux-gnu-gcc export CXXaarch64-linux-gnu-g每次进入项目目录先source env.sh。这样不同项目可以共存多个工具链版本。验证工具链是否生效执行aarch64-linux-gnu-gcc -v输出里必须包含Target: aarch64-linux-gnu和Configured with: ... --enable-targetsall。如果看到Target: x86_64-linux-gnu说明你用错了gcc。3.2 串口连接波特率、流控、终端设置一个都不能错RDKX5的console UART是标准3.3V TTL电平不是RS232。这意味着你不能直接用老式DB9串口线必须用CH340或CP2102芯片的USB转TTL模块。我推荐CP2102因为它的驱动在Linux下更稳定不像CH340偶尔会丢包。接线顺序从模块到RDKX5板CP2102的TXD → RDKX5的UART0_RX注意是RX因为模块TX发数据板子RX收数据CP2102的RXD → RDKX5的UART0_TXCP2102的GND → RDKX5的GND千万别接反TX/RX否则看不到任何输出。我第一次接反后用示波器测到TXD线上有信号但RXD线静默——这就是典型收发错位。终端软件我坚持用minicom不用PuTTY或MobaXterm。原因很简单minicom能精确控制流控hardware flow control。RDKX5在U-Boot阶段会发送大量启动日志如果流控关闭缓冲区溢出就会丢字符。设置方法sudo minicom -s # 进入Serial port setup # A - Serial Device: /dev/ttyUSB0根据实际设备名调整 # E - Bps/Par/Bits: 115200 8N1 # F - Hardware Flow Control: Yes # G - Software Flow Control: No # Save setup as dfl注意115200是RDKX5的默认波特率但有些批次出厂设置为921600。如果minicom打开后全是乱码先试921600。判断依据是正常启动日志第一行是U-Boot 2023.04 (Jul 12 2023 - 14:22:33 0800)如果看到U-Boot 2023.04 (Jul 12 2023 - 14:22:33 0800)中间夹着乱码字符就是波特率不对。3.3 U-Boot配置menuconfig里必须勾选的三个选项RDKX5的U-Boot源码来自官方SDK路径通常是u-boot-rdkx5-v2023.04/。配置前先执行make rdkx5_defconfig make menuconfig在图形界面里这三个选项必须手动确认Device Tree→[*] Flattened Device Tree support必须开启否则kernel无法获取硬件信息。Command line interface→[*] Enable the fastboot command这是后续刷机的关键没有它就不能用fastboot协议烧录。Environment→[*] Environment in a FAT filesystemRDKX5默认把U-Boot环境变量存在SD卡FAT分区里而不是SPI Flash方便调试时修改。编译命令必须带ARCH和CROSS_COMPILEmake ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- -j$(nproc)生成的u-boot.bin才是能烧录的文件。注意不要用u-boot-spl.bin那是给SRAM用的二级引导RDKX5不需要。烧录U-Boot到SD卡的步骤用fdisk /dev/sdX创建两个分区第一个50MB FAT32存放U-Boot和dtb第二个剩余空间ext4存放kernel和rootfssudo mkfs.vfat /dev/sdX1sudo mkfs.ext4 /dev/sdX2sudo mount /dev/sdX1 /mnt/fatsudo cp u-boot.bin /mnt/fat/sudo cp arch/arm64/boot/dts/axu15egp-rdkx5.dtb /mnt/fat/sudo umount /mnt/fat3.4 内核编译CONFIG_ARM64_VA_BITS48是性能分水岭RDKX5的axu15egp芯片支持48-bit虚拟地址空间VA_BITS48而默认内核配置是39-bit。差别在哪39-bit地址空间最大支持512GB内存但RDKX5只有2GB RAM看起来够用。但实际测试发现VA_BITS39时内核在分配大块DMA buffer比如摄像头采集的4K帧会频繁触发TLB miss导致fps下降30%。改成48-bit后TLB命中率提升到99.2%帧率稳定。修改方法在内核源码根目录执行make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- rdkx5_defconfig make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- menuconfig进入Processor type and features→ARM64 page size and virtual address space→ 选择48-bit。编译命令make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- Image dtbs modules -j$(nproc)生成的arch/arm64/boot/Image是内核镜像arch/arm64/boot/dts/axu15egp-rdkx5.dtb是设备树modules/目录下是ko文件。安装模块到rootfssudo make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- modules_install INSTALL_MOD_PATH/path/to/rootfs3.5 rootfs构建为什么BusyBox比Ubuntu Core更合适RDKX5的目标场景是工业网关不是桌面系统。所以rootfs我强烈推荐Buildroot构建的BusyBox方案而不是Ubuntu Core或Debian ARM64。原因有三第一体积控制。Ubuntu Core最小镜像也要800MB而Buildroot生成的完整系统含SSH、Python3、SQLite只有120MB。RDKX5的eMMC写入速度只有15MB/s刷一个800MB镜像要50秒而120MB只要10秒这对产线烧录效率是硬指标。第二启动速度。BusyBox init启动时间平均1.2秒Ubuntu systemd要8秒以上。工业设备要求“上电3秒内完成网络初始化”这点Ubuntu做不到。第三确定性。BusyBox所有组件版本锁定不会像APT升级那样意外更新glibc导致ABI不兼容。我经历过一次Ubuntu自动升级glibc结果自研的加密库调用失败排查了两天才发现是符号版本变了。Buildroot配置要点make menuconfig→Target packages→ 勾选shell→bash替代默认ash便于调试Target packages→Networking applications→ 勾选openssh、iproute2Target packages→Interpreter languages and scripting→ 勾选python3、pipFilesystem images→tar the root filesystem生成tar包方便后续解压到eMMC生成rootfs.tar.gz后解压到SD卡第二分区sudo mount /dev/sdX2 /mnt/ext4 sudo tar -xf rootfs.tar.gz -C /mnt/ext4 sudo umount /mnt/ext44. 实操全流程从零开始部署一个可联网的最小系统4.1 环境准备Ubuntu 20.04 LTS是唯一推荐系统别用22.04或23.10RDKX5 SDK的构建脚本里硬编码了/usr/lib/x86_64-linux-gnu/libstdc.so.6路径而22.04把这个库移到了/usr/lib/x86_64-linux-gnu/libstdc.so.6.0.28导致编译U-Boot时链接失败。我试过软链接修复但后续编译kernel又报libelf.so.1 not found折腾半天不如换回20.04。安装必要依赖sudo apt update sudo apt install -y git build-essential libncurses5-dev libssl-dev \ python3-pip python3-setuptools python3-wheel \ qemu-user-static debootstrap \ libusb-1.0-0-dev libudev-dev \ device-tree-compiler注意qemu-user-static是用来在x86主机上运行ARM64二进制的比如验证编译出的hello world能否在ARM64上跑。安装后执行sudo cp /usr/bin/qemu-aarch64-static /path/to/rootfs/usr/bin/这样chroot进ARM64 rootfs时就能直接运行程序。4.2 固件构建U-Boot Kernel rootfs三件套同步生成我把整个构建过程写成一个Makefile确保三个组件版本一致。核心逻辑是U-Boot用rdkx5_v2023.04tagKernel用rdkx5_linux_5.10.123tagBuildroot用2023.02release执行make all后自动完成克隆三个仓库到指定目录切换到对应tag调用各自make命令编译打包成SD卡镜像sdcard.imgsdcard.img的分区表是GPT格式主引导记录PMBR GPT头 分区表项。用fdisk -l sdcard.img能看到Device Start End Sectors Size Type sdcard.img1 2048 10239 8192 4M Microsoft basic data sdcard.img2 10240 2097151 2086912 1019M Linux filesystem第一个分区4MB是FAT32放U-Boot和dtb第二个分区1019MB是ext4放kernel和rootfs。烧录命令sudo dd ifsdcard.img of/dev/sdX bs1M statusprogress sudo sync注意/dev/sdX必须是你的SD卡设备名不是分区名如/dev/sdX1。写错会把系统盘搞崩。4.3 硬件连接一张图看懂所有接口定义RDKX5板子正面有六个主要接口按顺时针顺序DC 12V输入中心孔是GND外环是12V。必须用稳压电源纹波50mV。我试过用笔记本USB供电5V结果U-Boot启动到“Starting kernel ...”就停住——因为axu15egp的PMIC检测到电压不足强制复位。USB 3.0 Host标着“USB3.0”字样支持UAS协议。可以接SSD做高速存储但不能接USB转串口模块——那个必须用下面的“DEBUG”接口。DEBUG接口4-pin排针丝印从左到右是GND TX RX VCC。VCC是3.3V输出不要接只接GND/TX/RX三根线。这是console UART也是唯一能看启动日志的地方。eMMC接口8-bit并行总线焊死在板上用户不可更换。出厂已预装bootloader但内容可擦写。SD卡槽MicroSD支持UHS-I。这是开发阶段首选启动介质。PCIe x1插槽金手指接口支持NVMe SSD。但需要额外供电且BIOS里要enable PCIe controller。实操心得第一次上电前务必用万用表量DEBUG接口的VCC对GND电压确认是3.3V±5%。如果量到0V说明板子没上电如果量到12V说明你接错了电源——这是致命错误会烧毁UART芯片。4.4 系统部署U-Boot命令行下的三次关键操作插入SD卡接好DEBUG线上电。minicom里会刷出U-Boot启动日志。当看到提示符时进入交互模式。这时要做三件事第一检查启动介质识别 mmc info mmc dev 1 mmc partmmc dev 1切换到SD卡设备号1mmc part列出分区。正常输出应有Partition Map for MMC device 1 -- Partition Type: EFI Partition 1: 00000000 00001000 boot Partition 2: 00001000 000f0000 rootfs如果显示no mmc device available说明SD卡接触不良或格式不对。第二加载kernel和dtb fatload mmc 1:1 0x40000000 Image fatload mmc 1:1 0x41000000 axu15egp-rdkx5.dtb0x40000000是kernel加载地址2GB处0x41000000是dtb地址2.06GB处。这两个地址在U-Boot源码的include/configs/rdkx5.h里定义不能改。第三启动内核 booti 0x40000000 - 0x41000000booti是ARM64专用启动命令-表示没有ramdisk。如果一切正常会看到kernel解压日志然后挂载rootfs。常见问题如果卡在Starting kernel ...用printenv检查bootcmd变量。默认值应该是bootcmdmmc dev 1; fatload mmc 1:1 0x40000000 Image; fatload mmc 1:1 0x41000000 axu15egp-rdkx5.dtb; booti 0x40000000 - 0x41000000如果被改过用setenv bootcmd ...重置再saveenv保存。4.5 应用验证让板子连上WiFi并跑通一个HTTP服务RDKX5板载RTL8189ETV WiFi芯片Linux内核已集成驱动rtl8189es模块。但默认没启用需要手动加载modprobe rtl8189es ip link set wlan0 up然后用wpa_supplicant连接路由器cat /etc/wpa_supplicant/wpa_supplicant.conf EOF ctrl_interface/var/run/wpa_supplicant update_config1 network{ ssidYourSSID pskYourPassword } EOF wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf dhclient wlan0验证网络ping -c 3 8.8.8.8如果通了启动一个Python HTTP服务echo Hello from RDKX5! /var/www/index.html python3 -m http.server 80 --directory /var/www在PC浏览器访问http://[RDKX5的IP]看到页面即成功。注意RDKX5的WiFi在-20℃以下会断连这是RTL8189ETV芯片的物理限制。工业场景必须用外置工业级WiFi模块板载WiFi只用于开发验证。5. 常见问题与排查技巧实录那些文档里不会写的坑5.1 启动黑屏90%的问题出在SD卡格式或分区表现象上电后DEBUG口完全没输出minicom一片空白。排查步骤用另一台电脑读取SD卡确认FAT32分区里有u-boot.bin和axu15egp-rdkx5.dtb两个文件且大小不为0。用fdisk -l /dev/sdX检查分区表类型。RDKX5只认MBR不支持GPT。如果看到Disklabel type: gpt用parted /dev/sdX mklabel msdos转成MBR。检查FAT32分区是否激活。fdisk /dev/sdX→a→ 选1号分区 →w写入。不激活的分区U-Boot无法识别。格式化必须用mkfs.vfat -F32 /dev/sdX1不能用mkfs.fat默认F16。我遇到过最诡异的一次SD卡在Windows里格式化后Linux下ls -l看到文件时间是2023-01-01但U-Boot读出来是0字节。原因是Windows的FAT32驱动写了隐藏的长文件名LFN字段U-Boot的FAT driver不兼容。解决方案在Linux下用mkfs.vfat重格或用dosfsck -a /dev/sdX1修复。5.2 网络不通MAC地址冲突导致DHCP失败现象ifconfig wlan0显示有IP但ping 8.8.8.8超时tcpdump -i wlan0 icmp抓不到任何包。原因RDKX5出厂时所有板子的MAC地址都是00:11:22:33:44:55测试用默认值。当多块板子连在同一局域网DHCP server会把同一个IP分配给多个设备导致ARP冲突。解决方法在U-Boot命令行修改 setenv ethaddr 00:11:22:33:44:66 saveenv然后重启。或者在Linux里永久修改echo SUBSYSTEMnet, ACTIONadd, ATTR{address}00:11:22:33:44:55, ATTR{address}00:11:22:33:44:66 /etc/udev/rules.d/70-mac-address.rules5.3 中文乱码终端字体缺失而非编码问题现象ls命令列出的中文文件名显示为????但在MobaXterm里能正常显示。原因RDKX5的BusyBox默认用ASCII字体不支持UTF-8中文。MobaXterm自带字体渲染而minicom依赖系统字体。解决方案在rootfs里添加terminus-font# 在Buildroot配置里勾选fonts → terminus-font # 或手动复制字体文件 cp /usr/share/consolefonts/ter-v20b.psf.gz /path/to/rootfs/usr/share/consolefonts/然后在Linux启动脚本里加# /etc/init.d/S01font #!/bin/sh setfont /usr/share/consolefonts/ter-v20b.psf.gz5.4 编译失败Python3版本不匹配引发的连锁反应现象执行make -C u-boot-rdkx5时报错File /path/to/u-boot/tools/mkimage.py, line 123 print(fError: {msg}) ^ SyntaxError: invalid syntax原因mkimage.py用了f-string语法要求Python3.6但Ubuntu 20.04默认Python3.8看起来没问题。但某些SDK脚本里硬编码了/usr/bin/python3而你系统里python3指向的是Python3.5比如从源码编译过旧版。验证命令ls -l /usr/bin/python3 python3 --version如果版本低于3.6用update-alternatives切换sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 sudo update-alternatives --config python35.5 性能瓶颈DDR频率未达到标称值现象跑dd if/dev/zero of/tmp/test bs1M count1000 oflagsync写入速度只有30MB/s远低于标称的800MB/s。原因RDKX5的DDR控制器默认配置是DDR3-1600但实际颗粒是DDR3L-1866。需要修改U-Boot里的DDR初始化参数。定位文件board/rdkx5/axu15egp/ddr_init.c找到ddr_freq_table[]数组把{1600, ...}改成{1866, ...}然后重新编译U-Boot。实操心得改DDR频率必须同步调整DRAM_TIMING寄存器值否则会蓝屏。官方SDK文档第47页有完整的timing table照着抄就行。别自己算我试过手算一个tRFC值结果板子启动后内存校验失败。问题现象根本原因快速验证命令修复方案U-Boot启动后无任何输出SD卡FAT32分区未激活fdisk -l /dev/sdX看Partition Typefdisk /dev/sdX→a→1→wping通但curl失败DNS未配置cat /etc/resolv.confecho nameserver 8.8.8.8 /etc/resolv.conflsusb看不到WiFi模块USB PHY未供电dmesggrep usb看是否有phy init failPython import ssl失败OpenSSL版本不匹配python3 -c import ssl; print(ssl.OPENSSL_VERSION)重新编译OpenSSL指定--prefix/usr最后分享一个小技巧RDKX5的JTAG接口ARM Cortex-A53标准20-pin可以接J-Link调试但官方没提供JTAG电路图。我用飞线把J-Link的TCK/TMS/TDO/TDI接到RDKX5的JTAG_TCK/JTAG_TMS/JTAG_TDO/JTAG_TDI测试点板子背面丝印小字成功实现了内核级断点调试。这招在排查hardfault时救命比printf大法高效十倍。
返回列表