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

2019-07-13 08:03发布

由于我们学校的毕业设计基本都是用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-xxxQT/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就是旧的/老的ABIEABI中的E,表示Embedded,是一种新的ABIEABI有时候也叫做GNU
EABI
OABIEABI都是专门针对ARMCPU来说的。   3EABI的好处/为何要用EABI A。支持软件浮点和硬件实现浮点功能混用 B。系统调用的效率更高 C。后今后的工具更兼容 D。软件浮点的情况下,EABI的软件浮点的效率要比OABI高很多。   4OABIEABI的区别 两种ABI在如下方面有区别: A。调用规则(包括参数如何传递及如何获得返回值) B。系统调用的数目以及应用程序应该如何去做系统调用 C。目标文件的二进制格式,程序库等 D。结构体中的填充(padding/packing)和对齐。 EOABI*
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