---
# System prepended metadata

title: STM32MP1 SDK Docker 交叉編譯環境構建指南
tags: [Embedded_linux]

---

# Docker 環境建置指南

:::success
# 目標
- 使用 Docker 簡化開發環境設置
- 減少 VM 對 Server 資源的占用
- 基於 Ubuntu 22.04 製作輕量化映像
:::

---

:::danger
>[!]
`$` 代表命令行在 server終端輸入
`#` 代表命令行在docker終端輸入
:::


## 建置步驟

### 1. 在 Server 建立資料夾
用於存放 STM 公司 SDK 資料：
```shell
$ mkdir -p stmenv
```

### 2. 拉取 Docker 映像
避免拉取 Ubuntu 24.04，請選擇 Ubuntu 22.04：
```shell
$ docker pull ubuntu:22.04
```

### 3. 啟動容器並進入 Docker
以 Root 權限進入 Docker 容器：
```shell
$ docker run -it \
  -v /home/mac/stmenv:/workspace \
  -w /workspace \
  --user root \
  --name stmenv \
  ubuntu:22.04
```
:::info
 /home/mac/stmenv 要改成主機端要掛載資料夾的的路徑
:::
---
## Docker 操作指令

### 1. 更新系統與安裝工具
在 Docker 中執行以下指令：
```shell
# apt update
# apt upgrade -y
# apt install sudo -y
# sudo apt install adduser
```

### 2. 新增使用者
設定新使用者及密碼，並加入 `sudo` 群組：
```shell
# sudo adduser mac
<輸入密碼>
# sudo usermod -aG sudo mac
```
:::info
mac 名稱隨意
:::
### 3. 查看 Docker 容器
在 Server 中執行以下指令檢查容器狀態：
```shell
$ docker ps -a
```
範例輸出：  
![image](https://hackmd.io/_uploads/SJuTlJZOkx.png)

### 4. 提交容器映像
提交目前的容器為新映像：
```shell
$ docker commit 035c8a53fe0e stmenv:latest
```

### 5. 停止並移除舊容器
```shell
$ docker stop stmenv && docker rm stmenv
```

### 6. 啟動新映像
以非 Root 使用者啟動新的容器：
```shell
$ docker run -id \
  -v /home/mac/stmenv:/home/mac/stmenv \
  -w /home/mac/stmenv \
  --user mac \
  --name stm \
  stmenv:latest
```
範例輸出：  
![image](https://hackmd.io/_uploads/BksCGJ-dke.png)

---

## 安裝 SDK 必備工具
參考 STM 官方文件：[官方連結](https://wiki.st.com/stm32mpu/index.php?title=Getting_started/STM32MP1_boards/STM32MP157x-EV1/Develop_on_Arm%C2%AE_Cortex%C2%AE-A7/Install_the_SDK&oldid=53173)

:::danger
若照著官方連結安裝工具，可能導致編譯 Source Code 失敗。
:::

在 Docker 中安裝以下工具：
```shell
# sudo apt-get install build-essential libncurses-dev libncurses5 libyaml-dev libssl-dev
# sudo apt install file
# sudo apt install bc
# sudo apt install python-is-python3
```

> **注意**：未安裝 `file` 工具將導致以下錯誤：
> ```shell
> The command 'file' is required by the relocation script, please install it first. Abort!
> ```

---

## 下載並解壓 SDK 壓縮包
將 SDK 壓縮檔下載至 `stmenv` 資料夾：
```shell
# sudo tar xvf en.SDK-x86_64-stm32mp1-openstlinux-6.6-yocto-scarthgap-mpu-v24.11.06.tar.gz
# sudo tar xvf en.SOURCES-stm32mp1-openstlinux-6.6-yocto-scarthgap-mpu-v24.11.06.tar.gz
```
## 更改權限
```shell
# sudo chown -R mac:mac ~/stmenv
```
:::info
如果你不更改權限，可能會導致以下問題：

權限不足：當你嘗試進入 ~/stmenv 或操作其中的文件時，系統可能提示「Permission denied（權限拒絕）」。
程序無法正常運行：如果 ~/stmenv 是某些應用程序的工作目錄，但其文件不屬於當前用戶，應用程序可能無法讀取或修改這些文件。
無法刪除文件：刪除或移動某些文件時可能需要更高權限。
:::
---

## 安裝 SDK
執行以下指令安裝 SDK：
```shell
# cd ~/stmenv
# sudo ./stm32mp1-openstlinux-6.6-yocto-scarthgap-mpu-v24.11.06/sdk/st-image-weston-openstlinux-weston-stm32mp1.rootfs-x86_64-toolchain-5.0.3-openstlinux-6.6-yocto-scarthgap-mpu-v24.11.06.sh \
  -d /home/mac/stmenv/stm32mp1-openstlinux-6.6-yocto-scarthgap-mpu-v24.11.06/sdk/Developer-Package/SDK
```

---

## 環境變數設定
添加 SDK 環境變數至 `.bashrc`：
```shell
# echo "source /home/mac/stmenv/stm32mp1-openstlinux-6.6-yocto-scarthgap-mpu-v24.11.06/sdk/Developer-Package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi" >> ~/.bashrc
```

> **注意**：若執行環境配置有問題，請檢查安裝步驟。

---
