今天在Ubuntu上搭建了一个C-Sky平台的Qemu,下面开始吧。
开发中心
》资源下载
》工具
》模拟器-Qemu
》下载(玄铁QEMU-x86_64-Ubuntu-18.04)
,将下载的压缩包解压到Ubuntu下即可,可选择将bin
目录加入环境变量。qemu-system-cskyv2
程序,发现缺少动态库,安装相应的库即可。$ ldd ./bin/qemu-system-cskyv2 | grep "not find"
libdaxctl.so.1 => not find
libvdeplug.so.2 => not find
libpmem.so.1 => not find
libaio.so.1 => not find
$ sudo apt install libdaxctl-dev libvdeplug-dev libpmem-dev libaio-dev
$ ./bin/qemu-system-cskyv2 --version
QEMU emulator version 6.0.94
Copyright (c) 2003-2021 Fabrice Bellard and the QEMU Project developers
工具
》工具链-800系列
》V3.10.29
》下载(csky-linux-gnuabiv2-tools-x86_64-glibc-linux-4.9.56-20210423)
,我运行环境是Ubuntu20 64位系统,下载上述工具链解压即可,可选择将bin
目录加入环境变量。$ ./bin/csky-abiv2-linux-gcc -v
...
gcc version 6.3.0 (T-HEAD C-SKY Tools V3.10.29 Glibc-2.28.9000 Linux-4.9.56 abiv2 B20210423)
HelloWorld
程序,然后使用qemu-cskyv2
程序执行。main.c
#include
int main(void) { printf("Hello World!!!\n"); return 0; } 编译执行
$ csky-abiv2-linux-gcc main.c -static $ qemu-cskyv2 a.out Hello World!!!
OS
》Linux
》下载(Linux buildroot release)
,这个文档中记录了GitHub的下载连接。readme.txt
Image.xz
rootfs.ext2.xz
三个文件,将后两个压缩包解压出来,得到Image
和rootfs.ext2
两个文件。readme.txt
中的描述,尝试将内核在qemu中跑起来。qemu-system-cskyv2 -M virt -cpu c860v -kernel Image -nographic -append "console=ttyS0,115200 rdinit=/sbin/init rootwait root=/dev/vda ro" -drive file=rootfs.ext2,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -smp 4
sync
命令,刷新完所有缓冲区再强制关机。qemu提供了模拟器和主机的网络通信和文件共享服务,仅需要增加一些启动参数即可,最终我使用的启动参数如下。
qemu-system-cskyv2
不在sudo的搜索路径中,这里使用了绝对路径,/opt/bin/qemu-system-cskyv2
是一个软连接指向qemu-system-cskyv2
的绝对路径;/home/xflm/workspace/csky/qemu/share
是我创建的用于主机和qemu共享的文件夹。#/bin/bash
sudo /opt/bin/qemu-system-cskyv2 \
-M virt \
-cpu c860v \
-m 1G \
-kernel Image \
-append "console=ttyS0,115200 rdinit=/sbin/init rootwait root=/dev/vda ro" \
-drive file=rootfs.ext2,format=raw,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-smp 4 \
-fsdev local,security_model=passthrough,id=fsdev0,path=/home/xflm/workspace/csky/qemu/share \
-device virtio-9p-device,id=fs0,fsdev=fsdev0,mount_tag=hostshare \
-netdev tap,script=no,id=net0 \
-device virtio-net-device,netdev=net0 \
-nographic
使用上述参数启动后,需要在qemu linux中执行如下命令,用于挂载共享目录和设置网络IP。
mount -t 9p -o trans=virtio,version=9p2000.L hostshare /root/share
ifconfig eth0 192.168.101.201
然后需要在主机上执行如下命令,设置主机TAP网卡的IP,此步需要管理员权限。
sudo ifconfig tap0 192.168.101.200
此时,主机和qemu linux可相互ping通,并且共享文件夹也访问正常。
下面这个命令可以启用VNC连接,然目前使用存在问题,暂不深究。
-vnc :5
,表示VNC的连接端口为5905
,IP是主机的IP地址;-k /opt/xuantie-qemu/share/qemu/keymaps/en-us
这个不加的话会提示找不到键盘布局en-us
,could not read keymap file: 'en-us'
。#/bin/bash
sudo /opt/bin/qemu-system-cskyv2 \
-M virt \
-cpu c860v \
-m 1G \
-kernel Image \
-append "console=ttyS0,115200 rdinit=/sbin/init rootwait root=/dev/vda ro" \
-drive file=rootfs.ext2,format=raw,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-smp 4 \
-fsdev local,security_model=passthrough,id=fsdev0,path=/home/xflm/workspace/csky/qemu/share \
-device virtio-9p-device,id=fs0,fsdev=fsdev0,mount_tag=hostshare \
-netdev tap,script=no,id=net0 \
-device virtio-net-device,netdev=net0 \
-vnc :5 \
-k /opt/xuantie-qemu/share/qemu/keymaps/en-us
在qemu环境中模拟Fedora并构建riscv-gnu-toolchain
qemu中使用 9p virtio, 支持 host 和 guest 中共享目录
qemu-system-x86_64命令总结
Could not read keymap file: ‘en-us’ KVM error