LubanCat RK3588 实时 Linux 开发(三):SDK 环境准备与 flex、bison、LZ4 依赖排查
摘要从主机依赖、AArch64 交叉编译器和 LZ4 版本三个方面建立可重复的 LubanCat 内核构建环境。适用对象在 Ubuntu 主机上构建 LubanCat Linux SDK 的开发者。本文只准备构建环境不会修改目标板系统。文章目录本篇要解决什么问题排错原则一、构建链路是什么二、安装主机依赖三、确认交叉编译器四、确认 lz4五、构建前快速自检六、做一个“一键构建前自检”七、三个高频误区误区 1交叉编译器能运行环境就完整误区 2SDK 自带 lz4 能执行脚本就一定能找到误区 3在目标板安装 flex/bison 可以解决主机构建错误八、本文验收清单小结工作流实测截图专栏导航参考资料本篇要解决什么问题很多内核编译失败并不是源码错误而是开发主机工具链不完整。LubanCat SDK 构建同时涉及两类程序一类在 x86_64 开发主机上运行例如flex、bison、lz4另一类才是用 AArch64 交叉编译器生成给 RK3588 运行的内核和模块。先把这两类工具分开排错会简单很多类型运行位置典型工具出错后的表现Host 工具Ubuntu 开发主机flex、bison、bc、dtc、lz4构建脚本在配置/检查阶段直接失败Target 工具链开发主机执行生成 ARM64 目标aarch64-none-linux-gnu-gcc内核、模块编译失败或架构错误目标板运行环境LubanCatmodprobe、ip、uname只用于安装和运行验证不负责交叉编译排错原则先确认“命令是否存在”再确认“版本是否正确”最后确认“PATH 是否指向你以为的那个程序”。这比一上来修改内核源码更有效。一、构建链路是什么完整的 LubanCat SDK 可以处理内核、设备树、rootfs 和镜像本文使用的kerneldeb目标只构建内核相关 DEB。内核使用 AArch64 交叉编译器但 Kconfig 解析器和压缩检查工具运行在开发主机上因此“交叉编译器正常”并不代表构建环境完整。二、安装主机依赖Ubuntu 主机可执行sudoaptupdatesudoaptinstall-y\build-essential flex bisonbc\libssl-dev libelf-dev libncurses-dev dwarves\device-tree-compiler cpiorsyncu-boot-tools其中flex生成 Kconfig 词法分析器bison生成 Kconfig 语法分析器bc、libelf-dev和dwarves常用于内核构建libncurses-dev用于menuconfigdtc、cpio、rsync参与设备树和 initramfs 处理。缺少flex或bison时典型错误是/bin/sh: 1: flex: not found /bin/sh: 1: bison: not found三、确认交叉编译器SDK$HOME/lubancat/LubanCat_SDKTOOLCHAIN$SDK/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin$TOOLCHAIN/aarch64-none-linux-gnu-gcc--version不要混用主机 GCC 和目标 AArch64 GCC前者编译 Kconfig 主机工具后者编译 ARM64 内核和模块。四、确认 lz4SDK 的内核检查脚本会调用lz4。先检查命令是否存在以及版本command-vlz4 lz4--version如果系统版本过旧可以使用 SDK 已生成的工具SDK$HOME/lubancat/LubanCat_SDK$SDK/output/host-tools/lz4/lz4--versionexportPATH$SDK/output/host-tools/lz4:$PATHcommand-vlz4 lz4--version只运行 SDK 内置二进制的--version并不能让check-kernel.sh自动找到它还要像上面一样把所在目录临时加入PATH。也可以按 SDK 提示安装 LZ4 v1.9.4。安装后再次执行command -v lz4避免仍然调用旧路径。五、构建前快速自检test-x$TOOLCHAIN/aarch64-none-linux-gnu-gcccommand-vmakeflex bisonbcdtc cpiorsynclz4--version上述命令应在同一个准备构建的终端中执行。若test或command -v返回非零先修复环境不要继续分析内核源码。六、做一个“一键构建前自检”为了避免每次漏掉某个工具可以在 SDK 根目录临时执行下面的检查脚本#!/usr/bin/env bashset-uSDK${SDK:-$HOME/lubancat/LubanCat_SDK}TOOLCHAIN$SDK/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/binfailed0forcmdinmakeflex bisonbcdtc cpiorsynclz4;doifcommand-v$cmd/dev/null21;thenprintf[OK] %-10s %s\n$cmd$(command-v$cmd)elseprintf[MISS] %s\n$cmdfailed1fidoneiftest-x$TOOLCHAIN/aarch64-none-linux-gnu-gcc;thenecho[OK] AArch64 cross compiler$TOOLCHAIN/aarch64-none-linux-gnu-gcc--version|head-n1elseecho[MISS] AArch64 cross compilerfailed1fiexit$failed这个脚本的意义不是替代 SDK而是把“环境问题”提前暴露。只要它返回非零就先解决主机环境不要急着分析内核源代码。七、三个高频误区误区 1交叉编译器能运行环境就完整不对。Kconfig、设备树、压缩和打包过程中会调用大量主机工具。误区 2SDK 自带 lz4 能执行脚本就一定能找到不对。check-kernel.sh通过 PATH 查找命令因此还要确认command -v lz4指向期望路径。误区 3在目标板安装 flex/bison 可以解决主机构建错误如果build.sh是在开发主机执行缺失依赖就必须在开发主机修复。八、本文验收清单主机make/flex/bison/bc/dtc/cpio/rsync均可用lz4 --version可正常执行PATH 指向明确AArch64 交叉编译器存在且可执行明确区分 host 工具和 target 工具链自检失败时不进入下一步kerneldeb。小结构建错误应先按“缺少命令—命令版本—路径优先级”的顺序排查。只有依赖完整后日志中的错误才真正反映内核或设备树问题。工作流实测截图图1首次执行 kerneldeb 时的真实依赖错误说明应先补齐主机工具。图2SDK 交叉编译器和 host-tools/lz4 自检输出。专栏导航专栏LubanCat RK3588 实时 Linux 开发实战第 3/18 篇上一篇LubanCat RK3588 实时 Linux 开发二picocom 串口调试完整指南下一篇LubanCat RK3588 实时 Linux 开发四构建 Linux 6.1 PREEMPT_RT 内核与 DEB 包参考资料Linux 内核构建依赖说明Kbuild 文档文中的版本号、接口名、设备地址和测试数据均应以自己的板卡实测为准引用命令前请先确认当前 SDK、内核和启动布局。标签LubanCat SDKLinux内核交叉编译flexbison
上一篇/下一篇内容由系统自动关联
返回资讯列表 →