单片机小精灵t2_搭建S5P4418 ARM环境下 GPU OPENGL ES开发环境(适用 NANOPI2,3,M2,M3,T2,T3)...

本帖最后由 3guoyangyang7 于 2017-8-20 22:38 编辑

先说一下背景,这几天做一个摄像头处理的qt项目,摄像头的像素是1280*720的,25fps,用qt的painter重绘widget窗体,会出现大量占cpu的情况,在刷新图片的时候整个窗体的事件响应缓慢,定时器不准,不能忍受,基本上网上的办法都尝试过,什么多线程只在主线程刷图啊,直接写frambuffer啊,都没有什么卵用。只能抓住最后的稻草,使用gpu刷图,这样cpu的占用肯定下来。所以第一步要做的就是搭建ARM环境下OPENGL ES开发环境。以下的方法不是小狂独创,是在一个大神的指导下完成,有什么不对的地方还希望大家批评指正。

给出我的开发环境的参数。

开发板:友善之臂smart4418,(这个OPENGL ES的驱动支持mail400的gpu。只要是这个的应该都适用)。

开发板系统:内核3.4.39、系统 Ubuntu 16.04

PC机系统:ubuntu16.04

交叉编译环境:arm-cortexa9-linux-gnueabihf-4.9.3 32位。

总的步骤按照大体上分为三部分,第一部分是编译mail400的内核驱动,第二部分是编译用户层的OPENGL ES的库,第三部分是测试,下面给出具体的做法。一、内核驱动的编译

从给出的附件中,把所有内容拷贝到你相应内核目录下/driver/gpu目录下,如果有了就覆盖就行,然后就是开始编译内核,我把smart4418具体的编译步骤给出,其他开发板的见各个厂商给的编译步骤。1、交叉编译环境的搭建

在这里默认交叉编译环境已经建好了。具体可自行百度,或者查看厂商给的手册,这个肯定会有。2、内核的编译

因为我的内核是从git上下载的,是有分支的第一步一定要选择分支,不然有些东西没有,编译会出错

然后配置内核,先执行以下友善的配置操作,然后再更改我们自己的,我使用的是ubuntu core的系统,所以就按照友善给的手册配置

然后执行menuconfig,添加GPU驱动

如果执行这一步出错,那你是没有安装图像话的配置界面,执行以下如下指令就行

添加gpu相应的驱动

这里如果你不知道在哪可以搜索以下,在arm文件夹下有个kconfig文件就是把选项加入到菜单的,搜索一下如下的就能找到

按照如下配置

退出menuconfig,并且保存设置。

然后执行如下指令,说实话这一条我也不知道干嘛的,一般情况下,现在就可以直接编译了。既然友善给了就有他的道理我们执行一下

然后编译内核,执行如下指令

这里的j8根据电脑的性能而定,j后边的数字代表几个线程同时编译。

等待编译完成,出现图片所示的内容就证明编译的没有问题,否则就按照提示找错误

已经把uImage编译出来了,这里只需要把你原来sd或者nand或者emmc中的uimage替换就行。

这里我的是sd卡,有个小插曲,导致浪费了很多时间,就是sd卡属于块设备,块设备对存储是有优化的,就是什么电梯优化算法之类的,当你把内容拷贝到里边的时候并没有真正的拷贝,只有等你拔卡的时候才会拷贝,我当时大意了,就直接吧卡拔了导致拷贝的数据不全,启动的时候出现了错误,在这里提醒各位,拔卡前 可以执行一次sync强制同步就行了。

到这里,驱动添加完成,我们需要查看一下是否有设备节点

如果出现上图红色框内的内容,证明你驱动移植的完全正确。二、用户层OPENGL ES的库的编译和导入

这里给出一个连接,我也是参考这个链接中的内容来的,下面所以的内容都是在开发板上做的。

首先导入需要的工具

在ubuntu系统中可以按照我边的操作做如果是其他系统,则可以参考上边的链接

然后下载libump的源文件

进入目录,准备编译

然后执行下边一系列的编译指令,前提是在ubuntu系统下

到这ump的库编完了,我们要编mali的用户驱动了

在ubuntu下安装可以执行如下指令

2、mali的用户驱动的编译

首先下载需要用到的工具

然后下载源码

