成功在Fedora40上运行DragonOS

一波三折终于在Fedora40发行版上编译运行DragonOS,遇到了不少困难:

  • 依赖安装

tools/build_gcc_toolchain.sh 安装交叉编译工具链时只提供了Debian/ArchLinux的依赖项安装。Fedora上等效的命令是

sudo dnf install gcc gcc-c++ make texinfo gmp-devel libmpf-devel mpfr-devel flex wget2 wget2-libs wget2-wget

手动安装解决。

  • 编译gcc-11.3.0报错

这个我也不知道怎么解决

./../gcc-11.3.0/libiberty/simple-object-mach-o.c: 在函数‘simple_object_mach_o_write_segment’中: ../../gcc-11.3.0/libiberty/simple-object-mach-o.c:1231:17: 错误:传递‘set_32’的第 1 个参数时在不兼容的指针类型间转换 [-Wincompatible-pointer-types] 1231 | set_32 (&index[i], index[i]); | ^~~~~~~~~ | | | unsigned int *

通过系统包管理器安装的 gcc 是14.1.1版本,可能是太新了。

最后想出了一个偷懒的办法。把 Ubuntu 22.04 虚拟机上编译好的 gcc-x86_64-unknown-none 压缩下载,然后拿U盘拷贝到 Fedora (安装在物理机上),就算安装成功了。

  • qemu

第一次 make run 的时候 qemu 报了一堆类似参数选项的文字。查阅DragonOS社区相关帖子,决定卸载dnf安装的qemu v8.2.2,从源码编译安装 v9.0.1。

安装依赖:

sudo dnf install -y autoconf automake autogen-libopts curl libmpc-devel mpfr-devel gmp-devel gawk bison flex texinfo gperf libtool patch bc zlib-devel expat-devel pkgconfig glib2-devel pixman-devel SDL2-devel git tmux python3 python3-pip ninja-build

然后按照文档给出的编译命令

./configure --enable-kvm
make -j 8
sudo make install

但是运行时还是报错

qemu-system-x86_64: -netdev user,id=hostnet0,hostfwd=tcp::12580-:12580: network backend 'user' is not compiled into this binary

查阅资料 qemu - network backend ‘user’ is not compiled into this binary - Stack Overflow

得知需要安装libslirp-devel

sudo dnf install libslirp-devel

在qemu编译选项加上–enable-slirp

# qemu 源码目录
./config --enable-kvm --enable-slirp

再次编译qemu,成功启动DragonOS

3 个赞