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博客

相关推荐
wdfk_prog15 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
盟接之桥15 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿16 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘16 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
Fcy64817 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满17 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠17 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio17 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice17 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
Harvey90317 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s