OrangePi-3B 系列笔记:
- OrangePi-3B 折腾笔记 —— 认识开发板
- OrangePi-3B 折腾笔记 —— 准备构建环境
- OrangePi-3B 折腾笔记 —— 构建 U-Boot
- OrangePi-3B 折腾笔记 —— 构建 Kernel
- OrangePi-3B 折腾笔记 —— 点亮 LCD 屏幕
- OrangePi-3B 折腾笔记 —— 移植 WiFi & BT 驱动
- OrangePi-3B 折腾笔记 —— 构建文件系统镜像
温馨提示:
- OrangePi-3B 硬件版本 V1.1.1 的板子出现过有线网卡“无故”失灵的故障, 所以在进行操作前请确认开发板工作良好(修复这个问题需要更换 RK3566 芯片).
https://www.bilibili.com/read/cv33224126- 香橙派目前已经推出了硬件版本为 V2.1 的 OrangePi-3B, 有线网卡供应商更换为 RTL. 本系列文章没有针对 V2.1 的板子做过适配, 请根据实际情况操作(同时强烈谴责此种不负责任的行为, 如考虑购买此型号板子商用, 建议换个型号避坑).
- 本系列文章最后更新时间: 2024年11月02日.
编译环境
- 主板: OrangePi-3b_V1.1.1
- 芯片: RK3566
- 环境: Debian:12_x86_64(Docker)
内容说明
为了编译项目而不污染操作系统,笔记记录的操作都是使用的 Docker
和 Debian 12
的容器来完成的。
这一篇文章主要是记录一下之前使用到的编译环境,方便今后快速调用。
这篇笔记其实是在搞完 U-Boot
、Kernel
和 RootFS
之后才整理出来的,但是为了方便一些按照这个系列文章实验的同学阅读,这里将它的顺序调整到第二篇。
所以这篇笔记是开了上帝视角,提前记录了后续构建系统要用到的软件包。不过都有明显的用途记录,方便理解。
镜像
基础环境镜像
构建镜像
docker build -t build-base - <<\EOF
FROM debian:12
RUN <<EOT
sed -e 's|deb.debian.org|mirrors.tuna.tsinghua.edu.cn|g' -i.bak /etc/apt/sources.list.d/debian.sources
apt update
apt install -y sudo bash-completion command-not-found
apt update
apt clean && rm -rf /var/lib/apt/lists/*
EOT
COPY <<EOT /etc/profile.d/aliases.sh
alias ll='ls -lh -F --color=auto --time-style=long-iso'
alias la='ls -lhA -F --color=auto --time-style=long-iso'
alias lt='ls -lht -F --color=auto --time-style=long-iso'
alias lat='ls -lhAt -F --color=auto --time-style=long-iso'
EOT
ENV TZ=Asia/Shanghai
RUN <<EOT
useradd --create-home --uid 1000 --groups users,sudo --shell /bin/bash user
echo "user:1111" | chpasswd
ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime
echo "${TZ}" > /etc/timezone
EOT
USER user
WORKDIR /home/user/
EOF
- 使用管道输入
Dockerfile
内容,自定义镜像标签为build-base
。
https://docs.docker.com/build/building/context/#how-to-build-without-a-context- 使用
Here-Documents
运行RUN
、COPY
指令,注意如果是在Dockerfile
中使用需要保证文件换行符是LF
。
https://docs.docker.com/reference/dockerfile/#here-documents
使用镜像
docker run -ti --rm build-base bash -l
- 默认为
non-login
的shell
,需要使用 ‘-l’ 参数登录以生效/etc/profile
配置。
https://github.com/gliderlabs/docker-alpine/issues/443
编译环境镜像
构建镜像
docker build -t build-linux - <<\EOF
FROM build-base
USER root
RUN <<EOT
apt update
# linaro toolchain
apt install -y xz-utils
LINARO_GCC_SITE=https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/
LINARO_GCC_ARM=arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
LINARO_GCC_AARCH64=aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
wget -q -O - ${LINARO_GCC_SITE}${LINARO_GCC_ARM}/ | tar -Jxvf - -C /opt/
wget -q -O - ${LINARO_GCC_SITE}${LINARO_GCC_AARCH64}/ | tar -Jxvf - -C /opt/
apt clean && rm -rf /var/lib/apt/lists/*
EOT
RUN <<EOT
apt update
# toolchain
apt install -y make gcc gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu
# make menuconfig
apt install -y libncurses-dev
# u-boot
apt install -y bc bison flex swig uuid-dev libssl-dev libgnutls28-dev python3 python3-dev python3-setuptools python3-pyelftools python3-cryptography
# u-boot rockchip
apt install -y device-tree-compiler
ln -s /bin/python3 /bin/python2
ln -s /bin/python3 /bin/python
# kernel
apt install -y flex bison bc libssl-dev cpio
# kernel rockchip
apt install -y u-boot-tools xz-utils lz4
# rootfs
apt install -y debootstrap binfmt-support qemu-user-static u-boot-tools initramfs-tools android-sdk-libsparse-utils e2fsprogs file fdisk gdisk parted
apt clean && rm -rf /var/lib/apt/lists/*
EOT
USER user
EOF
- 使用
apt
安装的gcc-arm-linux-gnueabi
和gcc-aarch64-linux-gnu
版本为12.2.0
,用来编译较新的项目源码。- 手动安装的
gcc-linaro-7.5.0-2019.12
用来编译旧版本的项目源码。
使用镜像
docker run -ti --rm --privileged -v ~/projects/:/projects/ build-linux bash -l