Ubuntu 16.04下搭建QEMU虚拟机启动linux kernel

    技术2022-07-10  132

    一:安装QEMU虚拟机

    QEMU 官网下载安装包 https://www.qemu.org/ 本文安装qemu-4.1.1 安装步骤如下: 1):安装库     sudo apt-get install zlib1g-dev     sudo apt-get install libglib2.0-0     sudo apt-get install libglib2.0-dev     sudo apt-get install libtool     sudo apt-get install libsdl1.2-dev     sudo apt-get install autoconf     sudo apt-get install libpixman-1-0     sudo apt-get install libpixman-1-dev 2):config      配置 ./configure --target-list=aarch64-softmmu --audio-drv-list= 3):make     编译源码 4):sudo make install    (安装到系统默认路径,自定义路径须在config 步骤中指定)     安装生成得可执行文件到系统默认路径如下图安装成功

    二:准备Linux内核镜像

    1):配置交叉编译器不再啰嗦 2):Linux内核官网下载linux内核源码,https://www.kernel.org/ 本文所用版本为 linux-4.9.37.tar.gz

    3):解压内核并编译内核,进入内核源码目录linux-4.9.37,编辑编译脚本 build.sh如下:

    4):执行./build.sh 编译生成zImage与dtb文件,我们以arm官方vexpress 开发板为例

    5):在output 目录下我们创建run.sh 脚本如下:

    #!/bin/bash qemu-system-arm -M vexpress-a9  -m 512M  -kernel ./zImage  -dtb ./vexpress-v2p-ca9.dtb  -nographic  -append "console=ttyAMA0" 我们在output目录下执行run.sh启动zImage 启动到最后内核挂在跟文件系统失败报painc错误而崩掉

    我们下载busybox制作rootfs,选用版本为busybox-1.26.2.tgz,解压,进入到busybox-1.26.2目录创建编译脚本build.sh如下:

    #/bin/sh make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install

    执行build.sh 编译生成_install 目录

    我们创建个rootfs目录然后将_install目录下所有文件拷贝到rootfs目录,然后

    mkdir dev

    mkdir app

    mkdir proc

    mkdir sys

    mkdir -p etc/init.d

    在dev目录下创建console 设备文件 sudo mknod console c 5 1

    在etc/init.d 目录下创建rcS文件内容如下:

    #!/bin/sh mount -t proc none /proc mount -t sysfs none /sys /sbin/mdev -s 至此rootfs文件系统制作完成

    我们重新编译内核,在linux-4.9.37 目录下vim .config 添加rootfs路径到.config文件

    或者重新make ARCH=arm menuconfig 配置

    重新编译内核生成zImage 和dtb文件,这次生成的zImage已经包含了rootfs

    编译完成后进入到output目录下,修改run.sh如下: #!/bin/bash qemu-system-arm -M vexpress-a9  -m 512M  -kernel ./zImage  -dtb ./vexpress-v2p-ca9.dtb  -nographic  -append "rdinit=/linuxrc  console=ttyAMA0"

    执行run.sh 成功启动

     

     

    Processed: 0.013, SQL: 9