深入解析:docker搭建imx6ull Linux开发编译环境
2025-10-14 22:12 tlnshuju 阅读(20) 评论(0) 收藏 举报文章目录
一、前言
在开发
嵌入式linux环境的时候,遇到了,需要用到虚拟机,但是虚拟机开销比较大,并且在linux环境下,管理项目工程,以及文件的时候并不是很方便,使用.devcontainer的方式,把项目工程以及文件都在windows下面管理。这就比较方便了。环境包已经打包好
二、工具准备
- Docker Desktop 软件 
- docker 拉取镜像 - 镜像文件是自己制作的,文档后面有下载地址 - **这个镜像只编译了普通的系统,如tslib 等这种开源库并没有编译所以识别不了 ** - 2025.9.22 只能使用内核 
- vscode 
- vscode 下载Dev Containers插件  
三、.devcontainer 文件
在项目文件下面创建一个 .devcontainer 的文件夹
3.1 Dockerfile
在 .devcontainer 文件夹下面创建 Dockerfile 文件
# 定义一个构建参数(Argument)DOCKER_TAG,默认值为'18.04'
# 在使用`docker build`命令时可以通过`--build-arg DOCKER_TAG=另一个值`来覆盖这个默认值
#可在构建时通过 --build-arg 覆盖
ARG DOCKER_TAG=18.04
# 使用FROM指令指定基础镜像,这里使用一个已存在的镜像'100askimx6ullubuntu',其标签由上面的DOCKER_TAG参数决定
# 版本由 DOCKER_TAG 指定
FROM 100ask_imx6ullubuntu:${DOCKER_TAG}
# 设置环境变量LC_ALL,用于指定整个系统的区域设置,'C.UTF-8'确保使用UTF-8编码且使用默认的C区域设置(英文)
# 设置系统语言环境为 UTF-8,确保终端字符编码正确
ENV LC_ALL=C.UTF-8
# 设置环境变量LANG,用于指定默认的语言环境,同样设置为'C.UTF-8'
ENV LANG=C.UTF-8
# RUN apt-get update -y && apt-get install bear -y
# `/bin/bash`: Bash shell的路径
# `-c`: 让Bash从字符串中读取命令,但由于后面没有提供命令字符串,所以只是启动了一个交互式Shell
# 默认容器启动命令:启动 bash shell
CMD ["/lib/systemd/systemd"]
# CMD ["/bin/bash", "-c"]3.2 devcontainer.json
在 .devcontainer 文件夹下面创建 devcontainer.json 文件
{
// 定义开发容器的名称,用于在VS Code中识别,这里命名为"imx6ull"
"name": "imx6ull", // 开发容器显示名称
// 配置如何构建Docker镜像
"build": {
// 指定用于构建镜像的Dockerfile文件名,默认为当前目录下的"Dockerfile"
"dockerfile": "Dockerfile" // 指定构建使用的 Dockerfile
},
// 定义在运行容器时将传递给的`docker run`命令的参数列表
"runArgs": [ // 容器运行时参数
// `--privileged` 参数赋予容器几乎所有的主机硬件设备访问权限,这对于嵌入式开发(如访问USB转串口设备)至关重要
"--privileged" // 授予特权模式(访问 USB 设备等硬件)
//"-v F:\Mypc\Desktop\myproject_nfs:/home/dockeruser/shared"
// "-p","2222:22/TCP"
],
// VS Code特有的自定义配置
"customizations": {
// 针对VS Code编辑器的设置
"vscode": {
// 定义在容器内打开工作区时将自动设置的编辑器选项
"settings": {
// 设置cleang
"C_Cpp.intelliSenseEngine": "disabled",
"C_Cpp.default.intelliSenseMode": "linux-gcc-arm",
"clangd.path": "/home/dockeruser/my_tools/clangd_20.1.8/bin/clangd",
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}",
"--log=verbose"
]
},
"extensions": [
// 扩展,提供代码智能感知、调试等功能
"llvm-vs-code-extensions.vscode-clangd",
"ms-vscode.cmake-tools" // 可选,若有 CMake 项目
]
}
},
// 指定连接到容器后默认使用的远程用户名为'dockeruser'
"overrideCommand": false, // 禁用 VS Code 默认覆盖 entrypoint(核心修复)
"remoteUser": "dockeruser",
// 定义当关闭VS Code窗口时对容器执行的操作,'stopContainer'表示停止容器(但不会删除它)
"shutdownAction": "stopContainer"
//deleteContainer
//"shutdownAction": "deleteContainer"
}3.3 项目跟文件下面创建.clangd
# ------------------------------
# Clangd 编译标志配置块:处理项目编译参数兼容问题
# ------------------------------
CompileFlags:
# ------------------------------
# 1. 添加目标平台参数:让 clangd 适配 ARM 交叉编译环境
#    (补充项目缺失的关键编译信息,确保语义分析准确)
# ------------------------------
Add: [
"--sysroot=/home/dockeruser/100asklinuxsdk/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/",
-target, arm-buildroot-linux-gnueabihf,  # 指定目标平台三元组(对应交叉编译器,如arm-linux-gnueabihf-gcc)
#-march=armv7-a,                        # 指定芯片架构为 ARMv7-A(匹配 Cortex-A7/A9 等常见 ARM 芯片)
-mfloat-abi=hard,                      # 指定软浮点 ABI(匹配项目中 GCC 的 -msoft-float 参数,避免硬浮点冲突)
-I/home/dockeruser/100asklinuxsdk/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include/freetype2/,
]
# ------------------------------
# 2. 移除不兼容的 GCC 参数:避免 clangd 因识别不了而报错
#    (清理项目残留的 GCC 特有参数,保持 clangd 分析逻辑干净)
# ------------------------------
Remove: [
-mapcs,                          # 移除:GCC 的 ARM 过程调用标准(Procedure Call Standard),Clang 不识别此参数
-mno-sched-prolog,               # 移除:GCC 的调度器 prolog 优化参数,Clang 无需额外设置
-fno-ipa-sra,                    # 移除:GCC 的内联过程间静态单赋值优化(IPA-SRA),Clang 不支持此标志
-mno-thumb-interwork,            # 移除:GCC 的 Thumb/ARM 模式交互工作参数,Clang 自动处理模式切换
-fno-var-tracking-assignments,   # 移除:GCC 的变量跟踪赋值优化,Clang 无直接对应功能
-fconserve-stack,                # 移除:GCC 的栈空间保守优化,Clang 通过其他机制管理栈使用
-mabi=,                          # 移除:所有以 `-mabi=` 开头的参数(如 `-mabi=aapcs-linux`),避免与明确指定的 ABI 冲突
-mno-thumb,                      # 移除:GCC 的 Thumb 模式禁用参数,Clang 用 `-marm`/`-mthumb` 显式控制模式
-mfpu=,                          # 移除:所有以 `-mfpu=` 开头的参数,已通过 `-mfloat-abi` 和后续显式 FPU 配置覆盖
]3.3 容器里面打开工程
使用 ctrl+shift+p 选择Dev Containers: Reopen in Container

