1.arm64-linux
1.1.download
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.tar.xz
tar -xvf linux-6.6.tar.xz
1.2.cross-compile
安装交叉编译工具
apt install gcc-aarch64-linux-gnu
使用menuconfig勾选RAM disks支持,并调整大小为: 65536 kb:
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 O=../out menuconfig -j32
Device Drivers > Block devices
<*> RAM block device support
(16) Default number of RAM disks (NEW)
(65536) Default RAM disk size (kbytes)
说明:
- O=../out 表示编译的临时文件输出到out目录,防止和源码混在一起
交叉编译arm64-linux内核,编译完毕后,对应目录会有生成的内核镜像:
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 O=../out -j32
file ../out/arch/arm64/boot/Image
2.busybox
2.1.download
wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
tar -xvf busybox-1.35.0.tar.bz2
2.2.cross-compile
使用menuconfig修改为静态链接:
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig -j32
Settings
[*] Build static binary (no shared libs)
编译BusyBox可执行文件,并输出到_install目录:
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 install -j32
file _install/bin/busybox
3.initrd
制作initrd步骤略多。这里make_initrd.sh
就是用来自动制作initrd的脚本,内容:
#!/bin/bash
MOUNT_DIR=mnt
CURR_DIR=`pwd`
rm initrd.ext4
dd if=/dev/zero of=initrd.ext4 bs=1M count=32
mkfs.ext4 initrd.ext4
mkdir -p $MOUNT_DIR
mount initrd.ext4 $MOUNT_DIR
cp -arf busybox-1.35.0/_install/* $MOUNT_DIR
cd $MOUNT_DIR
mkdir -p etc dev mnt proc sys tmp mnt etc/init.d/
echo "proc /proc proc defaults 0 0" > etc/fstab
echo "tmpfs /tmp tmpfs defaults 0 0" >> etc/fstab
echo "sysfs /sys sysfs defaults 0 0" >> etc/fstab
echo "#!/bin/sh" > etc/init.d/rcS
echo "mount -a" >> etc/init.d/rcS
echo "mount -o remount,rw /" >> etc/init.d/rcS
echo "echo -e \"Welcome to ARM64 Linux\"" >> etc/init.d/rcS
chmod 755 etc/init.d/rcS
echo "::sysinit:/etc/init.d/rcS" > etc/inittab
echo "::respawn:-/bin/sh" >> etc/inittab
echo "::askfirst:-/bin/sh" >> etc/inittab
chmod 755 etc/inittab
cd dev
mknod console c 5 1
mknod null c 1 3
mknod tty1 c 4 1
cd $CURR_DIR
umount $MOUNT_DIR
echo "make initrd ok!"