test.sh是一个SDK,一键安装脚本。

代码结构:

tree

.

├── Dockerfile

├── Makefile

├── test.sh

├── myapp

├── myapp_release.tar

└── src

    ├── main.c
cat Makfile

# 使用 ?= 表示:如果环境变量里已经有 CC/CXX 等,就直接复用它!
CC ?= $(CROSS_COMPILE)gcc
CXX ?= $(CROSS_COMPILE)g++
AR ?= $(CROSS_COMPILE)ar
LD ?= $(CROSS_COMPILE)ld

# 核心修复:使用 += 允许追加编译选项,这样能完美保留 SDK 的底层架构优化参数
CFLAGS += -O2 -Wall -g
LDFLAGS += 

# 目标文件
TARGET = myapp
SRCS = $(wildcard src/*.c)
OBJS = $(SRCS:.c=.o)

# 默认目标
all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
	@echo "=========================================="
	@echo "  Build complete: $(TARGET)"
	@echo "  Use 'file $(TARGET)' to check architecture"
	@echo "=========================================="

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

.PHONY: all clean
cat main.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    printf("========================================\n");
    printf("  i.MX 8MP Cross-compile Test\n");
    printf("========================================\n");
    printf("Hello from ARM64 platform!\n");
    
    #ifdef __aarch64__
        printf("Architecture: ARM64 (aarch64)\n");
    #elif defined(__arm__)
        printf("Architecture: ARM32\n");
    #else
        printf("Architecture: Unknown\n");
    #endif
    
    printf("PID: %d\n", getpid());
    printf("========================================\n");
    
    return 0;
}

 cat Dockerfile 
# ========== 流水线全自动 Dockerfile ==========
FROM ubuntu:22.04

# 设置非交互式安装
ENV DEBIAN_FRONTEND=noninteractive

# 安装嵌入式编译所需的基础工具
RUN apt-get update && apt-get install -y \
    build-essential \
    python3 \
    xz-utils \
    file \
    cpio \
    && rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /workspace

# 声明 SDK 根目录的环境变量
ENV SDK_ROOT=/opt/fsl-imx-wayland/6.6-scarthgap

# 【CMD】:容器启动时,全自动加载环境并执行编译,编译完容器立刻自动关闭
CMD ["/bin/bash", "-c", "source  $SDK_ROOT/environment-setup-armv8a-poky-linux && make clean && make && tar -cvf myapp_release.tar myapp"]

#构建docker镜像

sudo docker build -t imx8mp-app:latest .

#运行镜像

sudo docker run --rm   -v /opt/fsl-imx-wayland/6.6-scarthgap:/opt/fsl-imx-wayland/6.6-scarthgap   -v "$(pwd)":/workspace   myapp:latest

更多推荐