本文较长,内容步骤较多,完整记录了双系统安装、UE4和AirSim安装过程。
一、Windows11 安装 Ubuntu22.04 双系统
1. 软件下载
Ubuntu22.04 下载地址为:https://ubuntu.com/download/desktop


详细过程参考文献 1,这里简要记录相关操作过程。
2. 查看系统信息:
通过 win+R 👉输入msinfo32👉系统摘要👉检查BIOS模式为UEFI
同系统摘要下,检查 安全启动模式 为关闭;查看主板制造商为 ASUSTeK COMPUTER INC.(华硕)

3. 查看物理内存:右键此电脑👉属性👉基带RAM:32.0GB(32768),用来确定虚拟内存的大小,swap = ram(32768 MB) * 2 = 65536 MB(物理大小的两倍)
4. 准备空闲分区,即处于未分配状态的磁盘空间,用于安装Ubuntu系统。通过win+X👉磁盘管理可以进行磁盘分区管理。

5. 制作启动盘(推荐8G以上U盘)
刻录工具使用 Rufus,下载网址为:https://rufus.ie/zh/#download
直接打开Rufus👉设备选择U盘👉引导类型选择需要安装的Ubuntu的ISO文件👉点击开始👉选择ISO镜像模式写入(推荐)👉点击确定等待安装完毕
6. 启动Ubuntu安装程序(下图来自参考文献1)

通过以上快速引导按键进入安装程序,选择以UEFI模式开头的方式启动。
之后进入Ubuntu安装程序,选择Try Ubuntu(试用)👉Normal installation👉Something else后进入Ubuntu系统分区
7. 分区主要包括四个部分:/ /boot 虚拟内存 /home
| 顺序 | 内容 | 名称 | 空间大小 | 分区类型 | 作用 |
|---|---|---|---|---|---|
| 1 | 根目录 | / | 空闲分区的30% MB | 主分区 | Ext4 |
| 2 | 启动分区 | /boot | 512 MB | 主分区 | Ext4 |
| 3 | 虚拟内存 | - | 65536 MB | 逻辑分区 | 交换空间 |
| 4 | 存放数据 | /home | 除去前面剩下的分区 MB | 主分区 | Ext4 |
8. 设置启动引导位置:注意上方(Mount)选择 /boot;下方(Device for boot loader installation)选择 /boot 所在的 Device
注意:Ubuntu22.04安装时黑屏;重启后进入系统卡死。解决方案参考文献2。
安装时黑屏:1.选择" try or install ubuntu"时不要按enter,按"e"进入编辑模式;2.进入命令行模式, 找到 quiet splash,用nomodeset替换“- - -”,然后按F10启动系统,就可以进入桌面了。

重启卡死:1.重启电脑;2.选择"Advanced options for Ubuntu"打开Ubuntu的高级选项;3.选择"recovery mode"恢复模式进入;4.选择"Drop to root shell prompt",打开root shell 命令行页面;5.命令行中输入"sudo vi /etc/default/grub"修改grub文件;6.修改grub文件内容;
1 1.输入i进入编辑模式,通过键盘的上下左右按键来移动光标,再编辑文本。 2 2.将GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"修改为GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"。 3 3.点击Esc退出编辑模式,再输入:wq保存grub文件。
7.更新文件并重启;
1 1.先sudo update-grub更新引导程序的配置。 2 2.再执行reboot重启Ubuntu。
二、Ubuntu22.04 安装 Unreal Engine(参考文献3)
虚幻引擎在Linux上开发的必需软件查看: https://dev.epicgames.com/documentation/zh-cn/unreal-engine/linux-development-requirements-for-unreal-engine?application_version=5.0
1. 进入虚幻引擎的官网注册账户(Epic Games账户)https://www.unrealengine.com/zh-CN

2. 注册一个Github账户 https://github.com/EpicGames

3. 利用注册的Epic Games账户登录UnrealEngine.com官网,在用户👉账户中打开账户控制板,在这里和Github账号进行关联。

Github会发送电子邮件,必须在7天内加入Epic Games。

4.1 通过http方式下载文件,同文献3一样,下载文件失败。(详细过程参考文献3)
(1)首先通过GitHub配置token,参考文献4。首先通过GitHub账户的Setting。

(2)选择 Developer settings

(3)选择Personal access tokens👉Generate new token(For general use)

(4)Expiration是token的有效日期,可以自己选择,如果从命令行操作仓库,至少选中 repo。