四、完成截图

五、下载地址
用户名 :dockeruser 密码:1
用户名:root 密码:1
通过网盘分享的知识:docker搭建imx6ull Linux开发编译环境
 链接: https://pan.baidu.com/s/5Kef6KbOODGmxfUGMsOcJsQ
六、NFS共享文件夹到开发板
不能在docker的服务器里面使用nfs,windwos的docker限制太多,目前没有解决方案
具体请查看:docker命令总结-CSDN博客
看2.2 nfs的使用
- 使用 - docker自带的文件挂载目录- "-v F:\Mypc\Desktop\myproject_nfs:/home/dockeruser/shared"- 在 - devcontainer.json文件中加入这个挂载命令,已经注释
- 在 - windows使用 haneWIN NFS软件- 下载链接:https://www.hanewin.net/nfs-e.htm - 配置hanewinnfs  - 这里输入你要共享的文件夹 - F:\DockerFile\Linux -public -name:nfs
- 开发板修改挂载目录 - vim /etc/fstab
- 文件后面添加目录 - 192.168.1.7:/nfs /root/shard nfs nolock,vers=3,defaults 0 0- 192.168.1.7:这个是宿主机(windwos)的ip地址 
- 挂载 - mount -a
 
坑
- 修改了 Dockerfile或者devcontainer.json一定要 重新生成容器 不是重新打开窗口也不是重新打开文件,是 重新生成容器
 Ctrl+Shife+P 选择 Dev Containers: Rebuild Container

 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号