• Qemu搭建Linux环境


    Qemu搭建Linux环境

    背景目的

     在虚拟机中学习linux驱动开发,降低对硬件的依赖。这里使用qemu模拟工具,搭建linux运行环境。在搭建虚拟机中,同时学习如何编译Linux内核、制作根文件系统等。
      以下操作均在ubuntu20.04下进行
    image

    一、准备Qemu

    下载安装qemu

    第一种方式:直接安装

    apt-get install qemu
    

    注意:apt-get 安装可能不是最新的版本。

    第二种方式:源码编译安装

    (1)下载源码

    https://download.qemu.org/
    这里使用6.0版本
    https://download.qemu.org/qemu-6.0.0.tar.xz

    (2)编译安装

    安装依赖包

    sudo apt install libpixman-1-dev
    sudo apt-get install build-essential zlib1g-dev pkg-config libglib2.0-dev binutils-dev libboost-all-dev autoconf libtool libssl-dev libpixman-1-dev libpython-dev python-pip python-capstone virtualenv
    

    解压、配置、编译、安装

    cd qemu-6.0.0
    ./configure --prefix=/home/only/linux_driver/env/qemu
    make -j32
    make install
    

    --prefix=为指定安装目录,编译安装成功后,即可在此目录下的/bin中找到执行文件,根据自己的环境指定即可。

    二、准备内核

    我们使用Linux的内核版本为4.19.95。

    (1)下载源码

    https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.95.tar.gz

    (2)编译

    tar -vxf linux-4.19.95.tar.gz
    cd linux-4.19.95
    make menuconfig
    make -j32
    

    编译完成后,可以在linux-4.19.95/arch/x86_64/boot目录下看到内核镜像bzImage文件

    遇到的问题:

    No rule to make target ‘debian/canonical-certs.pem‘, needed by ‘certs/x509_certificate_list‘. Stop.
    

    image
    解决,修改目录下./config文件,将CONFIG_SYSTEM_TRUSTED_KEYS置空
    image
    修改为
    image

    三、准备文件系统

    我们使用busybox工具来制作一个最小文件系统。

    (1)下载源码

    https://busybox.net/downloads/busybox-1.33.1.tar.bz2

    (2)编译安装

    解压、配置

    cd busybox-1.33.1
    make defconfig
    make menuconfig
    make -j32
    make install
    

    默认安装路径为源码目录_install文件夹下。
    这里我们使能静态编译选项,不用拷贝动态库。

    # 使能静态编译
    Settings
        ->Builds static binary (no shared libs)
    

    其他配置选项:

    # 启动 vi风格命令行
    Settings
        ->vi-style line editing commands
    
    # 使能简洁指令风格
    Linux module Utilities
        ->Simplified modutils
    
    # 使能mdev模块
    Linux System Utilities
        ->mdev (16 kb)
    

    (3)准备根文件系统

    创建rootfs,将busybox编译出来的文件复制过去

    cd busybox-1.33.1
    cp -rd _install/* ../rootfs/
    

    创建其他文件夹

    mkdir dev etc lib proc root tmp sys mnt opt var
    

     
    dev:设备文件存储目录,应用程序通过对这些文件的读写和控制以访问实际的设备
    etc:系统配置文件的所在地,一些服务器的配置文件\用户账号以及密码配置文件\busybox启动脚本等
    lib:系统库文件存放目录
    proc:操作系统运行时,进程及内核信息存放在这里。/proc目录为伪文件系统proc的挂载目录,不是真正的文件系统,它存在与内存中。
    root:超级用户的目录
    tmp:存放临时文件
    sys:sysfs文件系统挂载目录
    mnt:用于存放挂载存储设备的挂载目录
    opt:可选目录
    var:交换分区,或者系统日志/var/log
     
     
    以下可以参考:busybox-1.33.1/examples & busybox-1.33.1/examples/bootfloppy/etc

    (4)创建inittab文件

      inittab为init初始化程序用到的配置文件。
    创建文件:

    vim etc/inittab
    

    添加:

    #etc /inittab
    ::sysinit:/etc/init.d/rcS
    console::askfirst:-/bin/sh
    ::restart:/sbin/init
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a -r
    ::shutdown:/sbin/swapoff -a
    

    2:指定系统启动后运行的脚本
    3:将console作为控制台终端
    4:重启则运行/sbin/init
    5:按下ctrl+alt+del组合键的话,则运行/sbin/reboot,即设置重启键
    6:关机卸载各个文件系统
    7:关机时关闭交换分区

    (3)创建rcS启动脚本

    创建文件:

    mkdir etc/init.d
    vim etc/init.d/rcS
    

    添加:

    #! /bin/sh
    
    /bin/mount -a
    
    /sbin/mdev -s
    

    3:挂载所有文件系统,由/etc/fstab来指定
    5:自动创建文件节点
      mdev扫描/sys/class和sys/block中所有的类设备目录,如果在目录中含有名为”dev“的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点文件。一般只在启动时才执行一次”mdev -s“。

    创建完成后,添加执行权限

    chmod 755 rcS
    

    (4)创建fstab文件

      /etc/fstab是用来存放文件系统信息的文件;当系统启动的时候,系统会从这个文件读取信息,并且将此文件中指定的文件系统挂载到指定的目录。
    创建文件:

    vim etc/fstab
    

    添加:

    #<file system> <mount point>    <type>  <options>       <dump> <pass>
    proc            /proc           proc    defaults        0       0
    tmpfs           /tmp            tmpfs   defaults        0       0
    sysfs           /sys            sysfs   defaults        0       0
    

    2:挂载proc文件系统
    3:挂载tmpfs
    4:挂载sysfs文件系统

    (5)打包image文件

    将rootfs文件夹打包成image文件

    cd rootfs
    find . | cpio -o --format=newc > ../initrd.img
    

    打包完成后,即可在rootfs同级目录中找到文件系统镜像initrd.img

    四、创建qemu启动脚本

    vim start.sh
    

    添加启动参数

    /home/only/linux_driver/env/qemu/bin/qemu-system-x86_64 -m 4096 -smp 4 -M q35 \
    	-nographic \
    	-kernel /home/only/linux_driver/linux-4.19.95/arch/x86_64/boot/bzImage \
    	-initrd /home/only/linux_driver/env/initrd.img \
    	-append "root=/dev/ram rw rdinit=/linuxrc console=ttyS0"
    

    -kernel:指定内核文件
    -initrd:指定根系统文件
    -append:启动参数
    root=/dev/ram rw:使用ramdisk虚拟文件系统
    rdinit=/linuxrc:指定init启动程序

    添加运行权限,运行脚本

    chmod +x ./start.sh
    ./start.sh
    

    系统启动成功
    image

  • 相关阅读:
    bzoj3653: 谈笑风生
    bzoj1858: [Scoi2010]序列操作
    bzoj1857: [Scoi2010]传送带
    bzoj1856: [Scoi2010]字符串
    bzoj1855: [Scoi2010]股票交易
    bzoj1854: [Scoi2010]游戏
    bzoj1853: [Scoi2010]幸运数字
    斜堆,非旋转treap,替罪羊树
    NOI2003 文本编辑器
    A_star poj2449 k短路
  • 原文地址:https://www.cnblogs.com/littleKuBao/p/15057575.html
Copyright © 2020-2023  润新知