(5)接下来,点击 Generate token 生成 token,后面github使用用户名和这个 token 进行验证,这个 token 相当于密码。

(6)复制保存这个密码,离开之后将不是明文。

(7)通过以下命令,输入GitHub账号和密码(token)后,即可开始下载。
1 git clone -b 4.27 https://github.com/EpicGames/UnrealEngine.git
4. 2 通过 git 的方式进行文件下载
(1)配置ssh密钥
1 cd ~/.ssh 2 ls
先查看是否存在SSH密钥,查看是否有id_rsa和id_rsa.pub这两个文件。
(2)生成SSH密钥
1 ssh-keygen -t rsa -C "这里是你的邮箱"

直接点击回车后生成成功。
(3)配置SSH密钥
1 cd ~/.ssh 2 cat id_rsa.pub

通过以上代码将公钥复制到GitHub中(Settings->SSH and GPG keys -> New SSH key)




(4)通过以下命令下载(如果没有配置上述密钥,下面的命令会显示无法下载)
1 git clone -b 4.27 git@github.com:EpicGames/UnrealEngine.git

(5)编译UE4(进入工程文件夹;运行脚本,配置依赖环境)--UE4的./Setup.sh执行起来很费时,可能中间出现下载文件失败的提示,这个不要紧,继续运行./Setup.sh即可。
1 cd UnrealEngine 2 ./Setup.sh

显示成功,File Types 提示框直接关闭即可。
(6)运行工程配置脚本。
1 ./GenerateProjectFiles.sh

在编译make前更改代码
1 //{UE4 workplace}/Engine/Source/Developer/DesktopPlatform/Private/DesktopPlatformBase.cpp 2 //before 3 Arguments += " -Progress -NoEngineChanges -NoHotReloadFromIDE" 4 5 //after 6 Arguments += " -Progress"
(7)编译UE4。
1 make

(8)测试安装
1 cd ~/UnrealEngine/Engine/Binaries/Linux/ 2 ./UE4Editor


三、Ubuntu22.04 安装 AirSim(AirSim 官方配置文档:https://microsoft.github.io/AirSim/build_linux/ )
AirSim源码官方网址:https://github.com/microsoft/AirSim
(1)通过终端下载AirSim
1 git clone https://github.com/Microsoft/AirSim.git

(2)进入Airsim目录(由于我将Airsim下载到了UnrealEngine目录下,首先通过 mv 命令将其移出)
1 cd AirSim

(3)因为Ubuntu22.04下的clang和gcc版本和Ubuntu18.04下的不同,所以需要先更改,参考文献6。(AirSim默认是8版本)
1 Package 'clang-8' has no installation candidate, Ubuntu 22.04 2 3 Row | Old Value --> New Value 4 5 setup.sh 6 53 | vulkan-utils --> vulkan-tools 7 63 | sudo apt-get install -y clang-8 clang++-8 libc++-8-dev libc++abi-8-dev --> sudo apt-get install -y clang-12 clang++-12 libc++-12-dev libc++abi-12-dev 8 9 build.sh 10 67 | export CC="gcc-8" --> export CC="gcc-12" 11 68 | export CXX="g++-8" --> export CXX="g++-12" 12 70 | export CC="clang-8" --> export CC="clang-12" 13 71 | export CXX="clang++-12" --> export CXX="clang++-12" 14 15 cmake/cmake-modules/CommonSetup.cmake 16 62 | set(CXX_EXP_LIB "-L${LLVM_LIBRARY_DIRS} -lc++fs -ferror-limit=10") --> set(CXX_EXP_LIB "-L${LLVM_LIBRARY_DIRS} -ferror-limit=10") 17 64 | set(CXX_EXP_LIB "-lstdc++fs -fmax-errors=10 -Wnoexcept -Wstrict-null-sentinel") --> set(CXX_EXP_LIB "-fmax-errors=10 -Wnoexcept -Wstrict-null-sentinel") 18 19 ros2/src/airsim_ros_pks/CMakeLists.txt 20 37 | -lstdc++fs -fmax-errors=10") --> -fmax-errors=10") 21 22 Unity/build.sh 23 21 | export CC=/usr/local/opt/llvm@8/bin/clang --> export CC=/usr/local/opt/llvm@12/bin/clang 24 22 | export CXX=/usr/local/opt/llvm@8/bin/clang++ --> export CXX=/usr/local/opt/llvm@12/bin/clang++ 25 24 | export CC="clang-8" --> export CC="clang-12" 26 25 | export CXX="clang++-8" --> export CXX="clang++-12"
(4)安装
1 ./setup.sh 2 sudo apt-get -y install libunwind-dev libstdc++-12-dev //参考文献7 3 ./build.sh #该步骤如果安装失败请使用sudo 4 # ./build.sh --debug 和上述步骤二选一
./setup.sh

