美文网首页
使用 qemu 运行 linux 5.17

使用 qemu 运行 linux 5.17

作者: android小奉先 | 来源:发表于2022-12-14 22:17 被阅读0次

    本篇介绍

    本篇记录下本地搭建QEMU环境,运行linux 仿真环境,这样就可以运行自己编译或修改的内核了。

    步骤介绍

    安装qemu

    qemu就是linux 仿真环境,可以直接从官网下载源码进行编译。由于我的环境是ubuntu 22.04,因此就下载最新的qemu就好了。

    wget https://download.qemu.org/qemu-7.2.0-rc4.tar.xz
    tar xvf qemu-7.2.0-rc4.tar.xz
    mkdir -p build
    cd build
    ../configure --target-list=arm-softmmu,i386-softmmu,x86_64-softmmu,aarch64-linux-user,arm-linux-user,i386-linux-user,x86_64-linux-user,aarch64-softmmu --audio-drv-list=alsa --enable-virtfs
    make && sudo make install
    

    这儿我遇到一个错误是不支持virtfs,临时解决方法就是把virtfs关掉了。

    编译busybox

    busybox是linux 常用命令的大合集,也是官网下载最新的就好, 我这边是编译arm64架构的:

    wget https://busybox.net/downloads/busybox-1.34.1.tar.bz2
    tar xvjf busybox-1.34.1.tar.bz2
    cd busybox-1.31.1
    mkdir out
    
    # 默认配置编译,也就是动态编译,这样还需要搞依赖的动态库,比较麻烦
    make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=./out defconfig
    
    # 静态编译
    make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=./out menuconfig
    

    执行静态编译后,会有这样一个弹窗


    image.png

    先选中Settings,然后回车走进去,找到 Build static binary(no shard libs),然后选中,再一路exit退出


    image.png

    这样继续编译生成根文件系统:

    make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=./out install
    

    继续制作根文件系统:

    cd out/_install
    mkdir -pv {bin,dev,d,sbin,etc/init.d,mnt,proc,sys,usr/{bin,sbin},tmp}
    sudo mknod dev/null c 1 3
    sudo mknod dev/console c 5 1
    
    我们知道linux的第一个进程是init,那么根文件系统中也需要一个init,直接将linuxrc 重命名成init 就好了
    mv linuxrc init
    

    继续制作设备挂载:

    cd out/_install
    新建fstab文件,vim 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 /d debugfs defaults 0 0
    

    创建rcS脚本,让进程启动后自动挂载设备:

    cd out/_install/etc/init.d
    vim rcS
    写入如下内容:
    /bin/mount -a
    mkdir -p /dev/pts
    mount -t devpts devpts /dev/pts
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    
    # mount net9p fs
    mkdir -pv /mnt/net9p
    mount -t 9p -o trans=virtio net9p /mnt/net9p
    

    记得把这个文件权限改成777。

    编译内核

    下载linux源码,然后编译,也是arm64:

    进去linux 代码根目录:
    mkdir out
    # 默认配置
    make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=./out defconfig
    
    # 配置根文件系统
    touch out/out.config
    将下面内容写到该文件中:
    CONFIG_INITRAMFS_SOURCE="your busybox dir  /out/_install"
    CONFIG_INITRAMFS_ROOT_UID=0
    CONFIG_INITRAMFS_ROOT_GID=0
    CONFIG_INITRAMFS_COMPRESSION=".gz"
    
    再merge一下:
    scripts/kconfig/merge_config.sh -m -O out out/.config out/out.config
    
    # 编译内核
    make  ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=./out
    

    qemu 运行kernel

    终于到了最后一步:

    qemu-system-aarch64 -machine virt -cpu cortex-a57 -nographic -smp 1 -m 2048 -kernel out/arch/arm64/boot/Image
    

    顺利的话就可以看到让人兴奋的画面了:


    image.png

    一长串的开机启动log,接下来就会正常开机

    image.png

    这样接下来就可以开始进行修改并运行自己编译的内核了。

    相关文章

      网友评论

          本文标题:使用 qemu 运行 linux 5.17

          本文链接:https://www.haomeiwen.com/subject/pehkqdtx.html