准备工作
(1) linux 内核源码, 从github上获取
git clone /torvalds/linux
make kernelversion
(2) 交叉编译工具,从linaro官网()上获取
解压后设置环境变量即可
xz -d gcc-linaro-xxx.tar.xz
tar -xvf gcc-linaro-xxx.tar
export PATH=$PATH:/yourpath
(3) 安装QEMU ,支持arm64需要源码安装/
yum install gtk2-devel
./configure –target-list=aarch64-softmmu
make && make install
安装完成后,有qemu-system-aarch64命令即可
内核代码编译
进入下载好的内核源码目录
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make defconfig
make menuconfig
make -j4
制作文件系统
(1)下载安装busybox : /
make menuconfig
settings->build options->build static library(enable)
make
make install
(2) 制作根文件系统
mkdir rootfs
cp busybox/_install/* rootfs/ -rf
cd rootfs/_install
mkdir dev etc mnt
mkdir -p etc/init.d
在_install/etc/init.d/目录下新建一个文件rcS:
mkdir -p /proc
mkdir -p /tmp
mkdir -p /sys
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
在_inistall/etc/ 目录下新建一个fstab文件:
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
在_inistall/etc/ 目录下新建一个inittab文件:
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
cd init.d
在_install/dev目录下新建节点:
mknod console c 5 1
mknod null c 1 3
返回上层目录,压缩
cd ../..
find . | cpio -o -H newc > rootfs.cpio
gzip -c rootfs.cpio > rootfs.cpio.gz
QEMU启动ARM64虚拟机
qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -m 2048 -smp 2 -kernel linux/arch/arm64/boot/Image -initrd rootfs.cpio.gz -append "rdinit=/linuxrc console=ttyAMA0"
启动成功后,查看内核版本
/ # uname -r
4.20.0-rc4-00007-gef78e5e
关闭虚拟机
另起一个超级终端,输入
killall -9 qemu-system-aarch64
参考文章
《奔跑吧linux内核》第六章