RIoTBoard开发板系列笔记(七)—— Framebuffer的使用

本文档记录了在Linux系统中使用Buildroot 2018.11.x版本构建Framebuffer驱动及fbtest程序的过程。首先下载并配置Buildroot,然后解决编译过程中遇到的两个错误。经过编译,最终成功烧写到RIoTBoard并测试fb-test,显示test图案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux系统中通过Framebuffer驱动程序来控制图形显示,Framebuffer被设计为一个独立于硬件的API,让用户空间软件仅使用Linux 内核自己的基本设施及其设备文件系统接口即可访问Framebuffer。本博客记录riotboard使用buildroot构建framebuffer 以及test 程序的过程。

1 代码下载与编译

buildroot 使用2018.11.x版本,下载:

git clone https://git.busybox.net/buildroot -b 2018.11.x

下载后进入目录,先执行riotboard_defconfig

sudo make riotboard_defconfig

再执行:

sudo make menuconfig

在Graphic libraries and applications (graphic/text)目录下选中以下三项:

Graphic libraries and applications (graphic/text)  ---> 
     ...
         [*] fbgrab
         [*] fbtest
         [*] fbv
     ...

执行编译

sudo make

编译error 1 :

./../misc/create_inode.c:399:18: error: conflicting types for ‘copy_file_range’
 static errcode_t copy_file_range(ext2_filsys fs, int fd, ext2_file_t e2_file,

解决方案: 将create_inode.c中 所有的copy_file_range改成copy_file_chunk。

编译error2 :

include/linux/compiler-gcc.h:114:30: fatal error: linux/compiler-gcc6.h: No such file or directory

解决方案:在uboot-2015.10目录创建compiler-gcc6.h文件:

sudo touch ./output/build/uboot-2015.10/include/linux/compiler-gcc6.h

文件中添加的内容:

#ifndef __LINUX_COMPILER_H
#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
#endif

#define __used				__attribute__((__used__))
#define __must_check			__attribute__((warn_unused_result))
#define __compiler_offsetof(a, b)	__builtin_offsetof(a, b)

/* Mark functions as cold. gcc will assume any path leading to a call
   to them will be unlikely.  This means a lot of manual unlikely()s
   are unnecessary now for any paths leading to the usual suspects
   like BUG(), printk(), panic() etc. [but let's keep them for now for
   older compilers]
   Early snapshots of gcc 4.3 don't support this and we can't detect this
   in the preprocessor, but we can live with this because they're unreleased.
   Maketime probing would be overkill here.
   gcc also has a __attribute__((__hot__)) to move hot functions into
   a special section, but I don't see any sense in this right now in
   the kernel context */
#define __cold			__attribute__((__cold__))

#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)

#ifndef __CHECKER__
# define __compiletime_warning(message) __attribute__((warning(message)))
# define __compiletime_error(message) __attribute__((error(message)))
#endif /* __CHECKER__ */

/*
 * Mark a position in code as unreachable.  This can be used to
 * suppress control flow warnings after asm blocks that transfer
 * control elsewhere.
 *
 * Early snapshots of gcc 4.5 don't support this and we can't detect
 * this in the preprocessor, but we can live with this because they're
 * unreleased.  Really, we need to have autoconf for the kernel.
 */
#define unreachable() __builtin_unreachable()

/* Mark a function definition as prohibited from being cloned. */
#define __noclone	__attribute__((__noclone__))

/*
 * Tell the optimizer that something else uses this function or variable.
 */
#define __visible __attribute__((externally_visible))

/*
 * GCC 'asm goto' miscompiles certain code sequences:
 *
 *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
 *
 * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
 *
 * (asm goto is automatically volatile - the naming reflects this.)
 */
#define asm_volatile_goto(x...)	do { asm goto(x); asm (""); } while (0)

#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
#define __HAVE_BUILTIN_BSWAP32__
#define __HAVE_BUILTIN_BSWAP64__
#define __HAVE_BUILTIN_BSWAP16__
#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */

以后就没有遇到编译error了,大概花了四个小时左右编译成功。

2 系统烧写测试

如何把编译好的系统烧写到TF卡中可以参考上一篇文章RIoTBoard开发板系列笔记(六)—— buildroot构建系统镜像
系统启动后进入到/usr/bin/目录:

cd /usr/bin/

给板子上接上显示器,执行Framebuffer test程序:

./fb-test

test程序运行成功后会有log输出:

# ./fb-test
fb-test 1.1.0 (rosetta)
fb res 1024x768 virtual 1024x768, line_len 2048, bpp 16

屏幕上会有test 图案出现:
在这里插入图片描述

3 参考文章

http://t.zoukankan.com/dakewei-p-10573446.html
https://github.com/UDOOboard/uboot-imx/issues/12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值