
字节笔记本
2026年10月7日 · 约 3 分钟读完
打包脚本按 Linux 来写
先问的是在 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 文件。

工作目录名叫 x64-image-build。结束时打印镜像已经创建。文件可以出现,里面没有根文件系统,也没有引导。
在 M1 上若要 Linux 环境,对话把容器当作回避本机工具链冲突的办法。容器解决的是编译环境,不代替后面的挂载和复制。两条不要并成一步。

内核版本写死为 5.15。换版本要改下载地址和后面复制 bzImage 的目录,两处一起改。
defconfig 是通用默认配置。对话说具体需求还要再配。脚本没有打开配置菜单。
apt 那条安装出现在用户说明是 M1 之前。M1 上不要回头执行那条 apt。



