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

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

猜你喜欢

转载自blog.csdn.net/qq_38694388/article/details/125699693