文档更新说明
免责声明
本文档虽力求准确,但可能存在错误或遗漏,用户需谨慎评估适用性;我们保留随时修订的权利,且不保证旧版本内容的有效性,为了得到最新版本的产品信息,请定时访问立创开发板官网进行资料的更新下载。本文档版权及最终解释权归深圳嘉立创科技集团股份有限公司所有。请务必注意以上声明,自行评估风险并决策,我们对使用本文档产生的任何问题概不负责。感谢您的包容与支持。
前言
在我们编译泰山派SDK时候,可能会因为大家的电脑环境不同导致编译失败,如果使用docker就能很好的避免环境不同意带来的编译问题,极大提供高编译成功率,这种方法也是我们主推的编译方法,下面是我测试过并长期使用的docker环境,建议大家编译泰山派SDK时候使用此方法。
Docker 的安装
卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
Docker安装方式【二选一】
如果其中一种不行了就使用另一个!!
DANGER
📌 目前国外的Docker Hub有问题,不知道什么时候恢复,可以使用阿里安装方式!
1. 使用docker存储库安装
更新 apt 包索引并安装相关软件包以允许 apt 通过 HTTPS 使用 docker 存储库:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
2
添加 Docker 的官方 GPG 密钥:.
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
2
设置存储库:
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 -a /etc/apt/sources.list.d/docker.list > /dev/null
2. 使用阿里安装
因为官方下架了dockerhub的镜像,我们更换一个阿里的镜像源。
- 更新 apt 包索引并安装相关软件包以允许 apt 通过 HTTPS 下载安装:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
2
- 添加阿里云的Docker GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
2
- 添加阿里云的Docker源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
2
验证安装完成
sudo docker -v
# 打印出版本号
Docker version 24.0.2, build cb74dfc
2
3
创建镜像
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
- 1、从已经创建的容器中更新镜像,并且提交这个镜像
- 2、使用 Dockerfile 指令来创建一个新的镜像
#创建目录
root@filex-virtual-machine:/home/LCKFB_RK3566# mkdir docker_lckfb_android_sdk/ #进入目录
root@filex-virtual-machine:/home/LCKFB_RK3566# cd docker_lckfb_android_sdk/
编写Dockerfile文件
root@filex-virtual-machine:/home/LCKFB_RK3566/docker_lckfb_android_sdk# vim dockerfile
2
3
4
5
dockerfile文件内容
# 设置基础镜像为Ubuntu 18.04
FROM ubuntu:18.04
# 设置作者信息
MAINTAINER lckfb "service@lckfb.com"
# 设置环境变量,用于非交互式安装
ENV DEBIAN_FRONTEND=noninteractive
# 备份源列表文件
RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
# 将源列表中的 http://.\*ubuntu.com 替换为 http://repo.huaweicloud.com
RUN sed -i 's@http://.\*ubuntu.com@http://repo.huaweicloud.com@g' /etc/apt/sources.list
# 更新包列表
RUN apt update
# 安装基本的编译工具和依赖
RUN apt install -y build-essential crossbuild-essential-arm64 \
bash-completion vim sudo locales time rsync bc python
# 安装其他依赖包,这里编译android11sdk需要的环境
RUN apt install -y repo git ssh libssl-dev liblz4-tool lib32stdc++6 \
expect patchelf chrpath gawk texinfo diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake \
unzip device-tree-compiler python-pip ncurses-dev python-pyelftools \
subversion asciidoc w3m dblatex graphviz python-matplotlib cpio \
libparse-yapp-perl default-jre patchutils swig expect-dev u-boot-tools
RUN apt install -y bear
# 再次更新包列表并安装任何未安装的依赖
RUN apt update && apt install -y -f
# 生成本地化语言支持
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
# 创建开发板用户
RUN useradd -c 'lckfb user' -m -d /home/lckfb -s /bin/bash lckfb
# sudo免密登录
RUN sed -i -e '/\%sudo/ c \%sudo ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
RUN usermod -a -G sudo lckfb
USER lckfb #设置docker工作目录为/home/lckfb
WORKDIR /home/lckfb
#容器使用这个内核方法
#docker run --privileged --mount type=bind,source=/home/LCKFB_RK3566/ROCKCHIP_ANDROID11.0_SDK_RELEASE/ROCKCHIP_ANDROID11.0_SDK_RELEASE,target=/home/lckfb/android11 --name="lckfb_android11_sdk" -h lckfb -it lckfb_android11_sdk_cmp
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
创建镜像
在 Dockerfile 文件的存放目录下,执行构建动作
docker build -t lckfb_android11_sdk_cmp .
# lckfb_android11_sdk_cmp是镜像名称,可随意更改,注意命令最后有一个‘.’
# 此过程需要一段时间,请耐心等待
2
3
4
5
WARNING
📌 如果运行docker build -t lckfb_android11_sdk_cmp .出现错误:
=> ERROR [internal] load metadata for docker.io/library/ubuntu:18.04
请查看最后面的常见问题解决办法!!
如果创建镜像时候出现了命令错误可以通过先运行下面进行测试
docker run --rm -it Ubuntu 18.04 bash
2
- docker run 是用于创建并运行容器的命令。
- --rm 参数指示 Docker 在容器停止后自动删除该容器。这样可以确保不会在系统中留下不再使用的停止状态容器。
- -it 参数结合了 -i(交互式)和 -t(终端)两个选项,使得容器中的命令可以接收终端输入并显示输出。
- <镜像名称或ID> 是指要基于哪个镜像创建容器。您可以提供镜像的名称或ID来唯一标识一个镜像。
- <要运行的命令> 是您希望在容器中运行的命令或指令。
查看镜像
root@filex-virtual-machine:/home/EX_DISK_4T_20230726/lckfb_tspi/android11/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tsp_android11_cmp_img latest 998f0ecd6d5d About a minute ago 1.93GB
lckfb_android11_sdk_cmp latest d8e470a39b2b About a minute ago 1.93GB
2
3
4
基于镜像创建容器
docker run --privileged --mount type=bind,source=/home/wucaicheng/gw_work/EX_DISK_A,target=/home/lckfb --name="lckfb_android11_sdk" -h lckfb -it lckfb_android11_sdk_cmp
--privileged
:在容器内启用特权模式,允许容器内的进程访问所有主机设备。--mount type=bind,source=/home/wucaicheng/gw_work/EX_DISK_A,target=/home/lckfb
:创建绑定类型的挂载点,将宿主机上的/home/wucaicheng/gw_work/EX_DISK_A
目录挂载到容器内的/home/lckfb
目录。这使得容器内的应用程序可以访问并操作宿主机上的该目录。--name="lckfb_android11_sdk"
:为容器指定一个名称,这样可以在后续的Docker命令中使用该名称引用容器。-h lckfb
:设置容器的主机名为lckfb。-it
:以交互式和终端的方式运行容器。lckfb_android11_sdk_cmp
:使用名为lckfb_android11_sdk_cmp
的镜像来创建容器。
列出所有的容器
docker ps -a 包括正在运行的和已经停止的容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7258412811df lckfb_android11_sdk_cmp "/bin/bash" 29 minutes ago Exited (0) 26 minutes ago lckfb_android11_sdk
2
3
- CONTAINER ID:容器的唯一ID。
- IMAGE:容器所使用的镜像。
- COMMAND:容器启动时运行的命令。
- CREATED:容器的创建时间。
- STATUS:容器的当前状态(正在运行、已停止等)。
- PORTS:容器的端口映射信息。
- NAMES:容器的名称。
启动容器
docker start lckfb_android11_sdk #启动容器
docker attach lckfb_android11_sdk #附加到正在运行的名为lckfb_android11_sdk的容器的终端上,以便与容器进行交互
2
退出容器
lckfb@lckfb:~$ exit
常见问题解决办法
出现上方的问题,修改 /etc/docker/daemon.json
文件
不会用vim编辑器网上教程即可学会,5分钟入门。
sudo vi /etc/docker/daemon.json
将文件内容改为:
{
"registry-mirrors": ["https://ccr.ccs.tencentyun.com/"]
}
2
3
然后保存退出。 重启docker
sudo systemctl restart docker
重新运行docker build -t lckfb_android11_sdk_cmp .
可以在前面加上sudo,如果不报错就不加!!!