嵌入式多媒体设计--1开题和环境搭建
由于我们学校的毕业设计基本都是用jsp做网站,可惜我对此无兴趣,只好选择了和C语言有关的嵌入式开发。先说明一下,这里只是记录我的毕业设计过程,没提出有什么新的技术,欢迎大家交流。
本毕业设计是基于嵌入式linux的qt多媒体中心,要求可以播放常见的音频、视频,并可以拍照和录像。我所采用的是ok6410的开发板,它自带了linux3.01的内核,qt环境以及usb摄像头驱动等,恰好支持我的摄像头。
我使用的是linuxdeepin 12.12 alpha 64位(ubuntu12.10),直接使用的ok6410自带的交叉编译器(32位),由于我之前已经安装好了32位支持环境(参见此文),所以交叉编译其正常运行可以。
下面介绍一下这几天收集的预备知识。
一、关于摄像头
一般开发板支持的摄像头有两种cmos和usb。
我想usb摄像头光学感应器件应该也是cmos的,不知对否?
关于摄像头的知识,有许多好的博客,这里是链接,我就不再重复了。
二、关于编译器
arm-none-linux-gnueabi交叉编译器codesourcery公司推出的,基于GCC进行优化的编译器,官方网站。
arm编译器的区别,来自百度知道,
链接工具命名:
arch-Vendor/Hardware Platform-(os-)abi
1、arm-none-linux-gnueabi
(ARM architecture, no vendor, linux OS, and the gnueabi ABI)
用于编译ARM架构的u-boot、linux内核、linux应用等
2、arm-none-eabi
用于编译ARM架构的裸机系统(包括linux的boot、kernel)
3、arm-eabi
Android
ARM 编译器
如arm-fsl-linux-gnueabi表示飞思卡尔平台的编译器
三、关于qt,地址
Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt
Windows,Qt
Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。一般命名以qt-x11-opensource-xxx!
QT/E
-> Qtopia-core -> Qt-embedded-opensource(同一种鸟):Qt
在刚出现的时候,对于Linux和Unix系统,只有构建于Xlib之上的X11版。但随着Linux操作系统在嵌入式领域的应用日渐广泛,Qt推出了嵌入式的版本Qt/E。由于嵌入式受限的硬件环境往往难以运行庞大的X服务器,Qt/E去掉了X
Lib的依赖而直接工作于Frame
Buffer上,因而效率更高,但它并不是Qt的子集,而应该是超集,部分机制(如QCOP等)不能用于Qt/X11中。
Qtopia(注意不是Qtopia-core,两者是不一样的):一般命名为qtopia-opensource,最初是sourceforge.net上的一个开源项目,全称是Qt
Palmtop
Environment,是构建于Qt/E之上一个类似桌面系统的应用环境,包括了PDA和手机等掌上系统常见的功能如电话簿、日程表等。现在Qtopia
已经成为了Trolltech的又一个主打产品,为基于Linux操作系统的PDA和手机提供了一个完整的图形环境。
值得特别注意的是在版本4之前,Qt/E和Qtopia是不同的两套程序,Qt/E是基础类库,Qtopia是构建于Qt/E之上的一系列应用程序。但从版本4开始,Trolltech将Qt/E并入到了Qtopia产品线中去了,并推出了新的Qtopia4。但实际上原来的Qt/E仍然作为基础类库,只是改名为Qtopia
Core了,也许又感觉Qtopia
Core跟Qtopia容易让人搞混,所以又改名为qt-embedded-linux-opensource-linux/wince(QT也支持Wince
)。它作为嵌入式版本的核心,既可以与Qtopia配合,也可以独立使用。而原来的Qtopia则被分成几层,核心的应用框架和插件系统被称为Qtopia
Platform,上层的应用程序则按照不同的目标用户分为不同的包,如Qtopai
PDA,Qtopia
Phone。
Qte的改名过程,Qte-->Qtopia
Core-->Qt-embedded-linux-xxxx
Qtopia/QtEmbedded版本对应关系?
Qtopia1.7.0
/ Qte 2.3.7
Qtopia2.1.1
/ Qte 2.3.10
Qtopia2.1.2
/ Qte 2.3.11
Qtopia2.2.0
/ Qte 2.3.12 (包含在qtopia2.2源码包中)
qtopia
2的应用基于qte
2.3.x的
qtopia
4的应用基于qtopia
core(相当于原来的qte)
4.x
四、关于eabi和浮点运算
1。什么是ABI
ABI,application
binary interface (ABI),应用程序二进制接口。
既然是接口,那就是某两种东西之间的沟通桥梁,此处有这些种情况:
A。应用程序<->
操作系统;
B。应用程序<->
(应用程序所用到的)库
C
。应用程序各个组件之间
类似于API的作用是使得程序的代码间的兼容,ABI目的是使得程序的二进制(级别)的兼容。
2。什么是OABI
和EABI
OABI中的O,表示“Old”,“Lagacy”,旧的,过时的,OABI就是旧的/老的ABI。
EABI中的E,表示“Embedded”,是一种新的ABI。
EABI有时候也叫做GNU
EABI。
OABI和EABI都是专门针对ARM的CPU来说的。
3。EABI的好处/为何要用EABI
A。支持软件浮点和硬件实现浮点功能混用
B。系统调用的效率更高
C。后今后的工具更兼容
D。软件浮点的情况下,EABI的软件浮点的效率要比OABI高很多。
4。OABI和EABI的区别
两种ABI在如下方面有区别:
A。调用规则(包括参数如何传递及如何获得返回值)
B。系统调用的数目以及应用程序应该如何去做系统调用
C。目标文件的二进制格式,程序库等
D。结构体中的填充(padding/packing)和对齐。
E。
OABI:
*
ABI flags passed to binutils: -mabi=apcs-gnu -mfpu=fpa
*
gcc -dumpmachine: arm-unknown-linux
*
objdump -x for compiled binary:
private
flags = 2: [APCS-32] [FPA float format] [has entry point]
*
"file" on compiled Debian binary:
ELF
32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.2.0,
dynamically linked (uses shared libs), for GNU/Linux 2.2.0, stripped
*
"readelf -h | grep Flags""
Flags:
0x0
EABI:
*
ABI flags passed by gcc to binutils: -mabi=aapcs-linux
-mfloat-abi=soft -meabi=4
*
gcc -dumpmachine: arm-unknown-linux-gnueabi
*
objdump -x for compiled binary:
private
flags = 4000002: [Version4 EABI] [has entry point]
*
"file" on compiled binary (under Debian):
ELF
32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17,
dynamically linked (uses shared libs), for GNU/Linux 2.4.17, stripped
*
"readelf -h | grep Flags""
Flags:
0x4000002, has entry point, Version4 EABI
作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。