You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20.04下Braiins OS源码多方式构建失败求助

问题描述

目前无法从源码构建Braiins OS。先后尝试了运行bb.py、遵循官方Docker构建指南操作、使用cargo编译bosminer、在firmware_latest和bos_release分支直接调用LEDE Makefile四种方式,所有方法均执行失败,出现的错误与异常信息如下:

1. 运行Docker构建器

参考操作指南为官方提供的构建文档

执行的命令

  • cd braiins/braiins-os
  • ./docker/build-docker-container.sh
  • ./docker/build-in-docker.sh zynq-am1-s9

错误与异常信息

INFO:root:Preparing LEDE build system...
-- prepare:default_config
.  prepare:config
scripts/config/conf: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.27' not found (required by scripts/config/conf)
/src/braiins-os/build/zynq/lede/include/toplevel.mk:114: recipe for target 'defconfig' failed
make: *** [defconfig] Error 1
TaskError - taskid:prepare:config
PythonAction Error
Traceback (most recent call last):
  File "/home/build/.local/lib/python3.5/site-packages/doit/action.py", line 424, in execute
    returned_value = self.py_callable(*self.args, **kwargs)
  File "/src/braiins-os/builder/dodo.py", line 50, in <lambda>
    task.update({'actions': [lambda: next(generator, None)]})
  File "/src/braiins-os/builder/builder.py", line 1020, in prepare_config_doit
    self._run('make', 'defconfig')
  File "/src/braiins-os/builder/builder.py", line 565, in _run
    process = subprocess.run(args, input=input, stdout=stdout, check=True, cwd=cwd, env=env, preexec_fn=init)
  File "/usr/lib/python3.5/subprocess.py", line 398, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '('make', 'defconfig')' returned non-zero exit status 2
INFO:root:Preparing LEDE build system..
.  prepare:config
scripts/config/conf: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.27' not found (required by scripts/config/conf)
/src/braiins-os/build/zynq/lede/include/toplevel.mk:114: recipe for target 'defconfig' failed
make: *** [defconfig] Error 1
TaskError - taskid:prepare:config
PythonAction Error
Traceback (most recent call last):
  File "/home/build/.local/lib/python3.5/site-packages/doit/action.py", line 424, in execute
    returned_value = self.py_callable(*self.args, **kwargs)
  File "/src/braiins-os/builder/dodo.py", line 50, in <lambda>
    task.update({'actions': [lambda: next(generator, None)]})
  File "/src/braiins-os/builder/builder.py", line 1020, in prepare_config_doit
    self._run('make', 'defconfig')
  File "/src/braiins-os/builder/builder.py", line 565, in _run
    process = subprocess.run(args, input=input, stdout=stdout, check=True, cwd=cwd, env=env, preexec_fn=init)
  File "/usr/lib/python3.5/subprocess.py", line 398, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '('make', 'defconfig')' returned non-zero exit status 2
INFO:root:Start cleaning LEDE build directory...'
scripts/config/mconf: error while loading shared libraries: libncursesw.so.6: cannot open shared object file: No such file or directory
/src/braiins-os/build/zynq/lede/include/toplevel.mk:127: recipe for target 'menuconfig' failed
make[1]: *** [menuconfig] Error 127
make[1]: Leaving directory '/src/braiins-os/build/zynq/lede'
/src/braiins-os/build/zynq/lede/include/toplevel.mk:94: recipe for target '.config' failed
make: *** [.config] Error 2
Traceback (most recent call last):
  File "./bb.py", line 370, in <module>
    main(sys.argv[1:])
  File "./bb.py", line 364, in main
    args.func()
  File "./bb.py", line 119, in clean
    builder.clean(purge=self._args.purge)
  File "/src/braiins-os/builder/builder.py", line 1109, in clean
    self._run('make', 'clean')
  File "/src/braiins-os/builder/builder.py", line 565, in _run
    process = subprocess.run(args, input=input, stdout=stdout, check=True, cwd=cwd, env=env, preexec_fn=init)
  File "/usr/lib/python3.5/subprocess.py", line 398, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '('make', 'clean')' returned non-zero exit status 2

为简化日志内容,已移除执行成功的步骤,如有需要可提供完整日志。

