使用docker搭建嵌入式Linux开发环境

2025-08-30 14:50

本文主要是介绍使用docker搭建嵌入式Linux开发环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

1、前言

在日常开发全志、rk等不同平台时,大多数时候只有一个编译主机,但不同sdk所需要的编译环境可能不同。所以本文将记录使用docker为每个平台创建独立的开发环境。

2、安装docker

# 1.卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 2.安装 Docjavascriptker 依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# 3.添加 Docker 官方 GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/Ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 4.添加 Docker 官方 apt 源
echo \
  "deb [arch=$(dpkg --print-architecture) signeandroidd-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5.安装 Docker
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 6.检查是否安装成功
docker --version

3、编写容器管理脚本

找AI写一个脚本,支持创建容器,进入容器,删除容器:

#!/bin/bash
# 文件名: sdk_docker.sh
# 用法:
#   创建并启动环境: ./sdk_docker.sh create <chip> <sdk_path>
#   进入环境:         ./sdk_docker.sh enter <chip>
#   删除环境:         ./sdk_docker.sh remove <chip>

ACTION=$1
CHIP=$2
SDK_PATH=$3
IMAGE="ubuntu:22.04"        # 可自行修改,例如某某sdk推荐的ubuntu版本为20.04
CONTAINER_NAME="sdk_${CHIP}_env"

if [[ -z "$ACTION" || -z "$CHIP" ]]; then
    echo "Usage:"
    echo "  $0 create <chip> <sdk_path>"
    echo "  $0 enter <chip>"
    echo "  $0 remove <chip>"
    exit 1
fi

case "$ACTION" in
    create)
        if [[ -z "$SDK_PATH" ]]; then
            echo "Error: SDK path must be provided for create."
            exit 1
        fi

        # 检查镜像是否存在
        if ! docker image inspect $IMAGE >/dev/null 2>&1; then
            echo "Image $IMAGE noLnOIKmt found locally. Pulling..."
            docker pull $IMAGE
        fi

        # 判断容器是否已存在
        if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
            echo "Container $CONTAINER_NAME already exists. Starting it..."
            docker start -ai $CONTAINER_NAME
        else
            echo "Creating new container $CONTAINER_NAME..."
            # 容器内挂载路径与宿主机一致
            docker run -it --name $CONTAINER_NAME -v $SDK_PATH:$SDK_PATH $IMAGE /bin/bash
        fi
        ;;
    enter)
        # 进入已有容器
        if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
            # 判断容器是否在运行
            if docker ps --format '{{.Names}}' | http://www.chinasem.cngrep -q "^${CONTAINER_NAME}$"; then
                docker exec -it $CONTAINER_NAME /bin/bash
            else
                echo "Starting container $CONTAINER_NAME..."
                docker start -ai $CONTAINER_NAME
            fi
        else
            echo "Container $CONTAINER_NAME does not exist. Create it first."
            exit 1
        fi
        ;;
    remove)
        # 删除容器
        if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
            docker rm -f $CONTAINER_NAME
            echo "Container $CONTAINER_Nhttp://www.chinasem.cnAME removed."
        else
            echo "Container $CONTAINER_NAME does not exist."
        fi
        ;;
    *)
        echo "Unknown action: $ACTION"
        exit 1
        ;;
esac

4、创建容器

  1. 例如现在要开发t527,执行如下脚本为t527创建一个独立的容器:
# ./sdk_docker.sh create <chip> <sdk_path>
# <chip> : 芯片名称,用于构建容器名称
# <sdk_path> : sdk在宿主机的绝对路径
sudo ./sdk_docker.sh create t527 /mnt/allwinner/t527

创建成功后会自动进入容器,容器中的sdk路径和宿主机的一致。ctrl+d可以退出容器:

使用docker搭建嵌入式Linux开发环境

  1. 重新进入容器:
# ./sdk_docker.sh enter <chip>
sudo ./sdk_docker.sh enter t527
  1. 删除容器
# ./sdk_docker.sh remove <chip>
sudo ./sdk_docker.sh remove t527

之后就可以在独立的容器里安装相关的编译环境。各个平台之间互不干扰。

到此这篇关于使用docker搭建嵌入式Linux开发环境的文章就介绍到这了,更多相关docker搭建嵌入式Linux内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于使用docker搭建嵌入式Linux开发环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155878

相关文章

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示