当前位置: 首页 > news >正文

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

在自己的虚拟机Ubuntu系统下,逐步编译 mininim源码(波斯王子重制开源版)

指令流程

sudo apt-get remove liballegro5-dev liballegro-image5-dev \liballegro-audio5-dev liballegro-acodec5-dev liballegro-dialog5-dev
sudo apt-get install automake autoconf gcc make gnulib cmake lua50 \liblua50-dev liblualib50-dev libreadline-dev
sudo apt-get build-dep allegro5
git clone https://github.com/oitofelix/allegro5.git
cd allegro5
cmake
make
sudo make install
cd ..
git clone https://github.com/oitofelix/mininim.git
cd mininim
./bootstrap
./configure LUA_LIB="-llua50 -llualib50"
make
./mininim

进入allegro5文件夹里有对应的cmake文件,但此时还不能直接cmake
在这里插入图片描述
在 CMakeLists.txt 文件中的 find_package(OpenGL) 之前添加set(OpenGL_GL_PREFERENCE GLVND) 。
在这里插入图片描述
这样配置后,CMake 会使用 GLVND(现代 OpenGL)而不是传统的 LEGACY 库。

#若运行cmake报如下错误
X11 support requires Xcursor library.
#则去安装Xcursor 库
sudo apt-get install libgl1-mesa-dev libx11-dev libglx-dev
#安装完后删掉之前cmake的程序,再去cmake就可以了
rm -rf CMakeCache.txt CMakeFiles

走完最后的流程就可以运行该游戏了

将编译好的mininim的二进制执行程序、游戏资源库data,已经执行程序所依赖的各种动态链接库,打包,复制到另外一台Ubuntu系统,直接运行

将上面mininim目录里的mininim可执行文件复制到另外一台Ubuntu系统的home目录,mininim文件里的data文件和lib文件也一起打包移植
在这里插入图片描述
在该移植目录下运行可执行mininim就可以play了
在这里插入图片描述

在树莓派上完成编译 mininim源码,并成功运行

树莓派也是linux系统,将移植包放入树莓派中解压,运行可执行的mininim,可以使用XTerminal或者VNC,两者都是带有可视化图像界面的。
在这里插入图片描述

在Android手机上 编译mininim游戏,并运行

Android手机也是同样的操作,需要在手机上安装NSC软件去开启ssh连接,访问手机ip和用户名,设置ssh端口,使用XTerminal去连接手机。
在这里插入图片描述

在树莓派3B上用python编程完成流水灯实验

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
import atexit
import signal# 配置参数
PWM_PIN = 18        # BCM编号18引脚
FREQUENCY = 1000    # PWM频率1kHz
DUTY_CYCLE = 50     # 初始占空比50%class SafePWMController:def __init__(self):self.pwm = Noneself._setup()self._register_handlers()def _setup(self):"""初始化GPIO和PWM"""try:GPIO.setwarnings(False)GPIO.setmode(GPIO.BCM)  # 使用BCM编号GPIO.setup(PWM_PIN, GPIO.OUT)self.pwm = GPIO.PWM(PWM_PIN, FREQUENCY)self.pwm.start(DUTY_CYCLE)print(f"PWM已启动,引脚BCM {PWM_PIN},频率{FREQUENCY}Hz")except Exception as e:self._cleanup()raise RuntimeError(f"初始化失败: {str(e)}")def _register_handlers(self):"""注册退出处理函数"""atexit.register(self._cleanup)  # 正常退出signal.signal(signal.SIGTERM, self._signal_handler)  # kill命令signal.signal(signal.SIGINT, self._signal_handler)   # Ctrl+Cdef _signal_handler(self, signum, frame):"""信号处理函数"""print(f"\n接收到终止信号 {signum},正在清理资源...")self._cleanup()exit(0)def _cleanup(self):"""安全清理资源"""if self.pwm is not None:try:self.pwm.stop()print("PWM已停止")except Exception as e:print(f"停止PWM时出错: {str(e)}")finally:self.pwm = Nonetry:GPIO.cleanup()print("GPIO资源已释放")except Exception as e:print(f"清理GPIO时出错: {str(e)}")def run(self):"""主运行循环"""try:while True:# 在这里添加您的PWM控制逻辑# 示例:呼吸灯效果for dc in range(0, 101, 5):self.pwm.ChangeDutyCycle(dc)time.sleep(0.1)for dc in range(100, -1, -5):self.pwm.ChangeDutyCycle(dc)time.sleep(0.1)except Exception as e:print(f"运行时错误: {str(e)}")raisefinally:self._cleanup()if __name__ == "__main__":try:controller = SafePWMController()controller.run()except KeyboardInterrupt:print("程序被用户中断")except Exception as e:print(f"程序异常: {str(e)}")finally:print("程序退出")

效果展示:
请添加图片描述

http://www.xdnf.cn/news/746407.html

相关文章:

  • Python训练第四十天
  • Jmeter requests
  • LLMs之Tool:Workflow Use的简介、特点、安装和使用方法、以及案例应用
  • c++ typeid运算符
  • 如何打包conda环境从一台电脑到另外一台电脑
  • 电力高空作业安全检测(3)RT-DETR模型
  • MySQL高级查询技巧:分组、聚合、子查询与分页【MySQL系列】
  • 深入理解CSS常规流布局
  • 【系统架构设计师】第一章 计算机硬件 1.1 计算机硬件 - CPU - 校验码
  • Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择
  • Linux基本指令/下
  • 信息安全之为什么引入公钥密码
  • Linux系统下安装配置 Nginx
  • AUTOSAR图解==>AUTOSAR_EXP_AIADASAndVMC
  • 数组题解——最大子数组和​【LeetCode】
  • 机器学习算法04:SVC 算法(向量机分类)
  • Fastapi 学习使用
  • [GHCTF 2025]SQL???
  • 23种设计模式概览
  • ubuntu20.04.5--arm64版上使用node集成java
  • Ubuntu22.04通过命令行安装qt5
  • FPGA纯verilog实现MIPI-DSI视频编码输出,提供工程源码和技术支持
  • Redis7底层数据结构解析
  • [VMM]虚拟地址到物理地址的三级或四级页表查找过程详解
  • 4000万日订单背后,饿了么再掀即时零售的“效率革命”
  • win1011安装WinGet和Windows Terminal
  • CQF预备知识:一、微积分 -- 1.8 多变量函数:多元微积分详解
  • 离线安装 Python 包及其全部依赖
  • 谷歌Stitch:AI赋能UI设计,免费高效新利器
  • Vue2+Vuex通过数组动态生成store数据(分组模式)