一. 掌握Linux系统编译工具链的使用,环境依赖库配置等。
1)在自己的虚拟机Ubuntu系统下,按照指南逐步编译 mininim源码(波斯王子重制开源版),思考主要步骤的作用和含义。最终完成游戏编译并运行之。 记录完整的操作步骤和故障解决办法。
首先下载Ubuntu18ROS 链接: https://pan.baidu.com/s/1a7Ni22EIFLJC2BVEvOh4Bg?pwd=huzr 提取码: huzr
然后按照链接中的文档一步步地进行,通过网盘分享的文件:波斯王子游戏(重制开源版---Mininim)的Ubuntu平台编译.md
链接: https://pan.baidu.com/s/18K4pSBi3xj8EBdBKEZzYrQ 提取码: n96r
最后可以将游戏编译并成功运行.
遇到的故障:在更新时遇到了 GPG 签名验证失败 的问题
解决办法 :
步骤 1:手动添加 ROS 的 GPG 密钥
执行以下命令下载并安装 ROS 官方 GPG 密钥:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F42ED6FBAB17C654
如果提示 keyserver timed out
或连接失败,可以尝试其他密钥服务器,例如:
sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys F42ED6FBAB17C654
步骤 2:更新软件源索引
添加密钥后,重新执行更新命令:
sudo apt update
补充:检查 ROS 软件源配置
确保 /etc/apt/sources.list.d/ros-latest.list
文件中 ROS 源的地址正确(适用于 Ubuntu 18.04 Bionic):
deb http://packages.ros.org/ros/ubuntu bionic main
如果该文件不存在或内容错误,可以手动创建或修改:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
验证更新结果
执行 sudo apt update
后,若不再出现关于 EXPKEYSIG F42ED6FBAB17C654
的错误,说明 ROS 源已成功更新。如果仍有问题,可能需要进一步检查网络连接或尝试更换镜像源(例如使用国内 ROS 镜像源,如清华大学源)。
2)思考如何将编译好的mininim的二进制执行程序、游戏资源库data,已经执行程序所依赖的各种动态链接库,打包,复制到另外一台Ubuntu系统,直接运行? 记录操作过程。
1. 创建打包目录
首先,创建一个新目录用于存放所有需要打包的文件:
mkdir mininim_package
2. 复制 mininim
二进制文件和游戏资源库
将 mininim
二进制文件和游戏资源库(假设为 data
目录)复制到打包目录中:
cp /home/lyy/mininim/mininim mininim_package/
cp -r /home/lyy/mininim/data mininim_package/ # 若 data 目录存在
3. 复制依赖的动态链接库
依据 ldd
的输出,把所有依赖的动态链接库复制到打包目录:
#!/bin/bash
# 依赖库列表
DEPENDENCIES=(
"/lib/x86_64-linux-gnu/libm.so.6"
"/lib/x86_64-linux-gnu/libreadline.so.7"
"/usr/local/lib/liballegro.so.5.2"
"/usr/local/lib/liballegro_image.so.5.2"
"/usr/local/lib/liballegro_audio.so.5.2"
"/usr/local/lib/liballegro_acodec.so.5.2"
"/usr/local/lib/liballegro_font.so.5.2"
"/usr/local/lib/liballegro_primitives.so.5.2"
"/usr/local/lib/liballegro_dialog.so.5.2"
"/usr/local/lib/liballegro_color.so.5.2"
"/usr/lib/liblua50.so.5.0"
"/usr/lib/liblualib50.so.5.0"
"/lib/x86_64-linux-gnu/libc.so.6"
"/lib/x86_64-linux-gnu/libtinfo.so.5"
"/lib/x86_64-linux-gnu/libpthread.so.0"
"/usr/lib/x86_64-linux-gnu/libX11.so.6"
"/usr/lib/x86_64-linux-gnu/libXcursor.so.1"
"/usr/lib/x86_64-linux-gnu/libXi.so.6"
"/usr/lib/x86_64-linux-gnu/libXinerama.so.1"
"/usr/lib/x86_64-linux-gnu/libXrandr.so.2"
"/usr/lib/x86_64-linux-gnu/libOpenGL.so.0"
"/usr/lib/x86_64-linux-gnu/libGLX.so.0"
"/usr/lib/x86_64-linux-gnu/libpng16.so.16"
"/usr/lib/x86_64-linux-gnu/libjpeg.so.8"
"/usr/lib/x86_64-linux-gnu/libwebp.so.6"
"/usr/lib/x86_64-linux-gnu/libopenal.so.1"
"/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0"
"/usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0"
"/usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0"
"/usr/lib/x86_64-linux-gnu/libpango-1.0.so.0"
"/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0"
"/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0"
"/lib/x86_64-linux-gnu/libdl.so.2"
"/usr/lib/x86_64-linux-gnu/libxcb.so.1"
"/usr/lib/x86_64-linux-gnu/libXrender.so.1"
"/usr/lib/x86_64-linux-gnu/libXfixes.so.3"
"/usr/lib/x86_64-linux-gnu/libXext.so.6"
"/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0"
"/lib/x86_64-linux-gnu/libz.so.1"
"/usr/lib/x86_64-linux-gnu/libsndio.so.6.1"
"/lib/x86_64-linux-gnu/librt.so.1"
"/usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0"
"/usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0"
"/usr/lib/x86_64-linux-gnu/libatk-1.0.so.0"
"/usr/lib/x86_64-linux-gnu/libcairo.so.2"
"/usr/lib/x86_64-linux-gnu/libgio-2.0.so.0"
"/usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0"
"/usr/lib/x86_64-linux-gnu/libfontconfig.so.1"
"/usr/lib/x86_64-linux-gnu/libXcomposite.so.1"
"/usr/lib/x86_64-linux-gnu/libXdamage.so.1"
"/usr/lib/x86_64-linux-gnu/libthai.so.0"
"/usr/lib/x86_64-linux-gnu/libffi.so.6"
"/lib/x86_64-linux-gnu/libpcre.so.3"
"/usr/lib/x86_64-linux-gnu/libXau.so.6"
"/usr/lib/x86_64-linux-gnu/libXdmcp.so.6"
"/usr/lib/x86_64-linux-gnu/libasound.so.2"
"/lib/x86_64-linux-gnu/libbsd.so.0"
"/usr/lib/x86_64-linux-gnu/libfreetype.so.6"
"/usr/lib/x86_64-linux-gnu/libpixman-1.so.0"
"/usr/lib/x86_64-linux-gnu/libxcb-shm.so.0"
"/usr/lib/x86_64-linux-gnu/libxcb-render.so.0"
"/lib/x86_64-linux-gnu/libselinux.so.1"
"/lib/x86_64-linux-gnu/libresolv.so.2"
"/lib/x86_64-linux-gnu/libmount.so.1"
"/usr/lib/x86_64-linux-gnu/libharfbuzz.so.0"
"/lib/x86_64-linux-gnu/libexpat.so.1"
"/usr/lib/x86_64-linux-gnu/libdatrie.so.1"
"/lib/x86_64-linux-gnu/libblkid.so.1"
"/usr/lib/x86_64-linux-gnu/libgraphite2.so.3"
"/lib/x86_64-linux-gnu/libuuid.so.1"
)
# 目标目录
TARGET_DIR="mininim_package"
# 复制依赖库
for dep in "${DEPENDENCIES[@]}"; do
cp "$dep" "$TARGET_DIR/"
done
把上述脚本保存为 copy_dependencies.sh
,然后赋予执行权限并运行:
chmod +x copy_dependencies.sh
./copy_dependencies.sh
4. 创建启动脚本
为了确保程序能正确找到依赖的动态链接库,创建一个启动脚本 run_mininim.sh
:
#!/bin/bash
# 获取当前脚本所在的目录
SCRIPT_DIR=$(dirname "$(realpath "$0")")
# 设置 LD_LIBRARY_PATH 环境变量
export LD_LIBRARY_PATH=$SCRIPT_DIR:$LD_LIBRARY_PATH
# 运行程序
$SCRIPT_DIR/mininim
将上述脚本保存到 mininim_package
目录中,并赋予执行权限:
chmod +x mininim_package/run_mininim.sh
5. 打包目录
将 mininim_package
目录打包成一个压缩文件,方便复制到另一台 Ubuntu 系统:
tar -czvf mininim_package.tar.gz mininim_package
6. 在另一台 Ubuntu 系统上运行
把 mininim_package.tar.gz
复制到另一台 Ubuntu 系统,然后解压缩:
tar -xzvf mininim_package.tar.gz
进入 mininim_package
目录并运行启动脚本:
cd mininim_package
./run_mininim.sh
通过以上步骤,就可以把 mininim
二进制执行程序、游戏资源库以及所有依赖的动态链接库打包,并在另一台 Ubuntu 系统上直接运行。
二. 在树莓派3B上用python编程完成流水灯实验。
以下是在树莓派 3B 上使用 Python 控制 GPIO 实现流水灯效果的代码:
import RPi.GPIO as GPIO
import time
# 设置GPIO模式为BCM编号
GPIO.setmode(GPIO.BCM)
# 定义LED连接的GPIO引脚
led_pins = [17, 18, 27, 22, 23, 24] # 根据实际连接修改
# 设置所有LED引脚为输出模式
for pin in led_pins:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW) # 初始状态为熄灭
try:
print("按下 Ctrl+C 停止程序")
while True:
# 正向流水
for pin in led_pins:
GPIO.output(pin, GPIO.HIGH) # 点亮LED
time.sleep(0.1) # 延时0.1秒
GPIO.output(pin, GPIO.LOW) # 熄灭LED
# 反向流水
for pin in reversed(led_pins):
GPIO.output(pin, GPIO.HIGH) # 点亮LED
time.sleep(0.1) # 延时0.1秒
GPIO.output(pin, GPIO.LOW) # 熄灭LED
except KeyboardInterrupt:
print("程序已停止")
finally:
# 清理GPIO设置
GPIO.cleanup()
使用说明:
- 将 LED 的阳极 (长脚) 通过 220Ω 电阻连接到 GPIO 引脚 (17,18,27,22,23,24)
- 将 LED 的阴极 (短脚) 连接到树莓派的 GND
- 根据实际连接修改代码中的 led_pins 列表
- 使用 sudo 权限运行脚本:
sudo python3 led_flow.py
- 按 Ctrl+C 终止程序
注意事项:
- 确保已安装 RPi.GPIO 库 (树莓派系统默认安装)
- 操作 GPIO 需使用 sudo 权限
- 调整延时时间可改变流水速度
- 结束程序后会自动清理 GPIO 设置