3、配置

我们要首先探测以下我们的环境需要什么,使用make config会打印下边的内容主要关注红色框内的内容

然后再配置,使用如下指令 把下边红色框内的内容换成探测到的内容,就行了

等编译完成进行最后一步导入

这个时候lib文件就会导入到/usr/lib ,头文件导入到 /usr/include。

可以查看一下

证明我们的导入已经完成

三、测试

测试,我们可以用sunxi下的一个测试程序

然后执行

如果你运气足够好,你会看到你的屏幕上出现一个彩色的三角,控制台出现如下的显示,证明已经成功了。

但是你要是出现我下图的情形那就是你的系统上本身有其他的opengl的库.,你需要吧其他的库删除然后才能使用。就必须smart4418,的ubuntu就存在这个情况,需要把nexell的库删掉才能使用。

四、总结

到了这里基本上开发环境的opengl已经完成了,下边要做的就是要建立交叉编译环境使得能在pc上的qt环境中使用opengl的库。再次感谢那位大神,又学到了一个技能。

需要gpu源文件的见readme.txt

readme.txt

(188 Bytes, 下载次数: 109)

说明:NEXELL官方提供的驱动和库并不能支持HDMI,只能支持LCD,但是按照上述方法编译的驱动和库是能支持HDMI输出的,想怎么玩耍就怎么玩耍,你还在为GPU不能适用而发愁吗,赶快行动吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求出数组中元素的总和_数组中所有元素的总和可被给定数K整除

求出数组中元素的总和This program will help to find out the sum of elements in an array which is divisible by a number K. It uses the basic concept of modulo % or the remainder of a number. 该程序将帮助找出数组中被数字K整除的元素之和 。 它使用“&#xff05…

iphone短信尚未送达_第五期:从苹果 乔布斯 iPhone 说到张小龙 微信 理财通

这篇评测我是怀着敬畏之心写的。第一部分:从设计理念说起(一)说到设计理念,不得不先说下苹果的iPhone一)第一代iPhone于2007年1月9日由苹果公司前首席执行官史蒂夫乔布斯发布,并在2007年6月29日正式发售。让我们看一下第一代iPhone的几个细节…

74161功能表_分析图 11 所示电路 74161 的 Q 3 为高电平时功能。 74194 功能表如表 1 所示。 74161 功能表如表 2 所示。 (7.2分)_学小易找答案...

【多选题】下列各项中,关于交易性金融资产表述正确的是( )。 (5.0分)【简答题】JAVA融教材(2)-工作页-项目8——集合框架一.docx【单选题】甲公司2018年7月1日购入乙公司2018年1月1日发行的债券,支付价款为1 100万元(含已到付息期但尚未领取的债券利息20万元),另支付交易费用15…

Python | 不使用库函数将十进制数转换为二进制

Given a decimal number and we have to convert it into binary without using library function. 给定一个十进制数,我们必须不使用库函数就将其转换为二进制数。 Example: 例: Input: 10Output: 1010Python code to convert decimal to binary Pyth…

declare begin end 中if怎么写_习语系列第45期:”未雨绸缪“英语怎么说?

背景介绍:英语习语是指一系列特定词的组合,但从字面上看不容易被理解。广义的习语包括短语动词、俚语、谚语、行话等。这为我们参加四六级、雅思、托福、GRE/GMAT考试做阅读理解题时带来了不少困难。抛开考试不谈,如果只是想单纯地读懂经济学…

vue判断组件是否显示_vue组件中watch props根据v-if动态判断并挂载DOM的问题

