本文较长,内容步骤较多,完整记录了双系统安装、UE4和AirSim安装过程。

一、Windows11 安装 Ubuntu22.04 双系统

1. 软件下载

Ubuntu22.04 下载地址为:https://ubuntu.com/download/desktop

367e6bfb0e6b632c8de48c7dde5e7f1a

65eff313c4b9b3ac87f37e992ea41347

 详细过程参考文献 1,这里简要记录相关操作过程。

2. 查看系统信息:

通过 win+R 👉输入msinfo32👉系统摘要👉检查BIOS模式为UEFI

同系统摘要下,检查 安全启动模式 为关闭;查看主板制造商为 ASUSTeK COMPUTER INC.(华硕)

5d55922c91efe13960a6deace18614da

 3. 查看物理内存:右键此电脑👉属性👉基带RAM:32.0GB(32768),用来确定虚拟内存的大小,swap = ram(32768 MB) * 2 = 65536 MB(物理大小的两倍)

4. 准备空闲分区,即处于未分配状态的磁盘空间,用于安装Ubuntu系统。通过win+X👉磁盘管理可以进行磁盘分区管理。

image

 5. 制作启动盘(推荐8G以上U盘)

刻录工具使用 Rufus,下载网址为:https://rufus.ie/zh/#download

直接打开Rufus👉设备选择U盘👉引导类型选择需要安装的Ubuntu的ISO文件👉点击开始👉选择ISO镜像模式写入(推荐)👉点击确定等待安装完毕

6. 启动Ubuntu安装程序(下图来自参考文献1)

image

通过以上快速引导按键进入安装程序,选择以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启动系统,就可以进入桌面了。

becafc9da946cacace4bcec8ea6f37d2

 

重启卡死: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

dbd0e12cf5949df04aabc9f06ff55fda

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

94343abe73a7ed0032a25edb4cfbe42e

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

820f8ca348741aa4c641c51496049bb5

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

bb3c3b29b4e58f0d72c4ca7ebc251bb9

4.1 通过http方式下载文件,同文献3一样,下载文件失败。(详细过程参考文献3)

(1)首先通过GitHub配置token,参考文献4。首先通过GitHub账户的Setting。

image

 (2)选择 Developer settings

3f51c95556e2ca1a0b63f537827f183c

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

196cc7991b271d37284ad13ae4ba8669

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

482ba7c93df7579dbee1338c2906579b

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

cd4b12374ff3b2a163316774c7b8e68e

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

image

(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 "这里是你的邮箱"

4920c3dbc917bf1f43b349524d115098

直接点击回车后生成成功。

(3)配置SSH密钥

1 cd ~/.ssh
2 cat id_rsa.pub

b099cab0b35f68d41ba22d1b91d225c9

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

image

 3274e987ec03c2dd02e9f194e59b115f

9d358d16b0d15374080c7a5852036972

0d5fa7b8f10de6ff78319cd28cacc4ef

 (4)通过以下命令下载(如果没有配置上述密钥,下面的命令会显示无法下载)

1 git clone -b 4.27 git@github.com:EpicGames/UnrealEngine.git

image

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

1  cd UnrealEngine 
2  ./Setup.sh

image

 显示成功,File Types 提示框直接关闭即可。

(6)运行工程配置脚本。

1 ./GenerateProjectFiles.sh

image

在编译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

image

 (8)测试安装

1 cd ~/UnrealEngine/Engine/Binaries/Linux/
2 ./UE4Editor

image

image

 三、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

image

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

1 cd AirSim

image

 (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

image

 成功提示

image

 ./build.sh

image

 失败提示

image

 安装库文件

image

 成功提示

image

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

image

(1)实际上出现这个问题是因为没有安装GPU需要的驱动 nvidia-driver

通过命令 ubuntu-drivers devices 进行查看,我使用的 RTX 4070,推荐的版本为 nvidia-driver-580

(2)在此之前我尝试过 nvidia-driver-545

报错如下:

image

 (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

运行以下代码彻底删除
sudo apt purge linux-image-unsigned-5.15.0-160-generic
最后记录一个压缩命令:

image

参考网址:

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