準備工作
(1) linux 內核源碼, 從github上獲取
git clone https://github.com/torvalds/linux
make kernelversion
(2) 交叉編譯工具,從linaro官網(www.linaro.org)上獲取
解壓後設置環境變量即可
xz -d gcc-linaro-xxx.tar.xz
tar -xvf gcc-linaro-xxx.tar
export PATH=$PATH:/yourpath
(3) 安裝QEMU ,支持arm64需要源碼安裝https://www.qemu.org/
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 : https://busybox.net/
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內核》第六章