一波三折终于在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