嵌入式Linux开发者Unix环境搭建避坑指南
|
去年六月份,我帮团队搭建嵌入式Linux开发环境时,踩了个大坑——用Ubuntu 20.04默认源安装的交叉编译工具链,编译出的内核在ARM板子上死活启动不了,日志卡在"Starting kernel...",查了三天才发现是工具链版本(gcc-arm-9.2-2020.02)和板子厂商提供的U-Boot不兼容,换回gcc-arm-8.3-2019.03才解决。这事儿让我意识到,Unix环境搭建的坑,90%藏在"默认配置"里。 新手常犯的错,是直接用系统自带的包管理器装工具链。比如CentOS 7的yum源里只有gcc-4.8.5,而嵌入式开发现在普遍需要gcc-7以上——这版本差三年,编译出来的二进制能跑才怪。我试过用Devtoolset-8在CentOS上装gcc-8.3,结果因为glibc版本冲突,连"hello world"都编译不过,最后不得不重装Ubuntu 18.04,就为它自带的gcc-7.5更"稳"。 说个更离谱的案例:有个开发者用MacOS的Homebrew装交叉编译工具,结果因为Mac的case-insensitive文件系统,导致内核配置文件里的"CONFIG_FOO=y"和"config_foo=Y"被系统合并成同一文件,编译时直接报错"duplicate symbol"。他折腾了两周,最后换了个Linux虚拟机才搞定——这哪是技术问题?分明是系统特性坑人。 我主观判断:嵌入式Linux开发的环境搭建,必须"反默认"。比如别用系统自带的Python(版本太旧),改用pyenv装3.8+;别用apt/yum装Qt,直接去官网下预编译包;甚至连终端模拟器都要挑——我试过用iTerm2(Mac)和Terminator(Linux)同时连开发板,前者因为SSH延迟问题,导致vim编辑文件时经常丢字符,后者就没这问题。这些细节,没人会在教程里写,但能省你80%的调试时间。
文章配图,仅供参考 新技术带来的坑更隐蔽。比如现在流行用Docker搭开发环境,我试过用官方提供的"arm32v7/ubuntu"镜像,结果发现镜像里的/lib/ld-linux.so.3是32位的,而我的开发板需要64位库,最后不得不自己编译一个交叉编译的Docker镜像,光Dockerfile就改了20版。这哪是"避坑"?简直是"填坑"。下一步建议:先确定目标板子的硬件参数(CPU架构、内核版本、工具链要求),再根据这些选系统——比如ARM Cortex-A53就用Ubuntu 18.04+gcc-7.5,RISC-V就用Debian 10+gcc-10.2。别信"通用教程",嵌入式没有通用,只有"刚好能用"。 局限:我这套经验主要针对ARM和RISC-V,x86的嵌入式开发(比如工业控制板)可能完全不同——那些板子常用Yocto或Buildroot,环境搭建的坑又是另一套逻辑。所以,别全信我,多试,多踩,多记。 (编辑:云计算网_梅州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



浙公网安备 33038102330479号