美文网首页
Ubuntu环境下使用qemu搭建arm64运行环境

Ubuntu环境下使用qemu搭建arm64运行环境

作者: 人活一世 | 来源:发表于2021-10-10 23:28 被阅读0次

    一、安装qemu

    sudo apt install qemu
    安装成功后qemu- 提示


    image.png

    二、安装跨平台编译器

    sudo apt install gcc-aarch64-linux-gnu
    安装后查看下版本
    aarch64-linux-gnu-gcc -v


    image.png

    三、下载并编译linux kernel

    git clone https://github.com/torvalds/linux.git
    (*注意时间有些长要耐心等待)
    下载完后进行编译
    先调到自己需要的linux kernel版本
    cd linux
    git checkout v5.1

    3.1、编译开始

    export ARCH=arm64
    export CROSS_COMPILE=aarch64-linux-gnu-
    (注:指定编译器)
    make
    make install

    3.2、创建共享目录

    $ mkdir kmodules

    四、 编译root文件系统

    下载busybox 地址 : http://busybox.net/downloads/
    我这下载的是 busybox-1.34.1 版本
    cd busybox-1.34.1

    4.1、指定工具链

    export ARCH=arm64
    export CROSS_COMPILE=aarch64-linux-gnu-

    4.2、配置

    make menuconfig
    注:此时应该全屏,然后进入配置页面, 设置成静态编译
    Settings --->
    [*] Build static binary (no shared libs)

    4.3、编译安装

    make
    make install

    4.4、完善其他目录结构 上面我们编译安装完成之后会在busybox源码目录的_install目录下生成必要的一些文件:

    $ ls
    bin linuxrc sbin usr
    可以看到都是一些命令相关的文件已经作为init进程的linuxrc,缺少其他的一些配置文件等目录,所以需要进一步完善。
    我们来创建其他需要的目录:
    mkdir dev etc lib sys proc tmp var home root mnt
    我们主要需要更新etc、dev和lib目录:

    4.4.1. 对于etc目录的更新:

    添加profile文件:
    #!/bin/sh
    export HOSTNAME=liebao
    export USER=root
    export HOME=/home
    export PS1="[USER@HOSTNAME \W]# "
    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
    export PATH LD_LIBRARY_PATH
    可以看到我们自定义了命令提示符,cd进入了我们制定的家目录homes,导出了环境变量。

    添加inittab文件:
    ::sysinit:/etc/init.d/rcS
    ::respawn:-/bin/sh
    ::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
    这个是init进程解析的配置文件,通过这个配置文件决定执行哪个进程,何时执行。

    添加fstab文件:
    #device mount-point type options dump fsck order
    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
    kmod_mount /mnt 9p trans=virtio 0 0
    指定挂载的文件系统。

    创建init.d目录:
    mkdir init.d
    init.d下添加rcS文件:
    mkdir -p /sys
    mkdir -p /tmp
    mkdir -p /proc
    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
    到此我们etc下的文件都制作好了,目录结构如下:
    $ tree
    .
    ├── fstab
    ├── init.d
    │ └── rcS
    ├── inittab
    └── profile
    1 directory, 4 files

    4.4.2、制作dev下必要文件:

    cd dev/
    sudo mknod console c 5 1
    制作lib下必要文件:为了支持动态编译的应用程序的执行,根文件系统需要支持动态库,所以我们添加arm64相关的动态库文件到lib下:
    cd lib
    cp /usr/aarch64-linux-gnu/lib/.so -a .
    对库文件进行瘦身(去除符号表和调试信息),使得库文件变小:
    aarch64-linux-gnu-strip *
    至此,我们的最小的根文件系统已经全部制作完成!

    4.5、制作磁盘文件

    cd busybox
    dd if=/dev/zero of=rootfs_ext4.img bs=1M count=256
    mkfs.ext4 rootfs_ext4.img
    mkdir -p tmpfs
    mount -t ext4 rootfs_ext4.img tmpfs/ -o loop
    cp -af _install/* tmpfs/
    umount tmpfs
    rm -rf tmpfs
    chmod 777 rootfs_ext4.img

    5.开始启动

    cd linux
    qemu启动命令
    qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -m 512 -smp 1 -nographic
    -kernel arch/arm64/boot/Image
    -drive format=raw,file=../busybox/rootfs_ext4.img
    -append "noinitrd root=/dev/vda rw console=ttyAMA0 loglevel=8"
    -fsdev local,id=kmod_dev,path=$PWD/kmodules,security_model=none
    -device virtio-9p-device,fsdev=kmod_dev,mount_tag=kmod_mount
    启动后页面

    image.png
    (命令参数介绍)Linker option :
    -cpu 指定处理器的架构
    -smp 指定处理器的个数
    -m 指定内存的大小
    -nographic 不启动图形界面
    -kernel 指定编译生成的内核镜像的存放位置
    -append 是内核启动的附加
    -drive 指定之前制作生成的根文件系统的镜像位置

    6. 共享文件夹的使用

    前面已经支持了主机和 qemu 上的系统共享目录,这个目录就是kmodules目录:通过mount可以查看被挂载到了qemu上的系统的/mnt目录下
    在主机的内核源码目录的kmodules目录中echo一个文件:
    cd linux/kmodules
    $ echo "Hello QEMU" > test.txt
    然后进入到我们启动qemu的内核根文件系统的/mnt目录:
    [root@liebao ]# cd /mnt/
    [root@liebao mnt]# ls
    [root@liebao mnt]# ls
    test.txt
    [root@liebao mnt]#
    [root@liebao mnt]# cat test.txt
    Hello QEMU

    相关文章

      网友评论

          本文标题:Ubuntu环境下使用qemu搭建arm64运行环境

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