ByteNoteByteNote
打包脚本按 Linux 来写
字

字节笔记本

2026年10月7日 · 约 3 分钟读完

打包脚本按 Linux 来写

API中转
¥120

先问的是在 ARM 上编译 x64 镜像。第一段按 Debian 来写,安装 gcc-x86-64-linux-gnu,把 CC 和 CXX 指到 x86_64-linux-gnu-gcc。用户接着说机器是 Mac M1,要的是编译打包镜像。

工具链前后不是同一套

改口之后建议安装 Xcode 命令行工具,再用 Homebrew 安装 x86_64-elf-gcc,把 CC 设成 x86_64-elf-gcc。elf 工具链面向裸机目标,不是 Linux 用户态的 gnu 前缀。

脚本里又写成 CROSS_COMPILE=x86_64-linux-gnu-,架构变量是 x86_64。内核从 cdn.kernel.org 下载 5.15 的 tar.xz,解压后在该目录执行 make defconfig,再用这个前缀和 nproc 并行编译。Mac 上默认没有 nproc。前缀和刚才的 elf-gcc 也不是同一个程序。

磁盘镜像那几步在 Mac 上走不通

脚本创建 1024 兆的空文件,用 mkfs.ext4 格式化,再用 mount -o loop 挂上。loop 挂载是 Linux 的做法。macOS 没有同样的这条挂载参数。根文件系统目录建了,里面怎么装系统只有注释,写着可以在容器里用 debootstrap。复制文件时把 bzImage 拷到 mnt/boot/vmlinuz,但没有先创建 boot 目录。引导程序也没装。对话自己写了:没有 GRUB,这还不是可引导镜像。

另有一条 docker run --platform linux/amd64 启动 ubuntu。那是跑一个 amd64 容器,不是把容器收成刚才那个 img 文件。

脚本里的前缀和 elf 工具链不是同一个

工作目录名叫 x64-image-build。结束时打印镜像已经创建。文件可以出现,里面没有根文件系统,也没有引导。

在 M1 上若要 Linux 环境,对话把容器当作回避本机工具链冲突的办法。容器解决的是编译环境,不代替后面的挂载和复制。两条不要并成一步。

空文件格式化之后里面还没有系统

内核版本写死为 5.15。换版本要改下载地址和后面复制 bzImage 的目录,两处一起改。

defconfig 是通用默认配置。对话说具体需求还要再配。脚本没有打开配置菜单。

apt 那条安装出现在用户说明是 M1 之前。M1 上不要回头执行那条 apt。

相关文章

分享: