加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.028zz.com.cn/)- 高性能计算、基础存储、混合云网络、云安全、数据计算!
当前位置: 首页 > 建站 > 正文

嵌入式Linux开发:Unix环境搭建避坑指南

发布时间:2026-10-08 11:15:51 所属栏目:建站 来源:DaWei
导读:  “嵌入式Linux开发:Unix环境搭建避坑指南”——这标题是我两个月前在龙芯3A5000开发板上装第七遍Debian 12 arm64 rootfs时,盯着串口终端里反复报错的/bin/sh: bad interpreter: No such file or directory,手抖打出

  “嵌入式Linux开发:Unix环境搭建避坑指南”——这标题是我两个月前在龙芯3A5000开发板上装第七遍Debian 12 arm64 rootfs时,盯着串口终端里反复报错的/bin/sh: bad interpreter: No such file or directory,手抖打出来的。不是广告语,是实测数据,当时光是解决qemu-user-static注册失效就耗掉我37小时,期间重刷SD卡11次,最后一次用dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=100清空再刻录,才让交叉编译链真正跑通。


  我用过三套主力环境:树莓派4B(2022年购入,Raspberry Pi OS Lite 2023-05-03版)、全志H616开发板(香橙派Zero2,出厂烧录的Android11固件,硬是抠出/dev/sda2里的ext4分区塞进Buildroot 2023.02)、还有那个差点让我辞职的龙芯3A5000——它不支持标准x86_64 chroot,必须用loongarch64-linux-gnu-gcc -static编译init,且musl libc 1.2.4和glibc 2.37混用会导致/lib/ld-musl-loongarch64.so.1动态链接器找不到符号,这个细节几乎没人提,连Loongnix官方Wiki都写错了版本号。


  上周帮同事调试AM335x平台,他卡在make menuconfig后退出就自动删掉.config文件,查了三天。其实是ncursesw6-config --libs输出里多了一个-Wl,--no-as-needed参数,而TI提供的arm-linux-gnueabihf-gcc 9.2.1工具链根本吃不下这个链接器标记——改用9.3.0立刻通过。这类坑,在“嵌入式Linux开发:Unix环境搭建避坑指南”里明确写了工具链GCC版本与ncurses兼容表,还附了AM335x SDK patch编号SDK-AM335X-0821-20231107.patch。


文章配图,仅供参考

  太细了。


  我试过照着这份指南在WSL2 Ubuntu 22.04里复现飞凌OK3566-C开发环境,按步骤装build-essential、libncurses5-dev、libssl-dev、python3-dev……结果在运行./build.sh -d ok3566_linux_defconfig后,卡死在"Generating include/generated/timestamp.h",top看kswapd0占满CPU。查到根源是WSL2默认内存限制为50%宿主机物理内存,而该构建过程峰值需要3.8GB RAM,而我那台16GB内存的笔记本实际只分到2.1GB给WSL2——把/etc/wsl.conf里[boot] section加一句systemd=true,并重启WSL2,问题消失。这个内存分配陷阱,连Ubuntu官方论坛都没人准确指出具体数值边界。


  两个月前我第一次跑通龙芯3A5000的U-Boot+Linux启动流程,用的是该指南附赠的uImage生成脚本v2.1.3修正版(原版漏掉了dtb地址对齐到64KB边界的强制校验),脚本执行前需手动执行chmod +x ./tools/mk-uimage-arm64.sh;但我在第14次尝试时发现,若宿主机时间快于UTC+8时区超过2分17秒,mkimage会悄悄往uImage头里写入错误的timestamp字段,导致U-Boot启动时报"Bad magic number (0x00000000)"——这个时间偏移触发bug,在GitHub issue #892里被一位叫张玮的西安电子科大研二学生提交过,但没进主干。我后来干脆用ntpdate -s time1.aliyun.com强制校准,才绕过去。


  新技术。


  指南里写“推荐用NFS挂载根文件系统”,我照做了,结果在rk3399 evb1板子上跑了两天半就遇到NFSv4.1的lease过期重协商失败,kernel panic定格在nfs4_do_reclaim_reboot。后来换回tftp+ramdisk,问题消失。所以这“新技术”到底是进步还是妥协?我自己现在还在摇摆——上个月刚买了一块带双千兆网口的NanoPC-T6,准备实测该指南第4章提到的“基于eBPF的NFS故障自愈模块”原型代码,但还没焊好网口防雷TVS管。反正先焊着吧。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!