1、嵌入式系统:是一种"完全嵌入受控器件内部,为特定应用而设计的专用计算机系统",根据英国电气工程师协会的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。嵌入式系统通常进行大量生产,所以单个的成本节约,能够随着产量进行成百上千的放大。
2、
可以这么理解嵌入式系统的定义:
嵌入式系统是用来控制或者监视机器、装置、工厂等大规模设备的系统。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
3、(1)嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。因此可以这样理解上述三个面向的含义,即嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。
(2)嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。所以,介入嵌入式系统行业,必须有一个正确的定位。例如palm之所以在pda领域占有70%以上的市场,就是因为其立足于个人电子消费品,着重发展图形界面和多任务管理;而风河的vxworks之所以在火星车上得以应用,则是因为其高实时性和高可靠性。
(3)嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。所以,如果能建立相对通用的软硬件基础,然后在其上开发出适应各种需要的系统,是一个比较好的发展模式。目前的嵌入式系统的核心往往是一个只有几k到几十k微内核,需要根据实际的使用进行功能扩展或者裁减,但是由于微内核的存在,使得这种扩展能够非常顺利的进行。
实际上,嵌入式系统本身是一个外延极广的名词,凡是与产品结合在一起的具有嵌入式特点的控制系统都可以叫嵌入式系统,而且有时很难以给它下一个准确的定义。现在人们讲嵌入式系统时,某种程度上指近些年比较热的具有操作系统的嵌入式系统,本文在进行分析和展望时,也沿用这一观点。
『贰』 如何制作嵌入式linux文件系统
步骤方法:
1、用 busybox 解压缩后 运行 make menuconfig 进入配置项 。
2、设置参数 如需要是那种文件系统。
3、保存退出 make&&make install 生成文件系统 保存在当前目录下_install下。
为了支持某些运算 需要添加某些库文件 最简单的方法 把 arm-linux-gcc lib目录下的
库文件 全部 到 文件系统下 lib目录。
『叁』 嵌入式linux文件系统有哪些
Linux 系统核心支持十多种文件系统类型:jfs,ReiserFS,ext,ext2,ext3,iso9660,xfs,minx,msdos,umsdos,Vfat,NTFS,Hpfs,Nfs,smb,sysv,proc 等. 下面是主要分类: 一, ext ext 是第一个专门为 Linux 的文件系统类型,叫做扩展文件系统. 二, ext2 ext2 是为解决 ext 文件系统的缺陷而设计的可扩展的高性能的文件系统.又被称为 二级扩展文件系统 三, ext3 ext3 是由开放资源社区开发的日志文件系统,. ext3 被设计成是 ext2 的升级版本。 四, jsf jsf 提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的。 五,ReiserFS ReiserFS 基于平 衡树结构的 、ReiserFS 文件系统在网上公布.ReiserFS 3.6.x(作为 Linux 2.4 一部分 的版本),设计成员相信最好的文件系统是那些能够有助于创建独立的共享环境或者命名空间的文件系统。 六,Xfs xfs 是一种非常优秀的日志文件系统,它是 SGI 公司设计的.xfs 被称为业界最先进 的,最具可升级性的文件系统技术.它是一个全 64 位,快速,稳固的日志文件系统, 其他文件系统简介: Minix:Llnux 支持的第一个文件系统,对用户有很多限制而且性能低下 Xia:Minix 文件系统修正后的版本.在一定程度上解决了文件名和文件系统大小的 Msdos:msdos 是在 Dos,Windows 和某些 OS/2 操作系统上使用的一种文件系 统,其名称采用"8+3"的形式,即 8 个字符的文件名加上 3 个字符的扩展名. umsdos:Linux 下的扩展 msdos 文件系统驱动,支持长文件名,所有者,允许 权限,连接和设备文件.允许一个普通的 msdo s 文件系统用于 Linux,而且无须为它建 立单独的分区. iso9660:名. 标准 CDROM 文件系统,通用的 Rock Ridge 增强系统,允许长文件 Vfat:vfat 是 Windows9x 和 Windows NT/2000 下使用的一种 Dos 文件系统, 其在 Dos 文件系统的基础上增加了对长文件名的支持. Nfs:Sun 公司推出的网络文件系统,允许多台计算机之间共享同一文件系统,易 于从所有这些计算机上存取文件. Hpfs: High Performance File System(HPFS) 高性能文件系统(HPFS) HPFS 是 Microsoft 的 LAN Manager 中的文件系统,同时也是 IBM 的 LAN Server 和 OS/2 的文件系统.HPFS 能访问较大的硬盘驱动器,提供更多的组织特性并改善了文件 系统的安全特性. Smb:smb 是一种支持 Windows for workgroups,Windows NT 和 Lan Man ager 的基于 SMB 协议的网络操作系统. Sysv:sysv 文件系统实际上是 System V/Coherent 在 Linux 平台上的文件系统. Ncpfs:ncpfs 是一种 Novell NetWare 使用的 NCP 协议的网络操作系统. Proc:proc 是 Linux 系统中作为一种伪文件系统出现的,它用来作为连接内核数据 结构的界面. NTFS:微软 Windows NT 内核的系列操作系统支持的,一个特别为网络和磁盘配 额,文件加密等管理安全特性设计的磁盘格式.
『肆』 一、嵌入式之FAT32文件系统(1)
参考文件
FAT32文件系统有几个基本的几个概念:
先拿一个真实的4G SD卡分析数据:
使用winhex物理方式查看,截一部分图:
全称Master Boot Record,即主引导记录。
主引导记录分为两个部分,一个部分是前446字节,另外一个部分是后64字节。
前446个字节,一般取值为0,不过有的时候也会有其他的设置值。
这部分也叫DPT,全称Disk Partition Table,即磁盘分区表。
磁盘分区表有4个区,每个区有16字节,总体是64字节。因此,MBR字节数为512字节,刚好是一个扇区的数量。
DPT的4个部分,每一个部分的16字节含义如下表:
00 82 03 00 0B E6 DC CA 00 20 00 00 00 E0 ED 00(16进制)
这里,就贴出来上面截图的数据内容。(我们使用的是小字节序)
0x00 :
通常的取值。
0x82 :
开始磁头。
0x03 0x00 :
实际为0x0003,按照2进制编码为0000 0000 0000 0011。
那么开始扇区为:0。
开始柱面为:3。
0x0B :
分区类型,为Win95 FAT32类型。
0xE6 :
结束磁头为230。
0xDC 0xCA:
实际为0xCADC,按照2进制编码为1101 1100 1100 1010。
那么结束扇区为:55。
结束柱面为:220。
0x00 0x20 0x00 0x00 :
实际为:0x00002000,也就是8192,为分区的开始扇区地址。那么我们后面就可以从这里去找DBR。
0x00 0xE0 0xED 0x00 :
实际为:0x00EDE000,也就是15589376,为分区的总扇区数。
从这里其实可以算出SD卡的容量。
也就是:
分区大小:15589376x512 = 7981760512。这个值大约是7.612G。
从物理0地址到起始地址:8192*512 = 4194304
那么总容量为:7981760512+4194304 = 7985954816。
该部分包括一个叫BPB的内容。
先截出DBR部分的实际SD卡上的内容:
在WinHex下使用逻辑磁盘打开FAT32文件系统的存储介质来看,偏移位置与表示的含义有如下表所示:
25字节的分区块(BPB):
扩展分区BPB:
按照定义,将实际的图 MBR.png分析如下:
从偏移为0x0BH地址开始:
00 02 10 96 04 02 00 00 00 00 F8 00 00 3F 00 FF 00 00 20 00 00 00 E0 ED 00 B5 1D 00 00
00 02 :
即0x0200,表示扇区字节数,也就是512字节。
10:
即0x10,每簇扇区数为16。也就是16 512=8 1024=8K。
96 04:
即0x0496,保留扇区数为1174。
02:
即0x02,FAT表份数为2。
00 00:
即0x0000,为保留。
00 00:
即0x0000,为保留。
F8:
即为本地硬盘。
00 00:
即0x0000,为保留。
3F 00:
即0x003F,即每磁道扇区数为63。
FF 00:
即0x00FF,即磁头数为255。
00 20 00 00:
即0x00002000,即隐藏扇区数为8192。
00 E0 ED 00:
即0x00EDE000,即磁盘总扇区数为15589376。
B5 1D 00 00 :
即0x001DB5,即FAT表占用扇区数为7605。
好了,根据这些内容,可以计算出两个参数:
FAT1的开始扇区 = 分区开始扇区+ 保留扇区=8192+1174 = 9366。
FAT2的开始扇区 = FAT1的开始扇区+FAT表占用的大小 = 9366 + 7605 = 16971。
首目录簇 = FAT1的开始扇区+FAT的表份数 x FAT表占用的大小=9366+2*7605 = 24576。
继续追踪,找到首目录簇中的已经新建的文件。
现在,先解析粘贴出来的每个部分的内容的含义。
具体内容下面的FAT中会说。
a.txt部分的解析:
41 20 20 20 20 20 20 20 54 58 54 20 18 8B 2A 90
96 4A A1 4A 00 00 0F 8C A1 4A 03 00 10 00 00 00
41 20 20 20 20 20 20 20:
表示文件名:“A TXT”
20 :
表示的是文件的属性。归档。
18:
为系统保留。
8B:
创建时间的10ms位。也就是1390ms。
2A 90:
也就是0x902A,换成2进制为1001 0000 0010 1010 。表示的是创建时间。
细分如下:
则时间值为:
时:0x12 = 18,
分:0x1 = 1,
秒:0xAx 2s + 1390ms= 10x 2s + (1390ms) = 21s,
所以创建时间为18:01:21。
96 4A:
也就是0x4A96,换成2进制为0100 1010 1001 0110,表示的是创建日期。
细分如下:
则日期值为:
年:1980+0x25 = 2017,
月:0x4 = 4,
日:0x16= 22,
所以,创建日期为2017年4月22日。
A1 4A:
也就是0x4AA1,换成2进制为0100 1010 1010 0001,表示的是最后访问日期。
则日期为:
年:1980+0x25 = 2017,
月:0x5 = 5,
日:0x1= 1,
所以,最后访问日期为2017年5月1日。
00 00:
起始簇高16位。
0F 8C:
也就是0x8C0F,换成2进制为1000 1100 0000 1111,表示的是最近修改时间。
时:0x11 = 17,
分:0x20 = 32,
秒:0xf x 2 = 30s,
所以最近修改时间为17:32:30。
A1 4A:
也就是0x4AA1,换成2进制为0100 1010 1010 0001,表示的是最近修改日期。
则日期为:
年:1980+0x25 = 2017,
月:0x5 = 5,
日:0x1= 1,
所以,最近修改日期为2017年5月1日。
03 00:
即0x0003,表示起始簇低16位,也就是说,起始簇高位与起始簇低位相或,得到0x00000003,起始簇为3。
10 00 00 00:
即0x00000010,表示文件数据长度,也就是16字节。
分析完a.txt,b.txt也一样分析即可。
从而可以得到的是,a.txt的内容位置在:(3-2)*16+24576 = 24592上。
后使用winhex进行验证,确认是正确的。
文件分配表(FAT),是FAT文件系统中用于磁盘数据索引和定位而引进的一种链式结构。在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。
如DBR所述,偏移0EH处存储了保留扇区的个数,而保留扇区数指的就是当前分区内DBR到FAT表之间的所有扇区的个数(包括DBR但不包括FAT表)。据此,可以定位FAT表所在的起始偏移位置了。
如DBR所述,偏移24H处存储了保留扇区的个数,知道FAT2是紧邻FAT1的。那么FAT2表的位置为:FAT1的起始偏移地址+FAT1的大小。
FAT表由一系列大小相等的FAT表项组成,它有如下特性:
在FAT32文件系统中,根目录的位置不再硬性地固定,可以存储在分区内可寻址的任意簇内,不过通常根目录是最早建立的(格式化就生成了)目录表。所以,我们看到的情况基本上都是根目录首簇紧邻FAT2,占簇区顺序上的第1个簇(即2号簇)。同时,FAT32文件系统将根目录当做普通的数据文件来看,所有没有了目录项数的限制,在需要的时候可以分配空簇,存储更多的目录项。
对于短文件名格式的目录项:
注意:*表示此字段在段文件目录项中,不可取值0FH。若取值为0FH,目录段为长文件名目录段。
0BH字段取值如下:
FAT32的一个重要的特点是完全支持长文件名。长文件名依然是记录在目录项中的。为了低版本的OS或程序能正确读取长文件名文件,系统自动为所有长文件名文件创建了一个对应的短文件名,使对应数据既可以用长文件名寻址,也可以用短文件名寻址。不支持长文件名的OS或程序会忽略它认为不合法的长文件名字段,而支持长文件名的OS或程序则会以长文件名为显式项来记录和编辑,并隐藏起短文件名。
长文件名的实现有赖于目录项第12字节属性字节,当此字节的值为0FH时,支持长文件名的系统会将其当做长文件名的依据,而只支持短文件名的系统会认为是异常而忽略掉。系统将长文件名以13个字符为单位进行切割,每一组占据一个目录项。所以可能一个文件需要多个目录项,这时长文件名的各个目录项按倒序排列在目录表中,以防与其他文件名混淆。
长文件名中的字符采用unicode形式编码,每个字符占据2字节的空间。其目录项定义如:
『伍』 典型嵌入式linux软件部分由哪些模块组成他们的功能及相互联系 Bootloader分为哪两阶段分
从软件硬件设计特点简单描述嵌入式产品开发设计流程。
项目论证阶段:项目的可行性分析并形成可行性研究报告。
系统方案阶段:对产品需求加以分析、细化,并抽象出需要完成的功能列表,明确定义所要完成的任务。
系统设计阶段:软件开发部分完成软件需求分析,形成软件总体设计方案,软件开发接口规范等;硬件部分完成硬件总体设计方案,接口定义及说明等。
产品详细设计阶段:完成软/硬件的详细设计,编制代码,形成软件各模块的设计说明;硬件部分各单板的原理图,PCB和料单,同时完成产品的结构设计。
制造联试阶段:完成产品的系统调试和可靠性测试,并形成相应的系统调试报告和可靠性测试报告。
典型嵌入式Linux软件部分由哪些模块组成?它的功能和相互关系是什么?
Bootloader、嵌入式Linux内核、嵌入式文件系统组成。Bootloader完成硬件设备的初始化以及引导内核加载,内核通过文件系统来管理对整个系统中的所有的数据和文件。
BootLoader分为哪两个阶段?分别实现了哪些功能?
stage1和stage2两个阶段。
完成的工作:
硬件设备初始化。
为加载Bootloader的stage2准备RAM空间。
拷贝Bootloader的stage2到RAM空间中。
设置堆栈。
跳转到stage2的C入口点。
stage2完成的工作:
初始化本阶段要使用到的硬件设备。
监测系统内存映射。
将内核映像和根文件系统映像从Flash设备上复制到RAM空间中。
设置内核启动参数。
调用启动内核。
简述嵌入式文件系统的种类和管理机制。
Ext2fs文件系统 2.基于Flash的文件系统 3.基于RAM的文件系统 4.网络文件系统。
Linux引入了虚拟文件系统vfs(virtual file system),为各类文件系统提供一个统一的应用编程接口。
如何理解消费类电子产品开发的可裁剪性和可移植性,并以Linux系统为例进行说明。
Linux来说,假如我们用不到以太网设备,我们可以将该设备的驱动程序以及相关库文件等都去掉以缩小体积。
Linux可以在不同架构的CPU平台上运行。
详细描述嵌入式Linux软件开发的编译开发环境和编译开发工具。
开发环境:首先宿主机上需要安装Linux操作系统。需要为这个Linux系统安装以下三个部分:
函数库(glibc):是Linux下C语言的主要函数库。
编译器(gcc):可以将C,C++,汇编源程序和目标程序编译、链接成可执行文件。
系统头文件(glibc_header):系统相关功能的头文件集合。
编译开发工具:编辑器有Vi和Emacs;编译器为GCC,是GUN推出的功能强大、性能优越的多平台编译器;调试器为GDB,可以方便的设置断点、单步跟踪等调试功能;项目管理器“make”,用来控制编译或者重复编译,自动管理软件编译内容、方式和时机。
基于S3C2410嵌入式Linux的开发的逻辑空间和物理空间如何对应?详细描述之。
在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的虚拟存储空间中。
n 物理存储空间布局
Linux的物理存储空间布局与处理器相关,详细情况可以从处理器用户手册的存储空间分布表(memory map)相关章节中查到,我们这里只列出嵌入式处理器平台Linux物理内存空间的一般布局,如图18-4所示。
图18-4 Linux物理内存空间一般布局示意图
说明:
1)最大node号n不能大于MAX_NUMNODES-1。
2)MAX_NUMNODES表示系统支持的最多node数。在ARM系统中,Sharp芯片最多支持16个nodes,其他芯片最多支持4个nodes。
3)numnodes是当前系统中实际的内存node数。
4)在不支持CONFIG_DISCONTIGMEM选项的系统中,只有一个内存node。
5)最大bank号m不能大于NR_BANKS-1。
6)NR_BANKS表示系统中支持的最大内存bank数,一般等于处理器的RAM片选数。在ARM系统中,Sharp芯片最多支持16个banks,其他芯片最多支持8个banks。
7)mem_init()函数会将所有节点的页帧位码表所占空间、孔洞页描述符空间及空闲内存页都释放掉。
n虚拟存储空间布局
在支持MMU的系统中,当系统做完硬件初始化后就使能MMU功能,这样整个系统就运行在虚拟存储空间中,实现虚拟存储空间到物理存储空间映射功能的是处理器的MMU,而虚拟存储空间与5路存储空间的映射关系则是由Linux内核来管理的。32位系统中物理存储空间占4GB空间,虚拟存储空间同样占4GB空间,Linux把物理空间中实际存在的远远小于4GB的内存空间映射到整个4GB虚拟存储空间中除映射I/O空间之外的全部空间,所以虚拟内存空间远远大于物理内存空间,这就说同一块物理内存可能映射到多处虚拟内存地址空间上,这正是Linux内存管理职责所在。图18-5列出了Linux内核中虚拟内存空间的一般布局(其实I/O空间也在其中,通常占用高端内存空间,在此未标出)。
图18-5 Linux系统虚拟内存空间一般布局示意图
说明:
1)线性地址空间:是指Linux系统中从0x00000000到0xFFFFFFFF整个4GB虚拟存储空间。
2)内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisor mode)下的代码或数据,内核空间占用从0xC0000000到0xFFFFFFFF的1GB线性地址空间,内核线性地址空间由所有进程共享,但只有运行在内核态的进程才能访问,用户进程可以通过系统调用切换到内核态访问内核空间,进程运行在内核态时所产生的地址都属于内核空间。
3)用户空间:用户空间占用从0x00000000到0xBFFFFFFF共3GB的线性地址空间,每个进程都有一个独立的3GB用户空间,所以用户空间由每个进程独有,但是内核线程没有用户空间,因为它不产生用户空间地址。另外子进程共享(继承)父进程的用户空间只是使用与父进程相同的用户线性地址到物理内存地址的映射关系,而不是共享父进程用户空间。运行在用户态和内核态的进程都可以访问用户空间。
4)内核逻辑地址空间:是指从PAGE_OFFSET(3G)到high_memory(物理内存的大小,最大896)之间的线性地址空间,是系统物理内存映射区,它映射了全部或部分(如果系统包含高端内存)物理内存。内核逻辑地址空间与图18-4中的系统RAM内存物理地址空间是一一对应的(包括内存孔洞也是一一对应的),内核逻辑地址空间中的地址与RAM内存物理地址空间中对应的地址只差一个固定偏移量(3G),如果RAM内存物理地址空间从0x00000000地址编址,那么这个偏移量就是PAGE_OFFSET。
5)低端内存:内核逻辑地址空间所映射物理内存就是低端内存(实际物理内存的大小,但是小于896),低端内存在Linux线性地址空间中始终有永久的一一对应的内核逻辑地址,系统初始化过程中将低端内存永久映射到了内核逻辑地址空间,为低端内存建立了虚拟映射页表。低端内存内物理内存的物理地址与线性地址之间的转换可以通过__pa(x)和__va(x)两个宏来进行,#define __pa(x) ((unsignedlong)(x)-PAGE_OFFSET) __pa(x)将内核逻辑地址空间的地址x转换成对应的物理地址,相当于__virt_to_phys((unsigned long)(x)),__va(x)则相反,把低端物理内存空间的地址转换成对应的内核逻辑地址,相当于((void *)__phys_to_virt((unsigned long)(x)))。
6)高端内存:低端内存地址之上的物理内存是高端内存(物理内存896之上),高端内存在Linux线性地址空间中没有没有固定的一一对应的内核逻辑地址,系统初始化过程中不会为这些内存建立映射页表将其固定映射到Linux线性地址空间,而是需要使用高端内存的时候才为分配的高端物理内存建立映射页表,使其能够被内核使用,否则不能被使用。高端内存的物理地址于现行地址之间的转换不能使用上面的__pa(x)和__va(x)宏。
7)高端内存概念的由来:如上所述,Linux将4GB的线性地址空间划分成两部分,从0x00000000到0xBFFFFFFF共3GB空间作为用户空间由用户进程独占,这部分线性地址空间并没有固定映射到物理内存空间上;从0xC0000000到0xFFFFFFFF的第4GB线性地址空间作为内核空间,在嵌入式系统中,这部分线性地址空间除了映射物理内存空间之外还要映射处理器内部外设寄存器空间等I/O空间。0xC0000000~high_memory之间的内核逻辑地址空间专用来固定映射系统中的物理内存,也就是说0xC0000000~high_memory之间空间大小与系统的物理内存空间大小是相同的(当然在配置了CONFIG_DISCONTIGMEMD选项的非连续内存系统中,内核逻辑地址空间和物理内存空间一样可能存在内存孔洞),如果系统中的物理内存容量远小于1GB,那么内核现行地址空间中内核逻辑地址空间之上的high_memory~0xFFFFFFFF之间还有足够的空间来固定映射一些I/O空间。可是,如果系统中的物理内存容量(包括内存孔洞)大于1GB,那么就没有足够的内核线性地址空间来固定映射系统全部物理内存以及一些I/O空间了,为了解决这个问题,在x86处理器平台设置了一个经验值:896MB,就是说,如果系统中的物理内存(包括内存孔洞)大于896MB,那么将前896MB物理内存固定映射到内核逻辑地址空间0xC0000000~0xC0000000+896MB(=high_memory)上,而896MB之后的物理内存则不建立到内核线性地址空间的固定映射,这部分内存就叫高端物理内存。此时内核线性地址空间high_memory~0xFFFFFFFF之间的128MB空间就称为高端内存线性地址空间,用来映射高端物理内存和I/O空间。896MB是x86处理器平台的经验值,留了128MB线性地址空间来映射高端内存以及I/O地址空间,我们在嵌入式系统中可以根据具体情况修改这个阈值,比如,MIPS中将这个值设置为0x20000000B(512MB),那么只有当系统中的物理内存空间容量大于0x20000000B时,内核才需要配置CONFIG_HIGHMEM选项,使能内核对高端内存的分配和映射功能。什么情况需要划分出高端物理内存以及高端物理内存阈值的设置原则见上面的内存页区(zone)概念说明。
8)高端线性地址空间:从high_memory到0xFFFFFFFF之间的线性地址空间属于高端线性地址空间,其中VMALLOC_START~VMALLOC_END之间线性地址被vmalloc()函数用来分配物理上不连续但线性地址空间连续的高端物理内存,或者被vmap()函数用来映射高端或低端物理内存,或者由ioremap()函数来重新映射I/O物理空间。PKMAP_BASE开始的LAST_PKMAP(一般等于1024)页线性地址空间被kmap()函数用来永久映射高端物理内存。FIXADDR_START开始的KM_TYPE_NR*NR_CPUS页线性地址空间被kmap_atomic()函数用来临时映射高端物理内存,其他未用高端线性地址空间可以用来在系统初始化期间永久映射I/O地址空间。
http://blog.21ic.com/user1/8499/archives/2012/90535.html
『陆』 如何制作嵌入式Linux文件系统
简单的说:
先配置文件系统的基本目录,
包含/bin /sbin /etc /usr /tmp /root 等基本目录,
把应用程序放到这些目录中,
再用mkcamfs等工具来打包文件系统即可。
细节上的话要说的就多了
『柒』 嵌入式开发一般采用什么方式,其中宿主机一般是指
你应当指的是有操作系统的嵌入式开发吧,下面就拿运行嵌入式Linux系统的硬件开发举例说明。
假设已经有了嵌入式系统硬件,并且工作正常,嵌入式硬件平台包含一款核心CPU比如是一款ARM,有自己的随机存储器(内存),有掉电不丢失的存储器(Flash、SD卡、硬盘),有常用的接口(串口、USB、网络),总之,硬件平台已经没有错误,可以开发嵌入式软件平台了。
调试软件平台的环境一般是这样的:
-硬件平台通过标准接口,比如串口,与你的PC机连接,实现控制台输入和输出,PC端启动串口通讯软件(串口终端程序),软件平台运行的字符提示可以显示在终端,你的键盘输入可以通过终端以串口数据形式传送给硬件平台,实现人机交互;
-由于串口速度慢,无法实现大量数据的吞吐,一般还需要借助网络接口,也就是需要通过网络连接线连接硬件平台和PC机;
-PC机上安装开发环境,一般是虚拟机中安装Linux操作系统,再在其中安装交叉编译程序,并且组建一套硬件平台使用的文件系统;
-先给硬件平台通过串口烧写少量的启动程序到Flash,这个启动程序负责初始化串口、网口,然后将网口传送来的Linux系统内核调入内存执行,并且使用网口上挂载的位于PC机上的文件系统,这样硬件平台上先不存放大量的程序,程序都在你的PC机上通过网口虚拟给硬件平台,你的PC机上的Linux虚拟机就叫宿主机;
-所有软件调试完成后,可以通过网络接口,将虚拟机中的内核和文件系统等烧写到硬件平台的Flash、SD卡或硬盘这些设备中,修改启动参数,让硬件平台启动时用自己的存储程序运行,这时就可以脱离宿主机完成调试开发工作了。
『捌』 嵌入式系统如何开发的
嵌入式系统开发就是对于除了电脑之外的所有电子设备上操作系统的开发,开发对象有手机,掌上电脑,机电系统等。
嵌入式系统开发流程:
第一步:建立开发环境
操作系统一般使用Redhat Linux,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(比如,arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的相关交叉编译器;
第二步:配置开发主机
配置MINICOM,一般的参数为波特率115200 Baud/s,数据位8位,停止位为1,9,无奇偶校验,软件硬件流控设为无。在Windows下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
第三步:建立引导装载程序BOOTLOADER
从网络上下载一些公开源代码的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如,三星的ARV17、ARM9系列芯片,这样就需要编写开发板上FLASH的烧写程序,可以在网上下载相应的烧写程序,也有Linux下的公开源代码的J-FLASH程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果用户购买了厂家的仿真器比较容易烧写FLASH,虽然无法了解其中的核心技术,但对于需要迅速开发自己的应用的人来说可以极大提高开发速度。
第四步:下载已经移植好的Linux操作系统
如MCLiunx、ARM-Linux、PPC-Linux等,如果有专门针对所使用的CPU移植好的Linux操作系统那是再好不过,下载后再添加特定硬件的驱动程序,然后进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,而对于MCLiunx这样的系统只能编译内核进行调试。
第五步:建立根文件系统
下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。由于默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs genromfs等工具产生烧写映像文件。
第六步:建立应用程序的FLASH磁盘分区
一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性FLASH(NOR型)512KB~32MB,有的系统使用非线性FLASH(NAND型)8MB~512MB,有的两个同时使用,需要根据应用规划FLASH的分区方案。
第七步:开发应用程序
可以放入根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于μC/OS-II的方式。
第八步:烧写内核
根文件系统和应用程序,发布产品。
....................................................................................................................................................
................................................................
还有怎么学习嵌入式呢,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。
先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。
退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。
一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。
回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。
后来,我在网络知道看到一篇让我很鼓舞的文章,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。
我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。
主意一定,我就去搜索嵌入式的视频,虽然零星找到一些嵌入式的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。
后来我又找到一份很好的视频,是在IT学习联盟网站推出的一份视频《零基础嵌入式就业班》(喜欢《零基础嵌入式就业班》的可以复制 sina.lt/qKh 粘贴浏览器地址栏按回车键即打开)。里面的教程还不错,很完整,可以让我从基础的开始学起。视频比较便宜。
下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。
收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视频教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机上都有做练习,敲linux的基本命令,写简单的C语言代码,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了C和linux的基本操作。
接下来我就去学习了人家的视频的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。
这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。
最后的一个月,我就去看关于实践部分的内容,了解嵌入式项目具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视频,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右
我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。
后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。
把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。
假如你喜欢嵌入式的话就努力学习吧。
。。。。。。。。。。。。。。。。。。。。。。。。。。。
『玖』 嵌入式系统中的存储器映射是怎么回事,为什么要映射
进入ARM状态:当操作数寄存器的状态位为,0时,可以采用执行BX指令的方法,使微处理器从THUMB切换到ARM。此外,在处理器进行异常处理时,把PC指针放入异常模式的链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。
3.R14也称作子程序连接寄存器SLR或连接寄存器LR,用来保存R15的返回值,可用R14保存子程序的返回地址。
寄存器R14常用在如下情况:
在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。
4.程序计数器PC(R15)对其的使用有一些限制。
5.寄存器R16,用作当前程序状态寄存器CPSR,可在任何运行模式下被访问。
6.条件码标志:N,Z,C,V均为条件码标志位,他们的内容可被算术或逻辑运算的结果锁改变,并且可以决定某条指令是否被执行。
7.控制位:PSR的低八位为控制位,当发生异常时,这些位可以被修改,如果处理器运行在特权模式,这些位也可以由程序修改。
8.ARM体系所支持的异常类型:
1)复位(Reset):当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。
2)未定义指令(Undefined):当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。3)软件中断(SWT):该异常由执行SWT指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。4)指令预取终止(Prefetch Abort):若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出终止信号,但当预取的指令被执行时,才会产生指令预取终止异常。5)数据终止(Data Abort):若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据终止异常。6)外部中断请求(IRQ):当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。7)快速中断请求(FIQ):当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。
9.ARM体系结构可以用两种方法存储字数据,称之为大端模式和小端模式。
大端模式下,字数据的高地址是存储在低地址中。
小端模式下,字数据的低地址是存储在低地址中。
10.MMU(内存管理单元)通过硬件实现对内存管理,是ARM中最常见的协处理器,一般为CP15. MMU 内存管理单元 Memory Management Unit 在处理器中实现内存管理功能,完成物理地址到虚拟地址的映射
11.AMBA为先进控制器总线体系,它为ARM内核和外设提供了标准化接口。
12.内核后缀的含义:
E:代表支持增强DSP指令 T:代表支持Thumb指令集
J:代表支持Jazzlle技术 S:代表为可综合的内核(与其对应为赢家宏单元)
13.TDMI的基本含义:
T:支持16位指令集Thumb
D:支持片上调式Debug
M:内嵌硬件乘法器(Multiplier)
I:嵌入式ICE,支持片上断点和调试点。
14.ARM的寻址模式:
立即寻址:操作数本身就在指令中给出,只要取出指令也得到了操作数。这个操作数叫做立即数ADD R0,R0,#1; R0←R0+1 ADD R0,R0,#0x3f;R0←R0+0x3f
寄存器寻址:利用寄存器的数值作为操作数,是各类微处理器经常采用的一种方式
寄存器间接寻址:以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中
基址变址寻址:就是将寄存器的内容和指令中给出的地址偏移量相加,从而得到的一个操作数的有效地址
多寄存器寻址:一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令传送最多16个通用寄存器的值。
跳转寻址:相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到的操作数的有效地址。
堆栈寻址: 满堆栈:当堆栈指针指向最后压入的堆栈的数据时。空堆栈:当堆栈指针指向下一个将要放入数据的空位置。 递增堆栈:堆栈由低地址向高地址生成时 递减堆栈:堆栈由高地址向低地址生成
满递增堆栈: 堆栈指针指向最后压入的数据,且低地址向高地址生成
慢递减堆栈: 堆栈指针指向最后压入的数据,且高地址向低地址生成
空递增堆栈: 堆栈指针指向下一个将要放入的数据的空位置,且低地址向高地址生成
空递减推展: 堆栈指针指向下一个将要放入的数据的空位置,且高地址向低地址生成
15.ARM指令集分为:
数据处理指令:CMP比较指令(CMP R1,RO 将R0、R1的值减,并根据结果设置CPSR标志位)ADD加法指令
加载/存储指令:LDR字数据加载指令(LDR R0,[R1]),LDRB字节数据加载指令。
乘法指令:MUL32位乘法指令(MUL R0,R1,R2;R0=R1*R2),MLA32位乘加指令 (MLA R0,R1,R2,R3;R0=R1*R2+R3)
状态寄存器访问指令:MRS程序状态寄存器到通用寄存器的数据传送指令MRS R0,CPSR (传送CPSR的内容到R0),MSR通用寄存器到程序状态寄存器的数据传送指令。MSR SPSR,R0(传送R0的内容到SPSR)
跳转指令:B跳转指令,BL带返回的跳转指令 B LABEL(程序无条件跳转到标号LABEL处执行)
协处理器指令:CDP协处理器数操作指令CDP P3,2,C12,C10,C3,4(该指令完成协处理器P3的初始化,)LDC协处理器数据加载指令LDC P3,C4,[R0],STC协处理器数据存储指令.
处理器数据手册 包含以下内容:处理器特点概述,处理器的功能结构及其框架图,处理器的封装形式和引脚排列,处理器各个功能模块介绍,处理器的电气特性,处理器的机械特性
ARM处理器的常用模块:内存控制单元,中断控制单元,GPIO,定时器,UART。
PWM 定时器:包括6个16位基于中断或者DMA的定时器,可编程工作周期、频率和极性,其中5个定时器带有 脉宽调制 Pulse Width Molation,另外一个无外部引脚,只能内部使用。
IIC 总线接口:IIC是一种串行总线 ,S3C44B0X的IIC是一个基于中断操作的多主IIC。
IIS 总线接口:IIS是一种音频接口,S3C44B0X的IIS是一个基于DMA操作的IIS。
GPIO 控制器:通用输入输出端口,是处理器上可编程的引脚。S3C44B0X的一共有7个通用端口,共71位:
S3C44B0X采用ARM7TDMI内核,最大速度可以达66MHZ。
S3C44B0X 地址空间:256MB 可访问区域 特殊功能寄存器 4MB,每个BANK32MBYTES,共有8个BANK256MB。
BANKCON0~BANKCON5是前6个固化区域的BANK的寄存器,后两个BANK支持SDRAM,由BANKCON6 和BANKCON7控制
S3C44B0X 的中断控制器有30个中断源,实际上的中断源共有26个。外部中断 4/5/6/7 共用一个中断源
7个通用端口,共71位:
A:10位输出端口 B: 11位输出端口 C:16位输入/输出端口 D: 8位输入/输出端口
E: 9位输入/输出端口 F: 9位输入/输出端口 G: 8位输入/输出端口
定时器:6个基于中断或DMA方式的PWM定时器 ,有6个PWM定时器,都可以工作在中断或者DMA方式。
1、嵌入式系统的硬件扩展包括三种类型:
内部模块扩展:通过增加外部电路,完成处理器内部模块提供的功能
总线扩展:利用处理器的外部总线控制器(又称内部控制器),扩展内存类芯片 地址总线、数据总线、控制信号、片选信号
GPIO扩展:GPIO是每个处理器都具有的功能部件,GPIO扩展非常灵活,因为每一个引脚都是可以编程的,理论上这种引脚可以通过程序完成任何一种功能。
2、S3C44B0X系统: 内存空间分为8个BANK 每个Bank的空间32M 地址空间总共256M
1、嵌入式软件的开发流程:
编译 Compile 是指从高级语言转换成汇编语言的过程。本质上编译是一个文本转换的过程 从一个文本文件到另一个文本文件
汇编 Assemble 是指从汇编语言程序生成目标系统的二进制代码(机器代码)的过程
链接 Link 将汇编成的多个机器代码组合成一个可执行的程序
加载程序 在嵌入式系统的开发初期,生成的二进制代码需要烧写到系统的只读存储器中,然后跳转到代码所在的地址才可以运行。将BootLoader的代码烧写到嵌入式系统中,然后使用BootLoader将Linux内核和文件系统烧入
2、嵌入式开发的常用调试方式
目标机 到 主机 打印调试信息 目标机向主机打印调试信息的调试方法,不需要对目标机的执行程序作出改动,但是需要一条主机到目标机的通信信道
JTAG 调试
远程 gdb 调试 调试是运行在主机(host,桌面电脑)的应用程序,被调试的程序运行在目标机(target)上
堆和栈的区别:
堆和栈都是系统管理的动态内存,在常见的体系结构和编译系统中,堆一般从低地址向高地址增长,栈一般从高地址向低地址增长。术语的“堆栈”则专指栈。
1、Binutils 工具集合
as GNU汇编器。用来以将处理器的汇编代码转换成可执行的代码,并存储到目标文件.o文件中
ld GNU链接器。用于将一个或多个目标文件.0、库组合成一个可执行程序;或者生成静态库和动态库
ar 归档工具,可以将多个文件组合成一个大文件,并且可以读取原始文件的内容
strip 去除文件中的符号
nm 用以显示目标文件中的符号
obj 转换二进制代码的工具
objmp 显示目标文件中的反汇编工具
readelf 显示ELF文件中的各种信息 string 显示文件中的可打印字符
ranlib 产生归档文件的索引,并将其保存到归档文件中,索引同时列出归档文件个成员所定义的可重分目标文件
addr2line 可以将一个可执行的程序地址映射到源文件的对应行
gprof 显示程序调用段的各种数据
2、执行编译分成4步:
预处理:生成.i的文件(预处理器 cpp) 编译:将预处理后的文件转换成汇编语言,生成文件.s(编译器 gcc) 汇编:由汇编代码生成的目标代码,即机器代码,生成.o(汇编器 as)
链接:由各个文件的目标代码,生成可执行程序(链接器 ld)
3、ELF 文件格式 可执行文件(应用程序) 可重定向文件(*.o)共享object文件(*.so)
4、GDB 调试基础 是一个强大的命令行调试工具(在嵌入式开发系统中的作用),GDB调试可以直接在嵌入式系统中使用,这与PC上一般LINUX的程序调试的区别仅仅是调试的宿主机是目标机,调试的结果可以通过串口等方式在主机上获取,此时主机在调试系统中的作用仅仅是显示的终端。
1、嵌入式linux的引导方式: 启动加载 Bootloader 模式 发布后内核已烧写到目标机中,可以脱离主机运行 下载 Downloading 模式 没有烧写到目标机中,调试操作系统用到,要先下载到目标机。
2、嵌入式linux的文件系统介绍:
EXT2/3 扩展文件系统2/3
ROMFS Read Only Memory File System,只读文件系统
CRAMFS Compress Read Access Memory File System 压缩只读文件系统
JFFS2 Jounaling FlashFilesystem 2 日志文件系统2
NFS Net File System 网络文件系统
YAFFS Yet Another FlashFile System 另一种FLASH文件系统
1、典型的Bootloader程序框架结构
Bootloader的stage1(一般用汇编语言实现) 1、硬件设备初始化 2、为加载Bootloader的stage2准备RAM空间 3、复制Bootloader的stage2到RAM空间中 4、设置好堆栈5、跳转到stage2的C入口点
Bootloader的stage2(一般用C实现)1、初始化本阶段要使用到的硬件设备2、检测系统内存映射3、将kernel影响和跟文件系统映像从flash上读到RAM空间中4、为内核社会资启动参数5、调用内核
2、Linux的内核组成 1、进程调度 2、进程间的通信 IPC 3、内存管理 MM 4、虚拟文件系统 VFS 5、网络
3、Clinux使用与各种无内存管理单元的处理器,包括无MMU的ARM处理器。
与标准linux的区别 1、虚拟内存 2、Flat扁平 3、位置无关的代码PIC 4、多进程管理
4、Clinux:是MICRO-CONTROL-LINUX的缩写,字面上的意思是针对微控制领域而设计的LINUX系统,适用于各种无内存管理单元的处理器,包括无MMU的ARM处理器。
1、嵌入式系统和PC机的区别和联系有哪些,从应用场合、系统结构、知识背景、开发方式等方面考虑。
从本质上看,嵌入式系统属于计算机系统的一种具体体现。但是它与通用的计算机系统存在差异。相比通用的计算机系统,嵌入式系统和主要具有一下一些特点。
特定设计、各学科结合的产物、高校的设计、与具体应用相结合、存储特性、交叉开发。
2、描述嵌入式系统的几个组成部分的层次结构,并总结他们与开发过程的关系。
嵌入式系统的组成:微处理器、外围硬件、嵌入式操作系统、应用程序、开发环境
嵌入式系统开发分为软件开发部分和硬件开发部分。嵌入式系统在开发过程一般都采用如“宿主机/目标板”开发模式,即利用宿主机(PC机)上丰富的软硬件资源及良好的开发环境和调试工具来开发目标板上的软件,然后通过交叉编译环境生成目标代码和可执行文件,通过串口/USB/以太网等方式下载到目标板上,利用交叉调试器在监控程序运行,实时分析,最后,将程序下载固化到目标机上,完成整个开发过程。
3、说出S3C44BOX内存控制器、中断控制器、GPIO、UART、定时器、LCD控制器、在系统中的作用。结合数据手册,了解处理器各个部件的作用
(1)内存控制器:S3C44B0X处理器无内部的RAM和FLASH,必须在外部增加。内存控制器完成功能包括:大小模式选择、总线宽度选择、内存刷新控制设置等功能。
(2)中断控制器:S3C44B0X的中断控制器主要功能是连接ARM7内核中断与S3C44B0X内部各个部件的中断,其特点是使用2级中断模式。
(3)GPIO控制器:S3C44B0X处理器I/O端口可以用于与外部连接,通用的端口可以根据程序完成相应的功能。
(4)UART:S3C44B0X的UART提供了2个独立通道的异步串口,每个通道均可以工作在DMA模式,也就是说UART能产生内部中断请求或者DMA请求,在CPU和串行I/O之间传送数据。
(5)定时器:S3C44B0X PWM定时器包括定时器和PWM2个方面的功能。一方面可以作为简单的定时器,可以通过中断或者DMA方式作为芯片内部使用的“定时时钟”;另一方面可以通过引脚输出,这些输出是占空比可调的方波
(6)LCD控制器:LCD控制器使用基于时间的抖动算法和帧速率FRC控制方法,同样也可作为每像素8位的彩色LCD显示屏的接口
另外,虚机团上产品团购,超级便宜
『拾』 嵌入式的文件系统是什么意思 NFS和yaffs的区别、
嵌入式的文件系统是所有嵌入式系统所应用的文件系统。
大多数嵌入式系统采用了Linux。
嵌入式系统对文件系统的要求
要求文件系统在频繁的文件操作(例如,新建,删除,截断)下能够保持较高的读写性能,要求低碎片化。
日志文件系统(XFS,ReiserFS,Ext3等)能保持数据的完整性,但消耗过多系统资源的弱点使之不能成为嵌入式系统中的主流应用。并且这些都是专门为硬盘这类的存储设备优化,对于flash这类的存储介质并不适用。
嵌入式文件系统的载体是以Flash为主的存储介质,Flash的擦除次数是有限的,所以为了延长Flash的使用寿命,应该尽量减少对Flash的写入操作。
嵌入式文件系统的载体是以Flash为主的存储介质,Flash的擦除次数是有限的,所以为了延长Flash的使用寿命,应该尽量使对Flash的写入操作均匀分布在整个Flash上。
NFS是Net File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,它允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。
YAFFS(Yet Another Flash File System)是第一个专门为NAND Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备;并且是在GPL(General Public License)协议下发布的,可在其网站免费获得源代码。