已尝试的解决步骤

  • 安装了lib32z1与libncurses5依赖,未解决问题

2. 运行bb.py构建

添加日志参数开启调试模式后,发现bb.py会调用位于zynq/lede路径下存在问题的Makefile。

执行的命令

  • python3.5 bb.py --log debug build

错误与异常信息

DEBUG:root:Run 'make defconfig' in '/home/max/rust/braiins/braiins-os/build/zynq/lede'
#
# configuration written to .config
#
-- prepare:public_key
-- prepare:secret_key
INFO:root:Start building LEDE...'
DEBUG:root:Run 'make -j4' in '/home/max/rust/braiins/braiins-os/build/zynq/lede'
 make[1] world
 make[2] tools/install
 make[2] package/cleanup
 make[3] -C tools/flock compile
 make[3] -C tools/flock install
 make[3] -C tools/sed compile
 make[3] -C tools/sed install
 make[3] -C tools/xz compile
 make[3] -C tools/patch compile
 make[3] -C tools/tar compile
 make[3] -C tools/xz install
 make[3] -C tools/patch install
 make[3] -C tools/tar install
 make[3] -C tools/m4 compile
 make[3] -C tools/expat compile
 make[3] -C tools/pkg-config compile
 make[3] -C tools/sstrip compile
 make[3] -C tools/make-ext4fs compile
 make[3] -C tools/patch-image compile
 make[3] -C tools/scons compile
 make[3] -C tools/mtools compile
 make[3] -C tools/lzma compile
 make[3] -C tools/squashfs4 compile
 make[3] -C tools/pkg-config install
 make[3] -C tools/expat install
 make[3] -C tools/sstrip install
 make[3] -C tools/make-ext4fs install
make -r world: build failed. Please re-run make with -j1 V=s to see what's going on
make: *** [/home/max/rust/braiins/braiins-os/build/zynq/lede/include/toplevel.mk:200: world] Error 1
Traceback (most recent call last):
  File "bb.py", line 370, in <module>
    main(sys.argv[1:])
  File "bb.py", line 364, in main
    args.func()
  File "bb.py", line 139, in build
    builder.build(targets=self._args.target)
  File "/home/max/rust/braiins/braiins-os/builder/builder.py", line 1159, in build
    self._run(args, path=path, init=partial(os.umask, 0o0022))
  File "/home/max/rust/braiins/braiins-os/builder/builder.py", line 565, in _run
    process = subprocess.run(args, input=input, stdout=stdout, check=True, cwd=cwd, env=env, preexec_fn=init)
  File "/home/max/.anaconda3/envs/bos/lib/python3.5/subprocess.py", line 398, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['make', '-j4']' returned non-zero exit status 2

3. 手动调用LEDE Makefile

通过bb.py的--log debug参数确认braiins/braiins-os/build/zynq/lede路径下的Makefile执行异常,因此手动执行该Makefile查看详细日志。

执行的命令

  • cd braiins/braiins-os/build/zynq/lede
  • make -j1 V=s

错误与异常信息

freadahead.c: In function 'freadahead':
freadahead.c:91:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
   91 |  #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
      |   ^~~~~
make[7]: *** [Makefile:1837: freadahead.o] Error 1
make[7]: Leaving directory '/home/max/rust/braiins/braiins-os/build/zynq/lede/build_dir/host/m4-1.4.17/lib'
make[6]: *** [Makefile:1602: all] Error 2
make[6]: Leaving directory '/home/max/rust/braiins/braiins-os/build/zynq/lede/build_dir/host/m4-1.4.17/lib'
make[5]: *** [Makefile:1506: all-recursive] Error 1
make[5]: Leaving directory '/home/max/rust/braiins/braiins-os/build/zynq/lede/build_dir/host/m4-1.4.17'
make[4]: *** [Makefile:1461: all] Error 2
make[4]: Leaving directory '/home/max/rust/braiins/braiins-os/build/zynq/lede/build_dir/host/m4-1.4.17'
make[3]: *** [Makefile:29: /home/max/rust/braiins/braiins-os/build/zynq/lede/build_dir/host/m4-1.4.17/.built] Error 2
make[3]: Leaving directory '/home/max/rust/braiins/braiins-os/build/zynq/lede/tools/m4'
make[2]: *** [tools/Makefile:148: tools/m4/compile] Error 2
make[2]: Leaving directory '/home/max/rust/braiins/braiins-os/build/zynq/lede'
make[1]: *** [tools/Makefile:145: /home/max/rust/braiins/braiins-os/build/zynq/lede/staging_dir/target-arm_cortex-a9+neon_musl-1.1.16_eabi/stamp/.tools_install_yynyyyyynyyyyynyynnyyyynyyyyyyyyyyyyyyynyynynnyyynnny] Error 2
make[1]: Leaving directory '/home/max/rust/braiins/braiins-os/build/zynq/lede'
make: *** [/home/max/rust/braiins/braiins-os/build/zynq/lede/include/toplevel.mk:200: world] Error 2