成功提示

./build.sh

失败提示

安装库文件

成功提示

四、利用UE4运行Block时出现的错误及处理

(1)实际上出现这个问题是因为没有安装GPU需要的驱动 nvidia-driver
通过命令 ubuntu-drivers devices 进行查看,我使用的 RTX 4070,推荐的版本为 nvidia-driver-580
(2)在此之前我尝试过 nvidia-driver-545
报错如下:

(3)强制清理与重新安装步骤如下:
①尝试完成所有被中断的包配置过程
1 sudo dpkg --configure -a
②强制移除处于错误状态的核心包
1 sudo dpkg --remove --force-remove-reinstreq nvidia-dkms-545 nvidia-driver-545
③进行最彻底的清理(此命令会清除所有NVIDIA相关包的配置和数据)
1 sudo apt-get purge '*nvidia*' '*cuda*' '*cublas*' 2 sudo apt autoremove 3 sudo apt autoclean
④修复被破坏的依赖关系并更新系统
1 sudo apt --fix-broken install 2 sudo apt update 3 sudo apt upgrade
⑤完成上述清理后,重启计算机
1 sudo reboot
⑥在干净的状态下重新安装驱动
1 sudo apt install nvidia-driver-580
五、由于之前安装了一个版本较低的内核 5.15 版本的,下面记录以下其卸载过程
|
步骤
|
命令
|
目的与说明
|
|---|---|---|
|
1. 确认当前内核
|
uname -r |
必须确认当前运行的内核不是
5.15.0-160-generic。如果是,请重启并选择其他内核启动。 |
|
2. 列出所有内核
|
dpkg --list | grep linux-image |
查看系统已安装的所有内核包。找到名为
linux-image-5.15.0-160-generic 的行。 |
|
3. 删除内核镜像
|
sudo apt remove linux-image-5.15.0-160-generic |
移除该版本的内核镜像主体。
|
|
4. 删除内核头文件
|
sudo apt remove linux-headers-5.15.0-160-generic |
通常与内核镜像配套安装,一并移除。
|
|
5. 删除内核模块
|
sudo apt remove linux-modules-5.15.0-160-generic |
移除该内核对应的模块包。
|
|
6. 清理残留配置
|
sudo apt purge linux-image-5.15.0-160-generic |
使用
purge 彻底删除配置文件(如果第3步已删则自动跳过)。 |
|
7. 更新引导列表
|
sudo update-grub |
更新GRUB启动菜单,移除已删除内核的选项。
|
操作完成后,再次运行 dpkg --list | grep linux-image 检查,5.15.0-160-generic 对应的行应该已经消失。
实际上还有以下代码存在
rc linux-image-unsigned-5.15.0-160-generic 5.15.0-160.170 amd64 Linux kernel image for version 5.15.0 on 64 bit x86 SMP

参考网址:
1. https://blog.csdn.net/qq_42313591/article/details/136007211?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1-136007211-blog-135889995.235%5Ev43%5Econtrol&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1-136007211-blog-135889995.235%5Ev43%5Econtrol&utm_relevant_index=1
2. https://blog.csdn.net/Galaxy_1229/article/details/148112265
3. https://blog.csdn.net/qq_64671439/article/details/135429839
4. https://blog.csdn.net/chengwenyang/article/details/120060010?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170454436616800197060091%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170454436616800197060091&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-120060010-null-null.142%5Ev99%5Epc_search_result_base9&utm_term=github%20token&spm=1018.2226.3001.4187
5. https://blog.csdn.net/weixin_58660639/article/details/147927822?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-2-147927822-blog-135429839.235%5Ev43%5Econtrol&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-2-147927822-blog-135429839.235%5Ev43%5Econtrol&utm_relevant_index=3
6. https://blog.csdn.net/weixin_52000358/article/details/146281075?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1-146281075-blog-127618615.235%5Ev43%5Epc_blog_bottom_relevance_base3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1-146281075-blog-127618615.235%5Ev43%5Epc_blog_bottom_relevance_base3&utm_relevant_index=1