arm-linux平台、rk3288 SDL移植

一、所需环境资源

1、arm-linux交叉编译器,这里使用的是gcc-linaro-6.3.1

2、linux交叉编译环境,这里使用的是Ubuntu 20.04

3、sdl2源码 https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.30.11.tar.gz

二、代码编译

1、解压sdl2源码,并且cd到源码目录

bash 复制代码
tar -xvf SDL-release-2.30.11.tar.gz && cd SDL-release-2.30.11

2、运行生成命令

bash 复制代码
./autogen.sh

3、配置编译环境

bash 复制代码
./configure --prefix=/opt/rk3288/sdl2  --host=arm-linux --disable-video-wayland --disable-pulseaudio --enable-video-x11 NM=arm-linux-gnueabihf-nm LD=arm-linux-gnueabihf-ld CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar

在这一步,一开始没有加--enable-video-wayland参数,编译会报错缺少wayland头文件,加上之后报错libpulse-dev相关的头文件错误,于是加上--disable-pulseaudio就可以成功编译了。

4、编译

bash 复制代码
make -j16

5、编译安装

bash 复制代码
make install 

6、环境部署

拷贝libSDL2.so到目标板子/usr/lib/目录下,并且创建一个名为libSDL2-2.0.so.0的符号链接

bash 复制代码
sudo ln -s libSDL2.so libSDL2-2.0.so.0

三、环境测试&总结

SDL测试代码

cpp 复制代码
/*
 * main.c
 *
 *  Created on: 2025年1月23日
 *      Author: qq
 */
#include <stdio.h>
#include <SDL2/SDL.h>

#define SCREEN_WIDTH  640 //横向像素个数
#define SCREEN_HEIGHT 480 //纵向像素个数

int main(int argc,char ** argv)
{
	if (SDL_Init(SDL_INIT_VIDEO) < 0)
	{
	    printf("SDL_Init error: %s\n", SDL_GetError());
	    return -1;
	}
	SDL_Window* window = SDL_CreateWindow("SDL2教程范例",SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN);
	if (!window)
	{
	    printf("SDL_CreateWindow error: %s\n", SDL_GetError());
	    return -1;
	}
	SDL_Surface* screenSurface = SDL_GetWindowSurface(window);
	if(!screenSurface)
	{
	    printf("SDL_GetWindowSurface error: %s",SDL_GetError());
	    return -1;
	}
	SDL_FillRect(
	    screenSurface,
	    NULL,
	    SDL_MapRGB(
	        screenSurface->format,
	        0xFF, 0x00, 0x00)
	);
	SDL_UpdateWindowSurface(window);
	SDL_Delay(10000);
	SDL_DestroyWindow(window);
	SDL_Quit();
	return 0;
}

编译指令

bash 复制代码
arm-linux-gnueabihf-gcc main.c -L/opt/rk3288/sdl2/lib/ -lSDL2 -I/opt/rk3288/sdl2/include/

编译完成复制到板子内,运行时发现提示如下错误:

SDL_CreateWindow error: Vulkan suport is either not configuired in SDL or not available in current SDL video driver(offscreen) or plaform.

怀疑应该是驱动层面的问题导致的,如果有成功运行的朋友可以说一声。

刚开始是configure命令没有加--enable-video-x11,后来加上报错也是一样的,我测试了linux主机环境编译sdl2,默认都是--enable-video-wayland,但是我主机环境是X11的仍然可以运行,所以跟这个关系不大。而--disable-pulseaudio是音频相关的,也不太可能是这个影响。

然后我测试了加上这两个参数--enable-video-wayland --disable-pulseaudio在linux主机端测试是没有问题的,所以排除编译问题,所以应该是板子驱动层面的问题吧。

四、参考文章

SDL移植到ARM-linux上_sdl2 linux移植-CSDN博客

相关推荐
皆过客,揽星河44 分钟前
Linux上安装MySQL8详细教程
android·linux·hadoop·mysql·linux安装mysql·数据库安装·详细教程
青草地溪水旁1 小时前
Unix/Linux 系统中的 `writev` 系统调用
linux·unix·writev
Justin_191 小时前
Linux-Shell编程之sed和awk
linux·运维·服务器
Akshsjsjenjd1 小时前
深入理解 Shell 循环与函数:语法、示例及综合应用
linux·运维·自动化·shell
塔中妖2 小时前
【华为OD】Linux发行版的数量
linux·算法·华为od
半桔2 小时前
【Linux手册】消息队列从原理到模式:底层逻辑、接口实战与责任链模式的设计艺术
java·linux·运维·服务器
sheepwjl2 小时前
《嵌入式硬件(六):ARM汇编核心内容总结》
汇编·arm开发·嵌入式硬件
华纳云IDC服务商2 小时前
Linux服务器的系统安全强化超详细教程
linux·服务器·系统安全
衍余未了3 小时前
k8s镜像推送到阿里云,使用ctr推送镜像到阿里云
linux·运维·服务器
yiqiqukanhaiba3 小时前
Linux编程笔记1-概念&数据类型&输入输出
linux·运维·服务器