第一篇:嵌入式linux常见问题总结
1.什么是嵌入式?
2.字符设备和块设备的区别?
3.进程与程序,进程与线程的区别
4.嵌入式的移植过程
5..守护进程的编写步骤
6.网络的Socket交互过程
7.TCP 三次握手和终止连接的4次握手过程
1)介绍一下你在华清做的这个项目?您在里面负责哪一块? 2)你用的是什么CPU?是什么样的内核? 3)说说嵌入式LINUX移植的过程? 4)字符设备和块设备有什么不同? 5)ARM有几种CPU模式,分别是什么? 6)列举几种文件系统,分别说说他们的优缺点。7)说说摄像头的视频采集过程
8)如果要提升视频流的流畅度,可以怎么做? 9)按键处理用了CPU哪个中断?
10)BOA和APPACHE有什么区别,你为什么选择XX? 11)嵌入式LINUX 2.6和2.4有什么区别?
以下问答大部分是个人总结,仅供参考,你可以添加合适的自己的理解 1.什么是嵌入式?
A: 嵌入式系统本身是一个相对模糊的定义。目前嵌入式系统已经渗透到我们生活中的每个角落,工业、服务业、消费电子……,而恰恰由于这种范围的扩大,使得“嵌入式系统”更加难于明确定义。以下是几种常见表达方式:
1.执行专用功能并被内部计算机控制的设备或者系统。嵌入式系统不能使用通用型计算机,而且运行的是固化的软件,用术语表示就是固件(firmware),终端用户很难或者不可能改变固件。
2.凡是专用的、小型或者微型的计算机系统都是嵌入式系统,比如MP3, 手机,高清电视 3.比较传神和从技术人员角度来看,嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
2.字符设备和块设备的区别?
A: 1.字符设备和块设备、网络设备是一个并列的概念
2字符设备按照字符流的方式被有序访问,块设备以块为单位;二者根本区别在于字符设备只能顺序被读写,块设备可以随机访问
3.Linux为块设备和字符设备提供了两套机制。字符设备实现的比较简单,内核例程和用户态API一一对应,用户层的read函数直接对应了内核中的read例程,这种映射关系由字符设备的file_operations维护。块设备接口相对于字符设备复杂,read、write API没有直接到块设备层,而是通过IO请求的方式通过OS的IO请求队列实现。内核管理块设备要比管理字符设备细致得多,内核对块设备的管理却提供一个专门的提供服务的子系统。块设备对执行性能的要求很高;,LINUX内核开发者门一直致力于优化块设备的驱动。3.进程与程序的区别和联系
A:
1.程序是一组指令的集合,它是静态的实体,没有执行的含义。进程程序的执行过程,是一个动态的实体,有自己的生命周期,包括产生、运行、消亡的过程。除此之外,进程还有并发性和交往性。简单地说,进程是程序的一部分,程序运行的时候会产生进程。
2.所涉及到的介质不同,程序保存在存储介质,比如FLASH,硬盘等中,进程运行在RAM中
3.内容不完全相同,程序有数据段,代码段,调试信息等,进程执行时候,有代码段,数据段,以及堆栈
线程和进程的区别:
A:
1、线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。
2、一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。
3、系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。也就是 说,出了CPU之外(线程在运行的时候要占用CPU资源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
4、标准LINUX的进程具有独立的虚拟地址空间,而一个进程里面的多个线程共享同一个虚拟内存空间,进程是系统所有资源分配时候的一个基本单位
嵌入式LINUX 2.6和2.4有什么区别?
这个问题涉及的面非常广泛,我们只能列出基本部分:
每个内核主要的变化在http://lwn.net/Articles/2.6-kernel-api/,详细的参考http://blog.mcuol.com/User/bailang/Article/11222_1.htm,下面列举的是比较基础和必须的部分
1.使用新的入口
必须包含
2、模块参数
必须显式包含
module_param_string(name, string, len, perm);module_param_array(name, type, num, perm);老版本:MODULE_PARM(variable,type);MODULE_PARM_DESC(variable,type);
3、模块别名
MODULE_ALIAS(“alias-name”);这是新增的,在老版本中需在/etc/modules.conf配置,现在在代码中就可以实现。
4、模块计数
int try_module_get(&module);module_put();老版本:MOD_INC_USE_COUNT 和 MOD_DEC_USE_COUNT
5、符号导出
只有显示的导出符号才能被其他模块使用,默认不导出所有的符号,不必使用EXPORT_NO _SYMBOLS 老板本:默认导出所有的符号,除非使用EXPORT_NO_SYMBOLS
6、设备号
kdev_t被废除不可用,新的dev_t拓展到了32位,12位主设备号,20位次设备号。
unsigned int iminor(struct inode *inode);unsigned int imajor(struct inode *inode);老版本:8位主设备号,8位次设备号 int MAJOR(kdev_t dev);int MINOR(kdev_t dev);
7、内存分配头文件变更
所有的内存分配函数包含在头文件
老版本:内存分配函数包含在头文件
8、结构体的初试化
gcc开始采用ANSI C的struct结构体的初始化形式: static struct some_structure = {.field1 = value,.field2 = value,..};老版本:非标准的初试化形式
static struct some_structure = { field1: value, field2: value,..};
9、request_module()request_module(“foo-device-%d”, number);老版本:
char module_name[32];printf(module_name, “foo-device-%d”, number);request_module(module_name);
10、dev_t引发的字符设备的变化
1、取主次设备号为
unsigned iminor(struct inode *inode);unsigned imajor(struct inode *inode);
2、老的register_chrdev()用法没变,保持向后兼容,但不能访问设备号大于256的设备。
3、新的接口为
a)注册字符设备范围
int register_chrdev_region(dev_t from, unsigned count, char *name);b)动态申请主设备号
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, char *name);看了这两个函数郁闷吧^_^!怎么和file_operations结构联系起来啊?别急!c)包含
kobject_put(&cdev->kobj);struct kobject *cdev_get(struct cdev *cdev);void cdev_put(struct cdev *cdev);这一部分变化和新增的/sys/dev有一定的关联。
11、新增对/proc的访问操作
static struct seq_operations 必须实现这个类似file_operations得数据中得各个成 员函数。
seq_printf();
int seq_putc(struct seq_file *m, char c);int seq_puts(struct seq_file *m, const char *s);int seq_escape(struct seq_file *m, const char *s, const char *esc);int seq_path(struct seq_file *m, struct vfsmount *mnt, struct dentry *dentry, char *esc);seq_open(file, &ct_seq_ops);等等
12、底层内存分配
1、
2、分配标志GFP_BUFFER被取消,取而代之的是GFP_NOIO 和 GFP_NOFS
3、新增__GFP_REPEAT,__GFP_NOFAIL,__GFP_NORETRY分配标志
4、页面分配函数alloc_pages(),get_free_page()被包含在
5、对NUMA系统新增了几个函数:
a)struct page *alloc_pages_node(int node_id, unsigned int gfp_mask, unsigned int order);b)void free_hot_page(struct page *page);c)void free_cold_page(struct page *page);
13、内核时间变化
1、现在的各个平台的HZ为
Alpha: 1024/1200;ARM: 100/128/200/1000;CRIS: 100;i386: 1000;IA-64: 1024;M68K: 100;M68K-nommu: 50-1000;MIPS: 100/128/1000;MIPS64: 100;PA-RISC: 100/1000;PowerPC32: 100;PowerPC64: 1000;S/390: 100;SPARC32: 100;SPARC64: 100;SuperH: 100/1000;UML: 100;v850: 24-100;x86-64: 1000.2、由于HZ的变化,原来的jiffies计数器很快就溢出了,引入了新的计数器jiffies_64
3、#include
4、新的时间结构增加了纳秒成员变量
struct timespec current_kernel_time(void);
5、他的timer函数没变,新增
void add_timer_on(struct timer_list *timer, int cpu);
6、新增纳秒级延时函数 ndelay();
7、POSIX clocks 参考kernel/posix-timers.c
14、工作队列(workqueue)
1、任务队列(task queue)接口函数都被取消,新增了workqueue接口函数 struct workqueue_struct *create_workqueue(const char *name);DECLARE_WORK(name, void(*function)(void *), void *data);INIT_WORK(struct work_struct *work, void(*function)(void *), void *data);PREPARE_WORK(struct work_struct *work, void(*function)(void *), void *data);
2、申明struct work_struct结构
int queue_work(struct workqueue_struct *queue, struct work_struct *work);int queue_delayed_work(struct workqueue_struct *queue, struct work_struct *work, unsigned long delay);int cancel_delayed_work(struct work_struct *work);void flush_workqueue(struct workqueue_struct *queue);void destroy_workqueue(struct workqueue_struct *queue);int schedule_work(struct work_struct *work);int schedule_delayed_work(struct work_struct *work, unsigned long delay);
15、DMA的变化 未变化的有:
void *pci_alloc_consistent(struct pci_dev *dev, size_t size, dma_addr_t *dma_handle);void pci_free_consistent(struct pci_dev *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle);变化的有:
1、void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag);void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle);
2、列举了映射方向:
enum dma_data_direction { DMA_BIDIRECTIONAL = 0, DMA_TO_DEVICE = 1, DMA_FROM_DEVICE = 2, DMA_NONE = 3, };
16、新增完成事件(completion events)
25、RCU(Read-copy-update)rcu_read_lock();
中断处理
1、中断处理有返回值了。IRQ_RETVAL(handled);
2、cli(), sti(), save_flags(), 和 restore_flags()不再有效,应该使用local_save _flags()或local_irq_disable()。
3、synchronize_irq()函数有改动
4、新增int can_request_irq(unsigned int irq, unsigned long flags);
5、request_irq()和free_irq()从
18、异步I/O(AIO)
is_sync_kiocb(struct kiocb *iocb);
int aio_complete(struct kiocb *iocb, long res, long res2);
19、block I/O 层
这一部分做的改动最大。不祥叙。
20.内核的一些功能函数的名称、参数、头文件、宏定义的变化
如:中断注册函数的格式及参数在2.4内核、2.6内核低版本和高版本之间都存在差别
在2.6.8中,中断注册函数的定义为:
int request_irq(unsigned int irq, irqreturn_t(*handler)(int, void *, struct pt_regs *),unsigned long irq_flags, const char * devname, void *dev_id)irq_flags的取值主要为下面的某一种或组合: SA_INTERRUPT、SA_SAMPLE_RANDOM、SA_SHIRQ 在2.6.26中,中断注册函数的定义为: int request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id)typedef irqreturn_t(*irq_handler_t)(int, void *);irq_flags的取值主要为下面的某一种或组合:(功能和2.6.8的对应)IRQF_DISABLED、IRQF_SAMPLE_RANDOM、IRQF_SHARED平台代码关于硬件操作方面封装的一些函数的变化
内 核中,硬件平台相关的代码在内核更新过程中变化比较频繁。和我们的设备驱动也是息息相关。所以在针对一个新内核编写设备驱动前,一定要熟悉你的平台代码的 结构。有时平台虽然提供了内核要求的接口函数,但使用起来功能却并不完善。下面还是先举个例子说明平台代码更新对设备驱动的影响。如: 在linux-2.6.8内核中,调用set_irq_type(IRQ_EINT0, IRQT_FALLING);去设置S3C2410的IRQ_EINT0的中断触发信号类型,你会发现不会有什么效果。跟踪代码发现内核的 set_irq_type函数需要平台提供一个针对硬件平台的实现函数
static struct irqchip s3c_irqext_chip = {.mask = s3c_irqext_mask,.unmask = s3c_irqext_unmask,.ack = s3c_irqext_ack,.type = s3c_irqext_type };s3c_irqext_type就是linux内核需要的实现函数,而s3c_irqext_type在2.6.8中的实现为:
static int s3c_irqext_type(unsigned int irq, unsigned int type){ irqdbf(“s3c_irqext_type: called for irq %d, type %dn”, irq, type);return 0;} 原来并没有实现。而在较高版本的内核,如2.6.26内核中,这个函数是实现了的。
第二篇:嵌入式linu学习心得
嵌入式Linux学习心得
1、Linux命令
ls:查看目录-l以列表方式查看;ls –l 与ll的功能一样 pwd: 查看当前的目录
cd:改变当前操作目录cd /直接跳到根目录 cd..回到上一级目录 cat: 打印显示当前文件的内容信息
mkdir:创建目录
fdisk: 查看硬盘分区信息,-l以列表方式查看
->代表是链接文件,类似window下的快捷方式。
cp: 复制命令,例子cp 文件名 /home/dir/
mv: 移动或改名,如mv sonf.confsonf.txt(改名)移动:mv sonf.conf / rm:删除命令,如rm –f test.c;如删除目录rm –fr d
man:查看某个命令的帮助,man 命令
2、各系统目录的功能
drw—r—w--:d代表是目录,drw代表当前用户的权限,r代表组用户的权限,w代表其它用户的权限。x代表有执行权限。
/boot/gruff.conf: 启动引导程序
/dev:brw—rw--:b代表是块设备。Linux设备有三种,块设备(b开头)、字符设备(c开头)、网络设备。had代表第一个硬盘,hdb代表第二个硬盘。Hdb2代表第二块硬盘的第二个分区。3,67代表主设备为3,从设备为67./etc:存放的是系统的配置文件。Inittab文件存放不同启动方式下必须启动的进程。Inittab文件中有6个启动level,wait中对应着6个level的目录,respawn代表当一个进程被意外终止了,但会自动启动的进程,如守护进程。rc.d目录中存放了一个rc.sysinit文件,里面存放系统初始化配置信息。/etc还有一个vsftpd里面存放tcp、ftp的配置。
/home : 用户目录,存放用户的文件,/lib:存放库文件,后缀为so的文件代表动态链接库。
/lost+found:系统意外终止,存放一些可以找回的文件。
/mnt:挂载外部设备,如挂载光驱:mount –t /dev/cdrom/mnt/cdrom,如
果在双系统中,要查看windows中D盘的文件,首先应该将D盘的文件映射过来,mount –t /dev/hda2/mnt/windows/d
/opt:用户安装的应用程序
/proc:是系统运行的映射,比较重要。里面的文件数字代表进程号。每个进程号目录下包含进程的基本信息。还有其他信息,如cpuinfo等,内核支持的文件系统filesystem等。系统支持的中断interrupts,iomen代表内存分配情况。ioport存放IO端口号。还有分区信息,modole信息,状态信息,版本信息
对于Linux的设备驱动程序,有两种加载模式,一种是直接加载进linux内核,一种是以模块的方式加载到内核。
/sbin: 系统管理的一些工具。如poweroff关机工具。
/usr: 安装系统时很多文件放在此目录下面,包含一些更新等,include包含的头文件,lib 是Linux的库文件,src包含Linux2.4的内核源码
/var:存放是临时变量
3、
第三篇:嵌入式总结
一、嵌入式系统原理与应用课程总结
这个学期我学习了《嵌入式原理与应用》这门课程,虽然这个学期马上就要结束了,对嵌入式的学习也要告一段落了,但是我觉得收获还是很大的。学期开始,我开始学习《嵌入式系统及应用》,由于初次接触嵌入式系统,感觉蛮难的,所以收获不是很大,很多的概念都比较模糊,真是茫然无从下手。虽然一个学期的学习时间不是很长,但是我觉得对嵌入式系统也已经有了一个大致的概念。对它的历史发展与今后展望都有了一定的了解。嵌入式技术的掌握是需要一个过程的,对嵌入式技术的全面掌握是有相当难度的。如果要真正掌握的话还是需要一步步积累才能熟练掌握的,所以我们还要自己多加学习,不断地回顾以前学到的知识,也要吸收新的概念与技术,使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的乐趣,更加清楚的认识到自己在软件开发学习上的一些不足之处,并且不断改进以提高自己。
通过这门课程的学习,我了解到了嵌入式系统是一种为特定设备服务,软硬件可裁剪的计算机系统,其英文名称是Embedded System。嵌入式系统的范围很广,特点是形式变化多样、体积小,可以灵活地适应各种设备的需求。嵌入式系统的一些例子:手机、汽车、ATM、数字电视、医疗仪器等等。嵌入式系统本身是一个相对模糊的定义,一个手持的MP3和一个PC104的微型工业控制计算机都可以认为是嵌入式系统。总体来说,嵌入式系统是“用于控制,监视或者辅助操作机器和设备的装备”。一个典型的桌面Linux系统包括3个主要的软件层---linux内核、C库和应用程序代码。内核是唯一可以完全控制硬件的层,内核驱动程序代表应用程序与硬件之间进行会话。内核之上是C库,负责把POSIX API转换为内核可以识别的形式,然后调用内核,从应用程序向内核传递参数。应用程序依靠驱动内核来完成特定的任务。嵌入式系统的发展是从电子计算机诞生以来,计算机的发展有两个方向:一个方向是体积大型化、处理能力超强的大型计算机;另一个是向体积小型化,功能多样化的方向发展。嵌入式微控制器,即传统意义上的单片机,是目前嵌入式系统的前身。一般都是8位或者16位。嵌入式微处理器,单片机的发展时间较早,处理能力很低,只能应用在一些相对简单的控制领域。嵌入式微处理器是近几年随着大规模集成电路发展同步发展起来的。与单片机相比,嵌入式微处理器的处理能力更强,主流的嵌入式微处理器都是32位的。嵌入式微处理器在一个芯片上集成了复杂的功能,有的还把常见的外部设备控制器也集成到芯片内部。未来嵌入式系统的发展方向,随着微电子技术的发展和电子制造工艺的进步,嵌入式系统硬件的体积会不断缩小,系统稳定性也在不断增强,可以把更多功能集成到一个芯片上;同时功耗方面也不断降低。随着网络的普及和IPv6技术的应用,IPv6技术主要解决了IPv4的IP地址数目紧缺的现状,越来越多的嵌入式设备也会加入到网络中。典型的嵌入式系统的组成,嵌入式系统包括硬件和软件。硬件包括了嵌入式微处理器和嵌入式微控制器以及一些外围元器件和外部设备;软件包括了嵌入式操作系统和应用软件。嵌入式系统硬件种类繁多,有许多硬件和软件的解决方案,不同嵌入式系统软硬件很难兼容,软件必须修改而硬件必须重新设计才能使用。不仅如此,我们还要对软件硬件都有所了解才可以逐渐有所领悟。软件和硬件都是学习嵌入式系统必不可少的方面。其实我现在仍旧觉得在嵌入式系统这个博大精深的领域,我还有太多太多不懂的地方,需要学习的还有很读。嵌入式软件开发应用广泛而且前景很好,目前正处于人才紧缺的关口,嵌入式技术在未来能够得到更加广泛的应用。学好嵌入式,C语言很重要,所以感觉自己有必要在学习、积累一下这方面的知识。很多东西的学习不死一帆风顺也是比较耗时的,嵌入式也不例外,要想学好还必须下大力气,还必须坚持。这次的课程让我明确了一点:嵌入式开发对于提升我们的系统知识有很大的帮助,尤其是操作系统的知识。嵌入式系统开发对于我们的知识面要求非常的广,且要有一定的深度。,平时上完理论课很少有时间上机进行时间或者隔几天才上机练习,等到上机时一些东西可能遗忘了,比较耗费时间。在课上,有老师在前面演示我们感觉看得懂或感觉没问题,可轮到我们独立完成的时候,因为实际操作的少,跟着问题就来了。有些即使老师讲了很多遍的问题,我们不会,老师还是会走进我们给我们耐心的指导,还给我们讲一些学习的方法,一些软件开发需要注意的细节,让我们知道自己在哪方面不足,需要加强,也让我们了解到哪些需要认真的学习,那些是重点,不是没有方向的乱学一通,结果什么也学不好。经过这次的课程,我真真确确地感受到了嵌入式在我们生活中工作中的运用,这些软件、程序能让我们提高工作的效率,更直观更便捷的切入主题。当然,在学习的过程中并不是一帆风顺的,在这之中,因为要操作的东西很多,有时错一步,后面的结果就无法显示,而自己的水平根本检查不出来是哪里出了错。这时候,老师都会耐心的过来帮助我们一起去解决。在平时我们就需要好好的查阅书籍或者上网搜集相关资料去解决问题。
在了解了基础知识的情况下,我们还同步地进行了上机操作,当然,其中遇到很多的难题,很多东西都是第一次接触,又没有很多的指导操作,主要还是要凭借自己去摸索练习。其中的困难可想而知。然而坚持就是胜利,只要坚持做下去。通过这学期的实验课程,我感觉收获还是蛮多的。可能我对于嵌入式的知识学习的还是不太多,但是这之外的东西收获颇丰。它让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学习态度,只有真正下功夫去学习,才能有收获,正所谓“一份耕耘,一份收获”。没有付出,何谈回报呢?再者,通过这学期的实验课程,我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程。当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。
其实,我觉得最大的收获不仅仅是我学习到了多少知识,还有学习给我的感悟。首先是心态。一定要有一个积极的心态,独立解决问题的意识,培养扎实基础的认识。不要什么东西都感觉跟简单,很多东西可能是看似简单,就不去做了或者不屑一做,以至于性网上搜搜就可以了,这样很不好。有自己的东西有自己的付出才会有程序运行成功时的喜悦和小自豪,这样也有助于培养自己的兴趣。要时刻牢记态度决定一切。其次是兴趣,感觉学习工作中兴趣很关键,只是一个引发人积极性的问题,有了兴趣就自觉了,效率自然就高了。再次要敢于尝试和挑战。不要安于现成的程序,而且不要害怕失败,在程序调试的过程中这点尤为重要,“发现出问题然后解决问题”是一个积累经验的过程,而且很高效。最后要不懈追求。对于源代码进行不断的完善,要尽可能的实现课题所要求的功能。对于初学者或者开发较少的人来说,大量大写程序还是有必要的,但同时要注意思考,理解其实现的内在意义。还可以自己添加一些有意义的功能来实现。当看到自己编写的程序正常运行时,兴趣也会随之而来,乐此不疲,形成一个良性循环。我相信在以后的学习工作中,我也会端正自己的学习态度,一丝不苟的去对待每一件事。只有做好足够的准备,才能事半功倍!
第四篇:嵌入式实验总结
如今,嵌入式系统已经在众多电气电子产品上应用,有人预测今后5年发展形势看好。嵌入式是典型的交叉学科,电信、电子、电气、计算机、通信等等都有涉及。
嵌入式理论、实践要求多、门槛高,只有理论、实践同步才能在积累中更好的渐次掌握,这学期我们针对嵌入式入门做了一些实验,通过自己动手和实验箱、实验软件打交道,对嵌入式编程形成初步了解,为今后进一步发展打基础。
实验环境:
武汉创维特公司JXARM9-2410开发板、PC;
Linux、windows操作平台;
DNW、VMwareWorkstation应用软件;
《ARM9嵌入式技术及Linux高级实践教程》、实验参考资料等;
实验内容及目标:
阅读样例程序,进行:
1.熟悉JXARM9-2410开发板、相关应用软件的使用,能成功运行示例实验程序(demo-led);
2.使用VMware,修改demo-led源程序,使开发板上数码管按照demo-led显示方式显示;
3.使用VMware、DNW,修改相关源程序,实现开发板键盘输入的字符在DNW中显示;
4.使用VMware、DNW,修改相关源程序,实现对直流电机转动状态的控制;
观看教学视频,进行交叉编译:
1.加载linux内核;
2.配置、编译linux内核;
3.Windows、linux跨平台文件共享;
4.编译、运行linux程序(helloworld)
5.Linux下编译数码管显示驱动程序;
6.Linux下编译摄像头、GPRS驱动程序;
学习嵌入式是一个漫长的过程,学好它还是需要一番的功夫。通过嵌入式实验由浅入深的动手实践,我渐渐对嵌入式有了具体概念,也逐渐对其产生了兴致和好奇心。
对于初学者,还有一点小建议,不要好高骛远,要脚踏实地.
第五篇:嵌入式存储卡总结
嵌入式作业
1、NandFlash和NorFlash的区别 它们是两种并行FLASH
Flash存储器又称闪存,是一种可以在线多次擦除的非易失性存储器,即掉电后数据不会丢失,具体积小、功耗低、抗振性强等优点,为嵌入式系统中典型的两种存储设备。
(1)NOR型Flash:如SST39VF160,可以直接读取芯片内存储器的数据,速度比较快,但价格较高;芯片内执行(XIP,eXecute In Place),应用程序可以直接在Flash上运行,不必再把代码读到系统RAM中;
(2)NAND型Flash:如K9F2808U0C,内部数据以块为单位存储,地址线和数据线共用,使用控制信号选择;极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也快,应用NAND型的困难在于Flash的管理需要特殊的系统接口。(3)二者的差别:
接口差别:NOR型Flash采用的SRAM接口,提供足够的地址引脚来寻址,可以很容易的存取其片内的每一个字节;NAND型Flash使用复杂的I/O口来串行的存取数据,各个产品或厂商的方法可能各不相同,通常是采用8个I/O引脚来传送控制、地址、数据信息。
读写的基本单位:NOR型Flash操作是以“字”为基本单位,而NAND型Flash以“页面”为基本单位,页的大小一般为512字节。
性能比较:NOR型Flash的地址线和数据线是分开的,传输效率很高,程序可以在芯片内部执行,NOR型的读速度比NAND稍快一些;NAND型Flash写入速度比NOR型Flash快很多,因为NAND读写以页为基本操作单位。
容量和成本:NAND型Flash具有较高的单元密度,容量可以做得比较大,加之其生产过程更为简单,价格较低;NOR型Flash占据了容量为1~16MB闪存市场的大部分,而NAND型Flash只是用在8~128MB的产品中,这也说明NOR主要用在代码存储介质中,NAND适合数据存储在CompactFlash、PC Cards、MMC存储卡市场上所占的份额最大。
软件支持: NAND型和NOR型Flash在进行写入和擦除时都需要MTD(Memory Technology Drivers,MTD已集成在Flash芯片内部,它是对Flash进行操作的接口。),这是它们的共同特点;但在NOR型Flash上运行代码不需要任何的软件支持,而在NAND型Flash上进行同样操作时,通常需要驱动程序,即内存技术驱动程序MTD。
2、对比总结外部设备(1)MMC MMC卡(Multimedia Card)翻译成中文为“多媒体卡”。是一种快闪存储器卡标准。在1997年由西门子及SanDisk共同开发,技术基于东芝的NAND快闪记忆技术,因此较早期基于IntelNOR快闪记忆技术的记忆卡,例如CF卡更细小。MMC卡大小与一张邮票差不多,约24mm x 32mm x 1.5mm。
可反复进行读写记录30 万次。驱动电压为2.7-3.6V。MMC卡的的容量多达 2 GB,并且用于几乎所有使用存储卡的设备上。、针脚兼容的MMC卡可以用在所有支持SD卡的设备上。MMC卡原本使用1bit串联界面,但较新的标准则容许同时传送4 bit或8 bits的资料。,但由于MMC卡仍可被兼容SD卡的设备所读取,因此仍有使用。
MMC的发展目标主要是针对数码影像、音乐、手机、PDA、电子书、玩具等产品,尺寸只有32mm x 24mm x 1.4mm,只有1.5克。MMC也是把存贮单元和控制器一同做到了卡上,智能的控制器使得MMC保证兼容性和灵活性。
MMC存贮卡可以分为MMC和SPI两种工作模式,MMC模式是标准的默认模式,具有MMC的全部特性。而SPI模式则是MMC存贮卡可选的第二种模式,这个模式是MMC协议的一个子集,主要用于只需要小数量的卡(通常是1个)和低数据传输率(和MMC协议相比)的系统,这个模式可以把设计花费减到最小,但性能就不如MMC。
MMC被设计作为一种低成本的数据平台和通讯介质,它的接口设计非常简单:只有7针!接口成本低于0.5美元。在接口中,电源供应是3针,而数据操作只用3针的串行总线即可(SPI模式再加上1针用于选择芯片)。
MMC的操作电压为2.7伏到3.6伏,写/读电流只有27mA和23mA,功耗很低。它的读写模式包括流式、多块和单块。最小的数据传送是以块为单位的,缺省的块大小为512bytes。MMC卡也有小尺寸的型号,大约是正常尺寸的一半:24 mm × 18 mm × 1.4这种可选的尺寸称为小尺寸的多媒体卡或者RS-MMC,它是在2004年发布的。RS-MMC卡只是小型号的MMC卡,使用一个简单的机械转接延长它,一个RS-MMC卡能够用在任何MMC(或SD)插槽。RS-MMC卡的容量高达1 GB。
移动式MMC4是老式的RS-MMC的一个翻版,因为它使用了与RS-MMC同样的连接方式和连结标准,但是它的尺寸大约是正常MMC卡的一半。这个标准也定义了secureMMC的规范,它的加密特征类似于Secure Digital或者MagicGateMemory Sticks。
SD卡不是仅有的获得安全数字卡协会认可的快速存储卡标准。其它的安全数字卡协会格式包括miniSD和microSD(在被安全数字卡协会认可以前称为TransFlash)。
这些小型卡能够通过一个转换器(连结电路以及物理连接)在全尺寸的MMC/SD/SDIO插槽上使用。然而,需要注意的是,在SD尺寸上制造输入/输出设备已经非常困难了,在更小的尺寸上制造就变得更加不切实际。
由于SD插槽仍然支持MMC卡,单独发展的更小的MMC变体也与支持SD的设备兼容。与miniSD和microSD(它们与SD有很大不同,制造机械转换器已经很不现实)不同,RS-MMC插槽保持了与全尺寸MMC卡的后向兼容,因为RS-MMC仅仅是短一点儿的MMC卡。关于这些变体的更多信息参见多媒体卡。
大多数,也许是全部的MMC闪存卡都支持SPI模式,尽管每个法定要求但是不支持这种模式将带来严重的兼容性问题。SanDisk、Ritek/Ridata和Kingmax制造的所有闪存卡好像都支持SPI。并且,MMC卡可以认为在电气性能上等同于SD卡,但是它使用一个较薄的包装并且禁止了SD的功能(这样就不再需要支付SD的版权费)。
MMC定义了SPI和1位MMC/SD协议。基本的SPI协议已经作为许多微控制器的一个标准特点存在了许多年。从社会的观点来看,定义一个新的不兼容的SD/MMC协议的理由是值得怀疑的;开发一个不兼容的并且是非必需的新协议可能有利于贸易协会收取授权费用和成员费用,但是它在许多方面增加了硬件和软件的费用。新的协议使用开放的信号转换接头(open collector signalling)以允许在同一总线上使用多个存储卡,但是这实际上在使用更高时钟频率时带来了问题。尽管SPI使用三条共享的信号线外加一个单独的芯片选择每个存储卡,新协议允许多达30块存储卡连结到同样的三条线上(不包含片选),这样做的代价是更加复杂的闪存卡初始化和需要每个卡有一个唯一的序列号用于即插即用;这个特性实际上很少使用并且由于速度和功耗问题在新标准中不建议它的使用。有类似所有权的1位协议被扩展到四位宽(SD和MMC)和八位宽用来支持更高速度,但是计算机产业的其它大部分都在向更高速度更窄的通道转移;标准的SPI能够简单地使用更高数据速度的时钟(如133 MHz)以获得比四位SD更高的性能--没有更高时钟速度的嵌入式处理器无论如何也不能处理更快速度的数据。SD协会放弃了一些旧的一位MMC协议命令的支持并且添加了另外一些与版权保护相关的命令。
(2)SD卡
安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(外语缩写PDA)和多媒体播放器等。SD卡(Secure Digital Memory Card)是一种基于半导体闪存工艺的存储卡,SD卡具有大容量、高性能、安全等多种特点的多功能存储卡,它比MMC卡多了一个进行数据著作权保护的暗号认证功能(SDMI规格),读写速度比MMC卡要快4倍,达2M/秒。
SD卡的技术是基于Multimedia Card(MMC)格式上发展而来,大小和MMC卡差不多,尺寸为32mm x 24mm x 2.1mm。长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存贮单元。SD卡与MMC卡保持着向上兼容,也就是说,MMC卡可以被新的SD设备存取,兼容性则取决于应用软件,但SD卡却不可以被MMC设备存取。(SD卡外型采用了与MMC卡厚度一样的导轨式设计,以使SD设备可以适合MMC卡。SD卡接口除了保留MMC卡的7针外,还在两边加多了2针,作为数据线。采用了NAND型Flash Memory,基本上和SmartMedia的一样,平均数据传输率能达到2MB/s。
设有SD卡插槽的设备能够使用较簿身的MMC卡,但是标准的SD卡却不能插入到MMC卡插槽。SD卡能够于CF卡和PCMCIA卡上,插上转接器使用;而miniSD卡和microSD卡亦能插上转接器于SD卡插槽使用。一些USB连接器能够插上SD卡,而且一些读卡器亦能够插上SD卡,并由许多连接埠,例如USB、FireWire等存取使用。SD卡的结构能保证数字文件传送的安全性,也很容易重新格式化,所以有着广泛的应用领域,音乐、电影、新闻等多媒体文件都可以方便地保存到SD卡中。因此不少数码相机也开始支持SD卡。
SD卡容量目前有3个级别,那就是SD,SDHC和SDXC
SD容量有8MB、16MB、32MB、64MB、128MB、256MB、512MB、1GB、2GB
(所有SD和SDIO卡都必须支持较老的SPI/MMC模式。这个模式支持慢速的四线序列接口(时钟、序列输入,序列输出,芯片选择),兼容于序列终端接口(SPI)和许多微控制器。
MMC模式不支持SD卡的加密特性。从免费的文档里也找不到这些细节。但对于大多数消费者来讲,这无关痛痒,用户只是用来储存不受保护的数据。
SD卡共支持三种传输模式:SPI模式(独立序列输入和序列输出),1位SD模式(独立指令和数据通道,独有的传输格式),4位SD模式(使用额外的针脚以及某些重新设置的针脚。支持四位宽的并行传输)
SD卡内嵌的数字版权保护方案是按4C提出的可纪录介质内容保护标准(CPRM)所制定。其核心是使用了Cryptomeria密码(也称为“C2”)。这一特性是保密的。DVD-Audio光盘也采用了与CPPM非常相似的加密方案。SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的新一代记忆设备。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。
SD卡在24mm×32mm×2.1mm的体积内结合了SanDisk快闪记忆卡控制与MLC(Multilevel Cell)技术和Toshiba(东芝)0.16u及0.13u的NAND技术,通过9针的接口界面与专门的驱动器相连接,不需要额外的电源来保持其上记忆的信息。而且它是一体化固体介质,没有任何移动部分,所以不用担心机械运动的损坏。
SD卡体积小巧,广泛应用在数码相机上,是由日本的松下公司、东芝公司和SanDisk公司共同开发的一种全新的存储卡产品,最大的特点就是通过加密功能,保证数据资料的安全保密。SD卡在外形上同MultiMedia Card卡保持一致,并且兼容MMC卡接口规范。不过注意的是,在某些产品例如手机上,SD卡和MMS卡是不能兼容的。SD 卡在售价方面要高于同容量的MultiMedia Card卡。
SD卡多用于MP3随身听、数码摄像机、数码相机等,其投影面积与MMC卡相同,只是略微厚一点,为2.1mm,但是SD卡的容量大得多,且读写速度也MMC卡快4倍。同时,SD卡的接口与MMC卡是兼容的,支持SD卡的接口大多支持MMC卡。2013年SD卡在数码相机中正在迅速普及,大有成为主流之势。SD卡在2013年的发展很快,已经开始威胁到CF卡的市场分额了。这是由于SD卡的体积要比CF卡小很多,并且SD卡在容量、性能和价格上和CF卡的差距越来越小,而这两年支持SD卡的手机迅速在市场走热,因此,SD卡的迅速成长绝对不是偶然的。最重要的一点就是MMC卡也能和SD卡相兼容,这也正是SD卡迅速走红的原因之一。(3)Memory Stick 最初的Memory Stick提供最多128MB的容量,以及Memory Stick Select容许两张128MB的容量于一张卡内。而含有8GB容量的Memory Stick,已于2006年在拉斯维加斯举行的国际消费电子展中公布,但根据索尼公司的资料,Memory Stick PRO最大可能容量为32GB。一般而言,Memory Stick是用来为手提式装置作为储存媒体的, 以易于移除的方式来被PC存取。例如,索尼的数码相机用Memory Sticks来储存影像档。以Memory Stick读卡器(一般是一个以USB或其他连线方式连接的细小的盒子),用户可不需把索尼数码相机接到电脑而复制图片。有Memory Stick在数码相机的索尼用户、数码音乐播放机,PDA,手提电话,PSP,和其他的装置以及索尼的VAIO个人电脑早已包含Memory Stick插槽。除了从数码相机复制影像档外,用户还可以复制任何类型的档案到记忆棒内或把档案从记忆棒内复制出来。市面上也有PCMCIA、CompactFlash或3.5"存软盘接口的读卡器。兼容性方面,较老的MS卡能够在较新的读取装置上使用,(较短的Memory StickDuo 加上一个适配器后也可以使用)。但是,Memory Stick PRO 和 Memory Stick PRO Duo 通常不能在较老的读取装置上使用。
记忆棒是索尼独家开发的标准,第三方的生产厂家还有SanDisk和Lexar。尽管它是索尼独家支持的标准,记忆棒还是比其它独家支持的快闪存储格式寿命更长。除了外型小巧、具有极高稳定性和版权保护功能以及方便地使用于各种记忆棒系列产品等特点外,记忆棒的优势还在于索尼推出的大量利用该项技术的产品,如DV摄像机、数码相机、VAIO个人电脑、彩色打印机、Walkman、IC录音机、LCD电视等,而PC卡转换器、3.5英寸软盘转换器、并行出口转换器和USB读写器等全线附件使得记忆棒可轻松实现与PC及苹果机的连接。
记忆棒的缺点一是只能在索尼数码相机和PSP中使用,二是容量尚不够大。
尺寸为:50mm x 21.5mm x 2.8mm,重4克。采用精致醒目的蓝色外壳(新的MG为白色),并具有写保护开关。和很多Flash Memory存储卡不同,Memory Stick规范是非公开的,没有什么标准化组织。采用了Sony自己的外型、协议、物理格式和版权保护技术,要使用它的规范就必须和Sony谈判签订许可。Memory Stick也包括了控制器在内,采用10针接口,数据总线为串行,最高频率可达20MHz,电压为2.7伏到3.6伏,电流平均为45mA。可以看出这个规格和差不多同一时间出现的MMC颇为相似。Memory Stick PRO是大容量记忆棒的最终解决方案。大部分老的读取装置也能支持MS PRO。通过Flash ROM的更新,其它较老的读卡器也能兼容MS PRO。MS PRO的传输速率更快,最大支持容量能达到32GB(截至05年6月,最大容量4GB)。所有大于1GB的MS PRO都支持高速传输模式,大容量的记忆棒相比同样容量的SD卡或者CF卡,价格要高的多。
索尼在2005年9月30日宣布,它与SanDisk的合资工厂会推出一种新的记忆棒格式,新的Memory Stick Micro(M2)尺寸仅 15 × 12.5 × 1.2 毫米,理论上支持32 GB。最高传输速度160 MB/秒。特性:
标准传输速度: 最高写速度: 14.4 M比特/秒(1.8 MB/秒);最高读速度: 19.6 M比特/秒(2.5 MB/秒)PRO 传输速度:传输: 160 M比特/秒(20 MB/秒)最小写速度: 15 M比特/秒 Micro 传输速度:传输: 160 M比特/秒(20 MB/秒)外形尺寸:
标准版: 50.0 mm(宽)× 21.5 mm(高)× 2.8 mm(厚)Duo: 31.0 mm(宽)× 20.0 mm(高)× 1.6 mm(厚)Micro: 15.0 mm(高)× 12.5 mm(宽)× 1.2 mm(厚)(4)CompactFlash卡
CompactFlash(CF卡)最初是一种用于便携式电子设备的数据存储设备。作为一种存储设备,它革命性的使用了闪存,于1994年首次由SanDisk公司生产并制定了相关规范。当前,它的物理格式已经被多种设备所采用。从外形上CF卡可以分为两种:CFI型卡以及稍厚一些的CFII型卡。从速度上它可以分为CF卡、高速CF卡(CF+/CF2.0规范)、CF3.0、CF4.0,更快速的CF4.1标准也在2007年被采用。CFII型卡槽主要用于微型硬盘等一些其他的设备。
CF是与出现更早且尺寸更大的PCMCIAI型内存卡竞争的第一批闪存标准之一,它最初是建立在英特尔的或非型闪存的基础上,之后改为使用与非型闪存。CF是最老也是最成功的标准之一,尤其适合专业相机市场。它具有比其他存储方式更长的寿命以及较低的单位容量成本,同时也可以在较小的尺寸上提供较大的容量。
CF卡可以通过适配器直接用于PCMCIA卡插槽,也可以通过读卡器连接到多种常用的端口,如USB、Firewire等。另外,由于它具有较大的尺寸(相对于较晚出现的小型存储卡而言),大多数其他格式的存储卡可以通过适配器在CF卡插槽上使用,其中包括SD卡/MMC卡、MemoryStickDuo、XD卡以及SmartMedia卡等。
闪存型存储设备具有非易失性和固态,所以它比磁盘驱动器更稳固,耗电量仅相当于磁盘驱动器的5%,却仍然具有较快的传输速率(SanDiskExtremeIV型CF卡的写入速度和读取速度可达40MB/s)。它们的工作电压为3.3volts或5volts,可以在不同的系统间转换。闪存型CF卡可以适应极端的温度变化,工业标准的闪存卡可以在-45至85摄氏度的范围内工作。
CF接口已广泛用于PDA、笔记本电脑、数码相机和包括台式机在内的各种设备。
到2007年,CF卡的容量规格从最小的8MB到最大可达64GB。当前已达到256GB,最高读写速度160MB/s。(5)XDpictureCard
XD卡,全称为XDPictureCard,是专为存储数码照片开发的一种存储卡。以袖珍的外形、轻便、小巧等特点成为时下风尚。XD卡具有超大的存储容量和优秀的兼容性,能配合各式读卡器,可以方便的与个人电脑连接。
XD卡是由日本奥林巴斯株式会社和富士有限公司联合推出的一种新型存储卡,有邮票般大小、极其紧凑的外形。外形尺寸为20mm×25mm×1.7mm,总体积只有0.85立方厘米,约为2克重,是目前较为轻便、小巧的数字闪存卡。
XD卡是较为新型的闪存卡,相比于其它闪存卡,它拥有众多的优势特点。
XD卡的理论最大容量可达8GB,具有很大的扩展空间。目前市场上见到的XD卡有512MB、1GB、2GB等不同的容量规格。
XD卡采用单面18针接口,理论上图像存储容量最高可达8GB,2004年富士与奥林巴斯联合推出了存储容量最高达1GB的 xD 卡。而且其读写速度也更高,(读取速率为5MB/S,写入速率为3MB/S左右)可以满足大数据量写入,功耗也更低,XD-Picture存储卡不仅可以同时用于个人电脑适配卡和USB读卡机,使之非常容易与个人电脑连接,而且其还可配合Compact Flash转接适配器,并允许在数码相机里做为Compact Flash卡存储介质使用。虽然XD卡目前的价格有些昂贵,不过由于随着闪存芯片及其它存储卡价格的不断下滑,XD卡的价格将有较大的降价空间。
目前市面上常见到的xD卡有三种类别:标准型、M型、H型
这三种的尺寸都是一样的,不同的地方在于采用的技术以及芯片不同,所以速度也不同。
最早推出的XD卡就是所谓的标准型,这点没有什么争议,标准测试出来的数值大概在读取5M/秒、写入3M/秒。
M型就是采用MLC技术生产的xD卡,这是2005年发表的,为的就是降低售价。然而却碰到与奥林巴斯以及富士一些旧款机型不兼容的问题,而且由于速度慢(MLC最大的缺点),在录像功能上时常出现问题,标准测试出来的数值大概在读取4M/秒、写入2.5M/秒。
H型,就是HIGH-SPEED的意思,读写速度比标准型快2倍、比M型快三倍,名副其实的HIGH SPEED。(6)MMCMobile 为了获得更好的节电性能,MMC协会推出了既能在低电压下工作又能兼容原有RS-MMC的存储卡--MMC moboile,它能在1.65~19.5V和2.7~3.6V电压两种模式下工作,理论传输速度最高可达52MB/s。被称之为双电压RS-MMC。MMC moboile与RS-MMC卡的尺寸大小完全一致,最大的区别在于MMC moboile具有13个金手指。(7)MMC micro 相比microSD卡,MMC micro的体积略大一些,为12mm×14mm×1.1mm。与MMC moboile一样都支持双电压,适用于对尺寸和电池续航能力要求很高的手机以及其他手持便携式设备。传输速度上前面的快(8)MINISD
miniSD卡是SD卡发展而来,性能和传统的SD卡并无大的区别,miniSD卡和SD卡一样,都具有每秒2MB的数据传输速度。与传统SD卡一样,miniSD卡同样具有硬件数据写保护保护开关,可避免储存内容不慎删除的风险。miniSD卡特点是体积小巧(体积只有21.5×20x1.4mm,相比较原来的SD卡减少了40%的体积)、性能稳定,可配合专用转接卡使用,完全兼容标准SD卡插槽。而且miniSD卡采用的是低耗电的设计,比SD卡更适用于移动通信设备,因此主要进攻手机、PDA、掌上电脑的信息终端。
与TF卡相比,miniSD卡就要常见得多了,同样作为一款身材比较苗条的多媒体卡,miniSD卡在手机市场中的使用就要广泛得多了,比如摩托罗拉MPX100、松下X700、BQ S700等品牌的多种手机产品都支持它。同时通过扩展卡它又能作为标准的SD卡使用,非常方便。(9)microSD
Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card,由SanDisk(闪迪)公司发明。在Micro SD面市之前,手机制造商都采用嵌入式记忆体,虽然这类模组容易装设,然而有着无法应实际应潮流需求的困扰--容量被限制住了,无法再有升级空间。Micro SD仿效SIM卡的应用模式,即是同一张卡可以应用在不同型号的行动电话内,让行动电话制造商不用再为插卡式的研发设计而伤脑筋。Micro SD卡足以堪称可移动式的储存IC。Micro SD卡是一种极细小的快闪存储器卡,其格式源自SanDisk创造,原本这种记忆卡称为T-Flash,及后改称为Trans Flash;而重新命名为Micro SD的原因是因为被SD协会(SDA)采立。另一些被SDA采立的记忆卡包括Mini SD和SD卡。其主要应用于移动电话,但因它的体积微小和储存容量的不断提高,已经使用于GPS设备、便携式音乐播放器和一些快闪存储器盘中。它的体积为 15mm x 11mm x1mm,差不多相等于手指甲的大小,是现时最细小的记忆卡。它也能通过SD转接卡来接驳于SD卡插槽中使用。现时MicroSD卡提供128MB、256MB、512MB、1G、2G、4G、8G、16G、32G和64G的容量(MWC 2014 世界移动通信大会期间,SanDisk打破了储存卡最高64GB容量的传统,正式发布了一款容量高达128GB的 Micro SD XC 储存卡。
3、自己手机中的硬件设备
CPU高通骁龙600其中搭载gpu为Adreno320
摄像传感器:背照式2代CMOS
蓝牙4.0
不支持SD卡扩展