centos7 编译 qemu 8.1.0

target x86_64-linux-user 的编译

参考链接

qemu官方对centos7的编译支持到2021年4月,所以qemu 8.1.0的linux-user在centos7上编译不过,官方是不管的。
为了编译通过需要自己手动修改qemu的源码,只能修复一些宏参数的缺失,修改的基本思路是:

  • 如果在系统中能够找到对应的宏定义,则包含对应的头文件
  • 如果找不到,则屏蔽相应的代码

这个解决方法对应的qemu版本是8.0.0
修复的问题是

linux-user: Fix the build on systems without SOL_ALG
linux-user: Fix the build on systems without MAP_SHARED_VALIDATE
linux-user: Fix the build on systems without MADV_{KEEP,WIPE}ONFORK

qemu 8.1.0新增一个问题

linux-user: 缺少 NETLINK_SMC

修复方法

  1. 在linux-user/mmap.c的20行添加
#include <linux/mman.h>
  1. 在linux-user/syscall.c的124行添加
#include <linux/mman.h>
  1. 注释linux-user/strace.c的576行的NETLINK_SMC分支
#ifdef NETLINK_SMC
  case NETLINK_SMC
  ...
#endif
  1. 注释linux-user/syscall.c的1851行的SOL_ALG分支
#ifdef SOL_ALG
  }else if (cmsg->cmsg_level == SOL_ALG)
  ...
#endif
posted @ 2024-03-21 16:32  hjfande  阅读(165)  评论(0)    收藏  举报