当前位置: 首页 > news >正文

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

文章目录

  • 1、前言
  • 2、安装docker
  • 3、编写容器管理脚本
  • 4、创建容器

1、前言

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

2、安装docker

# 1.卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc# 2.安装 Docker 依赖
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) signed-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" ]]; thenecho "Usage:"echo "  $0 create <chip> <sdk_path>"echo "  $0 enter <chip>"echo "  $0 remove <chip>"exit 1
ficase "$ACTION" increate)if [[ -z "$SDK_PATH" ]]; thenecho "Error: SDK path must be provided for create."exit 1fi# 检查镜像是否存在if ! docker image inspect $IMAGE >/dev/null 2>&1; thenecho "Image $IMAGE not found locally. Pulling..."docker pull $IMAGEfi# 判断容器是否已存在if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; thenecho "Container $CONTAINER_NAME already exists. Starting it..."docker start -ai $CONTAINER_NAMEelseecho "Creating new container $CONTAINER_NAME..."# 容器内挂载路径与宿主机一致docker run -it --name $CONTAINER_NAME -v $SDK_PATH:$SDK_PATH $IMAGE /bin/bashfi;;enter)# 进入已有容器if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then# 判断容器是否在运行if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; thendocker exec -it $CONTAINER_NAME /bin/bashelseecho "Starting container $CONTAINER_NAME..."docker start -ai $CONTAINER_NAMEfielseecho "Container $CONTAINER_NAME does not exist. Create it first."exit 1fi;;remove)# 删除容器if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; thendocker rm -f $CONTAINER_NAMEecho "Container $CONTAINER_NAME removed."elseecho "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可以退出容器:

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

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

http://www.dtcms.com/a/354650.html

相关文章:

  • HTML5七夕节网站源码
  • Java:TCP/UDP网络编程
  • DevOps篇之利用Jenkins实现多K8S集群的版本发布
  • Docker-compose常用命令
  • Helm 在 K8s 中的常见应用场景
  • 【K8s】整体认识K8s之K8s的控制器
  • Node.js + MongoDB 搭建 RESTful API 实战教程
  • 从入门到入土之——奇异值分解(SVD)
  • 重塑可观测性成本:解析Coralogix的智能成本优化之道
  • 深入浅出:贴片式eMMC存储与国产芯(君正/瑞芯微)的协同设计指南
  • GitHub 宕机自救指南:确保开发工作不间断
  • 学习做动画6.瞄准偏移
  • 5.2 I/O软件
  • STL库——list(类函数学习)
  • 搭建私有云3步法:cpolar简化Puter本地云端配置
  • leetcode238:除自身以外的数组的乘积(前缀和思想)
  • Fair Federated Learning with Biased Vision-Language Models
  • 一文读懂:自然语言处理中的语义理解技术
  • C# Deconstruct | 简化元组与对象的数据提取
  • 秋招笔记-8.28
  • 如何获取文件的MD5码
  • 读大语言模型09超级智能
  • 完整代码注释:实现 Qt 的 TCP 客户端,实现和服务器通信
  • 从集线器到路由器:计算机网络演进之路
  • 实现微信小程序的UniApp相机组件:拍照、录像与双指缩放
  • 在Xcode中查看设备日志的完整指南
  • 深度学习篇---VGGNet
  • 【SQL】计算一年内每个月份的周数据
  • 基于大型语言模型的自然语言到 SQL 转换研究综述:我们身处何处,又将前往何方?
  • MyBatis 动态 SQL 精讲:告别硬编码的智能拼接艺术