在 QEMU 模拟运行龙芯操作系统

出自龙芯梦兰知识库

跳转到: 导航, 搜索

QEMU 是一个通用和开源的模拟器也是虚拟机,它可以模拟或虚拟多种架构的平台,其中就包含 MIPS 架构。QEMU 支持系统级模拟或虚拟,也支持用户级模拟或虚拟。

龙芯处理器是一种 MIPS 指令兼容的处理器,在其兼容的 MIPS ISA 的基础上做了一些指令扩展(MMI、专用指令等等)。龙芯2F处理器是兼容 MIPS3 ISA的,龙芯3A处理器是兼容 MIPS64R1 的。

目前,应用于龙芯2F和3A平台的操作系统在保证兼容性的考虑下多数是使用 MIPS3 ISA 编译的,有的仍然是 MIPS1 ISA。这样的操作系统在更换了内核程序后是可以运行在其指令兼容的平台上的,如 Malta (5Kf)上。

目录

编译、安装 QEMU

为了能够模拟运行龙芯操作系统,可以使用 QEMU 中的 Malta 机型,配合 MIPS 5Kf 处理器(64位,MIPS64R1指令兼容)。Malta 机型存在 256M RAM 限制,这是因为在设计中将设备映射到了物理地址空间的256M之后。提升容量见 提升 QEMU 中 MIPS-Malta 机器的 RAM 容量上限

wget http://wiki.qemu.org/download/qemu-1.2.0.tar.bz2
wget http://dev.lemote.com/wiki/images/5/56/Qemu-mips-malta.diff
tar xf qemu-1.2.0.tar.bz2
cd qemu-1.2.0
patch -Np1 -i Qemu-mips-malta.diff # RAM
./configure --prefix=/usr --sysconfdir=/etc \
            --python=/usr/bin/python2 \
            --audio-drv-list=oss,alsa,sdl,pa \
            --audio-card-list=ac97,sb16,es1370,hda \
            --target-list=mipsel-softmmu,mips64el-softmmu
make
make install

编译专用内核

如需提升 RAM,内核也需打补丁,详见 提升 QEMU 中 MIPS-Malta 机器的 RAM 容量上限

wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.5.6.tar.bz2
wget http://dev.lemote.com/wiki/images/4/4a/Mips-malta.diff
wget http://dev.lemote.com/wiki/images/d/d1/Config.malta.txt
tar xf linux-3.5.6.tar.bz2
cd linux-3.5.6
patch -Np1 -i Mips-malta.diff
mv Config.malta.txt .config
make ARCH=mips CROSS_COMPILE=mips64el-unknown-linux-gnu- vmlinux modules
make ARCH=mips INSTALL_MOD_PATH=/tmp modules_install

制作系统镜像

先准备好操作系统文件,可从现有的机器中复制,也可以下载系统镜像文件。这里需要的是一个全盘镜像(包含分区表)。

truncate -s 10G hd.img
fdisk hd.img  # 创建一个分区,使用所有空间。(命令:n p <回车> <回车> <回车> w)
fdisk -l hd.img
=> Device Boot      Start         End      Blocks   Id  System
=> hd.img1            2048    20971519    10484736   83  Linux
sudo losetup -f -o 1048576 hd.img  # 1048576 = 2048 * 512,偏移量是分区 Start * 一个扇区大小,即是该分区首地址在映射文件中的偏移地址。
sudo losetup -a
=> /dev/loop0: [2051]:7211881 (/home/heiher/work/hd.img)
sudo mkfs.ext4 /dev/loop0
sudo losetup -d /dev/loop0
sudo mount -o loop,offset=1048576 hd.img /mnt
sudo cp -a /xxx/system/* /mnt # 复制操作系统文件
sudo cp -a /tmp/lib/modules/* /mnt/lib/modules/ # 复制内核模块
sudo umount /mnt

运行操作系统

qemu-mips64el -M malta -cpu 5Kf -m 2047m -hda hd.img -kernel vmlinux -append "root=/dev/sda1 console=tty quiet"
个人工具
名字空间
变换
动作
导航
工具箱