NXP MCU 技术论坛
直播中

李继明

8年用户 1170经验值
私信 关注
[问答]

如何在Ubuntu 24.04上运行5.4.47版本?

我正在为我们自己的 imx8mm 板升级我们的构建机器。我们仍然使用 5.4.47 版本作为我们的 BSP 基础,并在 Ubuntu 18.04 上运行我们的构建

# Used reporepo init -u https://github.com/nxp-imx/imx-manifest.git -b imx-linux-zeus -m imx-5.4.47-2.2.0.xml

由于 ubuntu 18.04 不再是最新的,因此我用 ubuntu 24.04 设置了一台新机器。在遇到一些困难之后,我能够为 SDK BSP 版本 6.6.52 构建 yocto 包。

# Used repo for newes BSPrepo init -u https://github.com/nxp-imx/imx-manifest.git -b imx-linux-scarthgap -m imx-6.6.52-2.2.0.xml

但是,由于我们已经售出的产品使用版本 5.4.47,因此我们需要使用 SDK 5.4.47 构建新的二进制文件。
第一步,我尝试使用 ubuntu 18.04 中的 SDK,但最终导致构建错误,在 ubuntu 24.04 上缺少库,因此 SDK 似乎对构建系统本身有很强的依赖性。
下一步,我尝试在 Ubuntu 24.04 上为 5.4.47 构建 Yocto 包,但并没有真正工作。第一个问题是 Python 版本。您肯定需要使用 2.7 和 3.9 版本,它们不能直接使用。通过使用 pyenv,可以解决 Python 问题。
现在我最终遇到了 m4-native 包的构建错误,这是我迄今为止必须的。

ERROR: Task (/home/starke/imx-yocto-bsp-5.4.47/sources/poky/meta/recipes-devtools/m4/m4-native_1.4.18.bb:do_compile) failed with exit code '1'

问题是:在新的 Ubuntu 5.4.47 上尝试构建 SDK 版本 24.04 是否正确,或者旧 Ubuntu 机器的 SDK 也应该工作,我只需要弄清楚如何安装缺失的库?
另外,如果有人知道如何在 Ubuntu 24.04 上运行 5.4.47 版本,我对它是如何工作的非常感兴趣。

回帖(1)

h1654155275.5748

2025-4-15 18:10:09

为了在Ubuntu 24.04上成功构建基于5.4.47内核的旧版BSP,同时保持系统兼容性,以下是分步解决方案:


方法一:使用Docker容器隔离构建环境(推荐)


此方法通过容器技术隔离旧版依赖,避免宿主系统升级带来的兼容问题。




  1. 安装Docker


    sudo apt update && sudo apt install docker.io
    sudo usermod -aG docker $USER  # 将当前用户加入docker组
    newgrp docker  # 刷新组权限



  2. 创建Dockerfile


    FROM ubuntu:18.04
    ENV DEBIAN_FRONTEND=noninteractive

    # 安装基础依赖
    RUN apt update && apt install -y
       repo
       git
       python3
       python2.7
       gawk
       wget
       git-core
       diffstat
       unzip
       texinfo
       gcc-multilib
       build-essential
       chrpath
       socat
       cpio
       python3-pip
       python3-pexpect
       xz-utils
       debianutils
       iputils-ping
       python3-git
       python3-jinja2
       libegl1-mesa
       libsdl1.2-dev
       pylint3
       xterm
       curl

    # 设置工作目录
    WORKDIR /opt/yocto



  3. 构建并运行容器


    docker build -t imx-builder:18.04 .
    docker run -it --rm -v $(pwd):/opt/yocto imx-builder:18.04 /bin/bash



  4. 容器内初始化旧版BSP


    cd /opt/yocto
    repo init -u https://github.com/nxp-imx/imx-manifest.git -b imx-linux-zeus -m imx-5.4.47-2.2.0.xml
    repo sync -j$(nproc)
    # 根据文档配置和构建
    source setup-environment build
    bitbake imx-image-core



方法二:手动调整宿主系统环境


若无法使用容器,可尝试在Ubuntu 24.04上直接适配旧工具链。




  1. 安装旧版编译工具


    sudo apt install gcc-8 g++-8 -y
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 8
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 8



  2. 配置Python兼容性



    • 若BSP需要Python 2.7:
      sudo apt install python2.7
      curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
      python2.7 get-pip.py




  3. 处理依赖库问题



    • 安装旧版库或创建符号链接:
      sudo apt install libssl1.0-dev  # 示例:旧版OpenSSL




  4. 修复Yocto配置



    • 编辑conf/local.conf,添加兼容性配置:
      # 强制使用较旧的编译器(如有必要)
      # ASSUME_PROVIDED += "gcc-native"
      # 指定兼容的SDK路径
      # SDK_PATH = "/opt/fsl-imx-x11/5.4.47/sysroots/x86_64-pokysdk-linux"




  5. 处理构建错误



    • GCC版本问题:若遇到dangling-pointer等警告导致失败,禁用相关编译选项:
      # 在对应recipe的.bb文件中添加
      CFLAGS:remove = "-Werror=dangling-pointer"

    • Python3语法错误:使用2to3工具转换旧脚本或手动修复。




方法三:混合使用新版BSP的组件


若需部分兼容,尝试将旧版内核移植到新版Yocto结构中。




  1. 创建自定义层


    bitbake-layers create-layer meta-custom
    # 将旧版内核代码复制到该层



  2. 修改内核Recipe



    • recipes-kernel/linux中创建新版recipe,指向5.4.47源码:
      inherit kernel
      SRC_URI = "git://github.com/nxp-imx/linux-imx.git;protocol=https;branch=imx_5.4.47_2.2.0"
      SRCREV = "xxxxxxxxxxxxxxxxxxxx"




  3. 配置设备树和驱动



    • 确保新版Yocto中的设备树和驱动与旧内核兼容,必要时回退相关组件。




注意事项



  • 定期清理构建缓存rm -rf tmp/ sstate-cache/ 避免残留文件导致异常。

  • 查阅NXP官方资源:检查NXP社区是否有针对Ubuntu 24.04的补丁。

  • 备份宿主环境:使用apt-mark hold锁定关键软件包版本,防止意外升级破坏环境。


通过以上任一方法,应能在Ubuntu 24.04上成功构建基于5.4.47内核的BSP。推荐优先使用Docker方案以保持环境纯净。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分