问题复现:父组件中通过名为 source 的 prop 向子组件 chart 传入数据 import chart from ../components/chart export default {name: home, components: { chart }, data () {return {chartdata: [] } }, mounted () {settimeout(() => {this.chartdata = [ [89.3, 58212,…

两个链表求交集_实现两个排序链表的并集和交集

两个链表求交集In computer science, a linked list is a linear collection of data elements, whose order is not given by their physical placement in memory. Instead, each element points to the next. It is a data structure consisting of a collection of nodes w…

python在哪个城市工资高_专硕好还是学硕好?哪个更好就业工资高?

最近有备考的小伙伴咨询关于学硕和专硕的问题,一篇旧文分享下。昨天的文章专硕学费贵那么多会比学硕学的东西多吗?九大美院研究生学费对比(点击查看)受到了不少小伙伴的关注,大家就专硕和学硕的问题提出了不少疑义。有人认为专硕好&#xff0…

html input不能输入小数_【Python基础(八)】输入和输出

本节将会介绍python中的输入和输出操作,基础部分主要就是介绍input()和print()的用法,print()我们在之前的学习中已经多次使用了,并不陌生,这一节再详细的梳理一下print()中可以支持的各种方法。另外一大内容是文件的读写和OS命令…

comparator比较器用法_汽车三元催化器堵塞咋办?不拆不换,用这招清理干净、动力猛如虎...

如今汽车的价格是不断走低,很多人也能如愿成为有车人群。如今国庆假期即将到来,在国庆前买了车的朋友就能在长假里开着汽车出去好好游玩一番,这过程是想想都觉得美妙。不过作为车主,汽车不单要懂得开,也要学会保养&…

mongodb添加创建修改时间_MongoDB数据库插入、更新和删除操作详解

一、Insert操作Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键。文档结构采用类似JSON的BSON格式。常见的插入操作主要有单条插入和批量插入两种形式。插入时只是简单地将文档存入数据库…

51单片机怎么显示当前时间_51单片机玩转物联网基础篇06-LCD1602液晶显示器

前言本节我们开始学习LCD1602,LCD1602是字符型液晶显示屏,在实际项目中应用非常广泛,学完本节就可以逐步开发一些好玩的应用了。一、基础知识1.LCD1602简介LCD1602是字符型液晶显示模块,专门用于显示字母、数字、符号等点阵式LCD&…

在JavaScript中以Hours24:Minutes:Seconds格式获取当前时间

使用JavaScript获取当前时间 (Getting current time in JavaScript) To get the current time in JavaScript, we need to use three library functions of Date class, 要获取JavaScript中的当前时间 ,我们需要使用Date类的三个库函数, Date getHours(…

联想服务器如何u盘启动盘装系统,联想如何设置u盘启动

相信有不少网友都在使用联想电脑,它的性价比一直受到不少消费者的青睐。接下来教大家联想如何设置u盘启动,希望大家能喜欢。联想如何设置u盘启动步骤阅读1、按快捷键弹出启动选项,联想笔记本一般是F12或者F22、按TAB键切换App Menu菜单&#…

c语言负数左移右移_C语言 位运算符的运算规则

位运算是指按照二进制进行的运算,在C语言中,提供了6种的位运算符,他们分别是按位与(&),按位或(|),按位异或(^),按位取反&#xff…

Android 带着用户名的SharedPreferences

/*** 设置当前用户的签到信息* account&info;account&info** param context* param sign* author jrjin* time 2016-1-5 下午2:27:47*/public static void setSignInfo(Context context, String sign) {String account getAccount(context);if (TextUtils.isEmpty(acc…

python数据分析与可视化-Python数据分析与数据可视化

数据分析、数据挖掘与数据可视化是一个古老的话题,并非什么新生事物。近些年来,借助于计算机软硬件的飞速发展,数据分析、挖掘、可视化相关理论和技术在各领域的应用更是有了质的飞跃。饭店选址、公交路线与站牌规划、物流规划、春运加班车次…

c语言 函数的参数传递示例_C-用户定义的函数示例,没有参数,没有返回类型...

c语言 函数的参数传递示例Define a function with no argument and no return type in C language. 用C语言定义一个没有参数且没有返回类型的函数。 In the program, we have function named fun1 which has no argument and no return type (void is the return type - that…

的标题形状工具在哪里_自媒体如何搜集素材?标题、文章、图片素材收集3大途径!...

文:老彭自媒体大家好,我是老彭,很多人觉得做自媒体写内容很难,每天想写点东西又感觉无从下手,那么到底是什么原因造成的呢?其实最主要的原因还是自己平时看的太少,和素材储备不足所导致的。大家…

Python中的条件语句(if,if ... else,if ... elif ... else和嵌套的if)

Conditional statements decide the flow of program execution. In programming whenever we need to make execute any special blocks based on the decision then we use the conditional statements. 条件语句决定程序执行的流程。 在编程中,只要我们需要根据决…