已尝试的解决步骤

  • 安装了m4尝试解决freadahead.c报错,未生效

4. 使用cargo构建Rust组件

不指定编译目标时,Rust代码可在本地机器正常编译,但指定目标为arm-unknown-linux-musleabi时编译完全失败。

执行的命令

  • 下载了arm-linux-musleabihf-cross交叉编译工具链
  • CC=/home/max/Downloads/arm-linux-musleabihf-cross/bin/arm-linux-musleabihf-gcc cargo build --release --target arm-unknown-linux-musleabi

错误与异常信息

error: linker `arm-openwrt-linux-muslgnueabi-gcc` not found
  |
  = note: No such file or directory (os error 2)

error: could not compile `bosminer-erupter` due to previous error
warning: build failed, waiting for other jobs to finish...
error: build failed

运行环境

  • OS: Ubuntu 20.04.3 LTS
  • cargo: cargo 1.60.0 (d1fd9fe 2022-03-01)
  • rustup: rustup 1.24.3 (ce5817a94 2021-05-31)
  • python: Python 3.5.6 :: Anaconda, Inc.

解决方案

所有报错归因为三个核心问题:官方Docker镜像版本过旧与新宿主系统不兼容、LEDE内置源码版本与高版本GCC不兼容、Rust交叉编译链接器配置不匹配,按以下步骤操作即可全部解决:

修复Docker构建依赖问题

官方默认构建脚本生成的镜像基于低版本Ubuntu,缺少GLIBC_2.27和libncursesw6依赖,直接修改Docker配置即可:

  1. 打开docker/Dockerfile,将基础镜像替换为ubuntu:20.04
  2. 在依赖安装列表中添加libc6、libncursesw6两个包,保留原有python3.5、编译工具链等依赖
  3. 重新构建Docker镜像后再执行容器内构建脚本,即可解决GLIBC版本不匹配、libncursesw.so.6缺失的报错

修复本地LEDE编译的m4报错

freadahead.c报错是因为LEDE内置的m4 1.4.17版本与GCC 9及以上版本不兼容,安装系统级m4无法解决该问题,需要替换LEDE编译链使用的m4版本:

  1. 进入braiins/braiins-os/build/zynq/lede/tools/m4目录
  2. 修改目录下的Makefile,将PKG_VERSION字段值从1.4.17改为1.4.19,同步更新PKG_HASH为m4 1.4.19版本对应的官方校验值
  3. 删除build_dir/host目录下残留的m4-1.4.17旧源码目录,重新执行编译即可跳过该报错
    注意:本地编译不要使用Anaconda虚拟环境,Anaconda自带的旧版GLIBC会干扰LEDE构建工具链的运行,切换到系统原生Python 3.5环境执行bb.py即可

修复Rust交叉编译链接器报错

该报错是因为cargo的目标架构配置默认查找OpenWrt命名规则的交叉编译器,和已下载的musl工具链命名不匹配,不需要额外找对应名称的编译器,直接修改cargo配置即可:

  1. 在项目根目录新建.cargo/config.toml文件
  2. 在文件中添加以下配置,将链接器路径替换为本地实际的工具链gcc路径:
[target.arm-unknown-linux-musleabi]
linker = "/home/max/Downloads/arm-linux-musleabihf-cross/bin/arm-linux-musleabihf-gcc"
  1. 保存配置后重新执行cargo构建命令即可正常编译。

内容的提问来源于stack exchange,提问作者Navid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:54:33