嵌入式多媒体设计--1开题和环境搭建

由于我们学校的毕业设计基本都是用jsp做网站,可惜我对此无兴趣,只好选择了和C语言有关的嵌入式开发。先说明一下,这里只是记录我的毕业设计过程,没提出有什么新的技术,欢迎大家交流。

本毕业设计是基于嵌入式linuxqt多媒体中心,要求可以播放常见的音频、视频,并可以拍照和录像。我所采用的是ok6410的开发板,它自带了linux3.01的内核,qt环境以及usb摄像头驱动等,恰好支持我的摄像头。

我使用的是linuxdeepin 12.12 alpha 64位(ubuntu12.10),直接使用的ok6410自带的交叉编译器(32位),由于我之前已经安装好了32位支持环境(参见此文),所以交叉编译其正常运行可以。

下面介绍一下这几天收集的预备知识。

一、关于摄像头

一般开发板支持的摄像头有两种cmosusb

我想usb摄像头光学感应器件应该也是cmos的,不知对否?

关于摄像头的知识,有许多好的博客,这里是链接,我就不再重复了。

 

二、关于编译器

arm-none-linux-gnueabi交叉编译器codesourcery公司推出的,基于GCC进行优化的编译器,官方网站

arm编译器的区别,来自百度知道

链接工具命名:

arch-Vendor/Hardware Platform-(os-)abi 

1arm-none-linux-gnueabi
(ARM architecture, no vendor, linux OS, and the gnueabi ABI)

用于编译ARM架构的u-bootlinux内核、linux应用等

2arm-none-eabi

用于编译ARM架构的裸机系统(包括linuxbootkernel)

3arm-eabi

Android
ARM
编译器

arm-fsl-linux-gnueabi表示飞思卡尔平台的编译器

三、关于qt地址

Qt泛指Qt的所有桌面版本,比如Qt/X11Qt
Windows
Qt
Mac
等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/UnixQt/X11。一般命名以qt-x11-opensource-xxx

QT/E
-> Qtopia-core -> Qt-embedded-opensource
(同一种鸟):Qt
在刚出现的时候,对于LinuxUnix系统,只有构建于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/EQtopia是不同的两套程序,Qt/E是基础类库,Qtopia是构建于Qt/E之上的一系列应用程序。但从版本4开始,TrolltechQt/E并入到了Qtopia产品线中去了,并推出了新的Qtopia4。但实际上原来的Qt/E仍然作为基础类库,只是改名为Qtopia
Core
了,也许又感觉Qtopia
Core
Qtopia容易让人搞混,所以又改名为qt-embedded-linux-opensource-linux/winceQT也支持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浮点运算

关于eabi,原文如下来自chinaunix

1。什么是ABI

ABIapplication
binary interface (ABI)
,应用程序二进制接口。

既然是接口,那就是某两种东西之间的沟通桥梁,此处有这些种情况:

A。应用程序<>
操作系统;

B。应用程序<>
(应用程序所用到的)库

C
。应用程序各个组件之间

 

类似于API的作用是使得程序的代码间的兼容,ABI目的是使得程序的二进制(级别)的兼容。

 

2。什么是OABI
EABI

OABI中的O,表示OldLagacy,旧的,过时的,OABI就是旧的/老的ABI

EABI中的E,表示Embedded,是一种新的ABI

EABI有时候也叫做GNU
EABI

OABIEABI都是专门针对ARMCPU来说的。

 

3EABI的好处/为何要用EABI

A。支持软件浮点和硬件实现浮点功能混用

B。系统调用的效率更高

C。后今后的工具更兼容

D。软件浮点的情况下,EABI的软件浮点的效率要比OABI高很多。

 

4OABIEABI的区别

两种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

posted @ 2013-03-08 11:14  半山th  阅读(354)  评论(0编辑  收藏  举报