构建环境说明
1 2 3 4 5 6 7 8 9 10 11 New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow proxy_port=7890 proxy_host=$(ip route | awk '/default/ {print $3}' ) export https_proxy="http://${proxy_host} :${proxy_port} " export http_proxy="http://${proxy_host} :${proxy_port} " export all_proxy="socks5://${proxy_host} :${proxy_port} "
开始构建系统 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 git clone --depth=1 https://github.com/armbian/build cd buildwget https://github.com/leux0/armbian-h88k-images/raw/main/backport-v6.1.39.patch -O patch/kernel/rk35xx-legacy/055-backport-v6.1.39.patch wget https://github.com/leux0/armbian-h88k-images/raw/main/linux-rk35xx-legacy.config -O config/kernel/linux-rk35xx-legacy.config ./compile.sh build BOARD=hinlink-h88k BRANCH=legacy RELEASE=bookworm GITHUB_MIRROR=cnpmjs \ BUILD_DESKTOP=no BUILD_MINIMAL=yes KERNEL_CONFIGURE=no KERNEL_GIT=shallow REGIONAL_MIRROR=china \ PACKAGE_LIST_BOARD="vim-tiny dnsmasq hostapd bridge-utils ifupdown iptables wireless-regdb" ./compile.sh build BOARD=hinlink-h88k BRANCH=legacy RELEASE=bookworm \ BUILD_DESKTOP=yes BUILD_MINIMAL=no KERNEL_CONFIGURE=no KERNEL_GIT=shallow \ DESKTOP_ENVIRONMENT=gnome DESKTOP_ENVIRONMENT_CONFIG_NAME=config_base \ DESKTOP_APPGROUPS_SELECTED='3dsupport browsers desktop_tools internet' \ BOARD_FIRMWARE_INSTALL="-full" \ COMPRESS_OUTPUTIMAGE=sha,gpg,xz DEB_COMPRESS=xz SHARE_LOG=yes DEBUG=yes \ MAINLINE_MIRROR=tuna UBOOT_MIRROR=gitee GITHUB_MIRROR=cnpmjs DOWNLOAD_MIRROR=china
构建参数解析 1 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 BOARD 在 build/config/boards/ 下可找到支持的设备代号 BRANCH 在 build/config/kernel/ 下可找到支持的内核分支。legacy,vendor,edge RELEASE 在 build/config/distributions/ 下可找到支持的发行版 BUILD_MINIMAL (yes | no) 如为yes 则默认网络管理为:systemd-networkd,否则为:NetworkManager BUILD_DESKTOP 是否安装桌面,与 BUILD_MINIMAL 相冲突 DESKTOP_ENVIRONMENT 在 build/config/desktop/common/environments 下可找到支持的桌面 INSTALL_HEADERS (yes | no) 是否安装内核头文件 BUILD_KSRC (yes | no) 是否在构建时创建内核源码包 INSTALL_KSRC (yes | no) 是否在预安装内核源码到镜像 KERNEL_GIT - shallow:仅含特定的分支。- full:包含所有支持的分支,不仅下载量非常大,也需要大量磁盘空间 KERNEL_CONFIGURE - prebuilt:使用预编译的内核包(仅适用于在维护的硬件)。- yes :通过内核配置界面配置(增减模块或功能)。 - no:使用Armbian提供的内核配置编译。如果留空则弹出内核配置界面。 BOOTSIZE 设置 /boot 分区大小(以MB为单位),如果 ROOTFS_TYPE=ext4 则失效 FIXED_IMAGE_SIZE 创建指定大小的镜像文件(以MB为单位),而不是按 rootfs 大小计算 ROOTFS_TYPE (ext4 | f2fs | btrfs | nilfs2 | xfs | nfs) 创建根文件系统时使用哪种格式 TRFS_COMPRESSION (lzo | none | zlib | zstd) 在 ROOTFS_TYPE=btrfs 时文件系统的压缩级别,默认为:zlib IMAGE_XZ_COMPRESSION_RATIO (1-9) 使用xz压缩镜像时压缩级别。调高时要注意内存消耗 COMPRESS_OUTPUTIMAGE 压缩镜像文件和GPG签名等以便重新分发。 - sha:为镜像生成SHA256哈希。- gpg:使用GPG对映像进行签名 - 7z:将镜像、哈希和签名压缩到7Z存档。- gz:仅使用GZ格式压缩镜像。 - xz:仅使用XZ格式压缩镜像 DOWNLOAD_MIRROR (china | bfsu) 选择 toolchain、debian、ubuntu、packages 等的下载源,留空为使用官方下载源 ARMBIAN_MIRROR (auto) 默认为自动选择Armbian的源,更改举例:ARMBIAN_MIRROR="https://yourlocalmirror.com" MAINLINE_MIRROR (google | tuna | bfsu) 选择主线内核源码下载源,留空为使用官方地址:git.kernel.org USE_MAINLINE_GOOGLE_MIRROR (yes | no) 如为yes 则与MAINLINE_MIRROR=google的作用相同,即使用谷歌的主线内核源 UBOOT_MIRROR (github | gitee) 选择主线UBOOT源码的下载源,留空为使用官方地址:source.denx.de USE_GITHUB_UBOOT_MIRROR (yes | no) 如为yes 则与UBOOT_MIRROR=gtihub的作用相同,即使用GITHUB的UBOOT源 GITHUB_MIRROR (fastgit | gitclone | cnpmjs) 选择GitHub托管存储库的下载镜像。留空为直连到GitHub,但对于中国大陆用户来说可能很慢 REGIONAL_MIRROR (china) 根据选择区域设置apt源,不会覆盖已指定下载源选项的值。如果留空则使用默认设置 该值为china会设置后面变量的值为:MAINLINE_MIRROR=tuna, UBOOT_MIRROR=gitee, GITHUB_MIRROR=fastgit, DOWNLOAD_MIRROR=china debootstrap也会从中国的tuna源获取rootfs,后续sources.list和armbian.list里用的也是 mirrors.tuna.tsinghua.edu.cn EXPERT (yes | no) 是否以交互模式显示正在进行的项 NAMESERVER ( IPv4 ) 在chroot 中使用的DNS解析器,它不会影响最终镜像。默认为:1.0.0.1 CONSOLE_AUTOLOGIN (yes | no) 是否自动以root身份登录本地控制台(可能不安全,建议为no禁用) SKIP_BOOTSPLASH (yes | no) 跳过内核启动画面
其他构建技巧
使用自定义的内核配置文件
1 2 3 4 5 6 7 8 9 10 userpatches/linux-rk35xx-legacy.config userpatches/linux-rockchip64-current.config build/patch/kernel/rk35xx-legacy/0000.patching_config.yaml build/userpatches/kernel/rk35xx-legacy/0000.patching_config.yaml
查看桌面集合包内含软件包
1 2 3 4 5 build/config/desktop/common/appgroups/ build/config/desktop/common/environments/
安装特定的软件包
扩展系统功能
1 2 3 4 5 6 7 build/extensions/mesa-vpu.sh build/extensions/nvidia.sh
克隆的源码在本地的路径
1 2 3 4 5 6 7 8 9 build/cache/sources/rkbin-tools/ build/cache/sources/u-boot-worktree/u-boot-rockchip64/next-dev-v2024.03/ build/cache/sources/linux-kernel-worktree/5.10__rk35xx__arm64/ https://github.com/armbian/os/pkgs/container/os%2Fuboot-hinlink-h88k-legacy https://github.com/armbian/os/pkgs/container/os%2Farmbian-firmware-full
怎么跳过首次登录脚本(创建用户、时区语言、网络连接等)
如果存在文件 /root/.not_logged_in_yet
那么启动就会运行Armbian的首次登录脚本 /usr/lib/armbian/armbian-firstlogin
来配置系统环境 删除它后可跳过执行,后续再想执行首次登录脚本来配置系统环境,可先 touch /root/.not_logged_in_yet
,然后执行 /usr/lib/armbian/armbian-firstlogin
怎么在 chroot
环境中运行用户的脚本来自定义系统镜像
1 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 leux@B650:~$ cat build/userpatches/customize-image.sh RELEASE=$1 LINUXFAMILY=$2 BOARD=$3 BUILD_DESKTOP=$4 echo "$RELEASE $LINUXFAMILY $BOARD $BUILD_DESKTOP " rm /root/.not_logged_in_yetecho "extraboardargs=net.ifnames=0" >> /boot/armbianEnv.txtsed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" /etc/sysctl.conf sed -i "s/#net.ipv6.conf.all.forwarding=1/net.ipv6.conf.all.forwarding=1/" /etc/sysctl.conf cp -p /tmp/overlay/quectel-CM /usr/local/bin/chmod 755 /usr/local/bin/quectel-CMcat << EOF > /etc/systemd/system/quectel-cm.service [Unit] Description=Quectel-CM Service After=network.target Wants=network.target [Service] ExecStop=/bin/kill -s TERM \$MAINPID ExecStart=/usr/local/bin/quectel-CM -s ctnet -4 -6 [Install] WantedBy=multi-user.target EOF systemctl enable quectel-cm
构建问题修复
需要使用支持UTF-8的终端例如Windows Terminal
,或者出现该问题时输入<Enter>
跳过,否则10秒后将退出
1 2 3 4 5 Please use a terminal that supports UTF-8. For example: [ Windows Terminal ] [💲|🚸] Get it at the Microsoft Store [ https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701 ] [💲|💥] Problem detected [ WSL2 Terminal does not support UTF-8 ] [💲|💥] Exiting in 10 seconds [ Press <Ctrl-C> to abort, <Enter> to ignore and continue ]