嵌入式编译工具链熟悉与游戏移植

发布于:2025-06-20 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、Linux 系统编译工具链使用与 mininim 源码编译

在 Ubuntu 系统上编译 mininim 开源游戏需要正确配置编译工具链和依赖库。以下是详细的操作步骤和故障解决方法:

1. 环境准备与源码获取

首先需要安装必要的编译工具和依赖库:

# 更新系统软件包索引
sudo apt update

# 安装编译工具链
sudo apt install build-essential cmake git

# 安装Allegro游戏库及其依赖
sudo apt install liballegro5-dev liballegro-image5-dev \
liballegro-audio5-dev liballegro-acodec5-dev \
liballegro-font5-dev liballegro-ttf5-dev \
liballegro-primitives5-dev liballegro-dialog5-dev

# 安装Lua脚本语言支持
sudo apt install lua5.3 liblua5.3-dev
2. 下载 mininim 源码

从 GitHub 仓库克隆 mininim 源码:

git clone https://github.com/mininim-game/mininim.git
cd mininim
3. 配置与编译

创建构建目录并使用 CMake 配置项目:

mkdir build
cd build
cmake ..

如果 CMake 配置过程中提示缺少依赖,需要安装相应的库。配置完成后进行编译:

make -j$(nproc)
4. 故障排除:GPG 签名验证失败

在更新软件源时可能遇到 GPG 签名验证失败的问题,可按以下步骤解决:

步骤 1:手动添加 ROS 的 GPG 密钥

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F42ED6FBAB17C654

如果提示连接失败,可尝试其他密钥服务器:

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'
5. 运行游戏

编译成功后,在 build 目录下会生成 mininim 可执行文件,运行游戏:

./mininim

二、打包与分发 mininim 游戏

将编译好的 mininim 游戏打包以便在其他 Ubuntu 系统上运行的步骤如下:

1. 创建打包目录并复制文件
mkdir mininim_package
cp /path/to/mininim/build/mininim mininim_package/
cp -r /path/to/mininim/data mininim_package/  # 复制游戏资源
2. 收集依赖的动态链接库

使用以下脚本复制所有依赖的动态链接库到打包目录:

#!/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/liblua5.3.so.5.3"
    "/lib/x86_64-linux-gnu/libc.so.6"
    "/lib/x86_64-linux-gnu/libtinfo.so.5"
    "/lib/x86_64-linux-gnu/libpthread.so.0"
    # 其他依赖库...
)

# 目标目录
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
3. 创建启动脚本

创建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
4. 打包与分发

将打包目录压缩:

tar -czvf mininim_package.tar.gz mininim_package

在另一台 Ubuntu 系统上,解压缩并运行:

tar -xzvf mininim_package.tar.gz
cd mininim_package
./run_mininim.sh

三、树莓派 3B 流水灯实验

以下是在树莓派 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()

使用说明:

  1. 将 LED 的阳极 (长脚) 通过 220Ω 电阻连接到 GPIO 引脚 (17,18,27,22,23,24)
  2. 将 LED 的阴极 (短脚) 连接到树莓派的 GND
  3. 根据实际连接修改代码中的led_pins列表
  4. 使用 sudo 权限运行脚本:sudo python3 led_flow.py
  5. 按 Ctrl+C 终止程序

注意事项:

确保已安装 RPi.GPIO 库 (树莓派系统默认安装)

操作 GPIO 需使用 sudo 权限

调整延时时间可改变流水速度

结束程序后会自动清理 GPIO 设置


网站公告

今日签到

点亮在社区的每一天
去签到