`
ldb19890624
  • 浏览: 238526 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

嵌入式开发基础(2)

 
阅读更多

嵌入式开发基础(2)



一、目标板
在开发机(运行桌面Linux系统)和目标板(嵌入式开发板)之间:
首先通过RS-232串口线进行连接,其次通过以太网连接线进行连接。
通过RS-232串口线进行连接,使用串口通信工具,最常用的是Minicom工具,它对于所有的桌面Linux发布包都有效。

目标板的启动:
1)目标板电源启动,bootloader立即得到处理器的控制。
执行底层硬件初始化,包括:处理器和内存设置、串口UART控制初始化、以太网控制器初始化等。
U-Boot载入

2)引导内核
U-Boot初始化硬件、串口以太网接口,然后U-Boot载入和引导Linux内核。
所有的bootloader都有一个载入和执行操作系统映像的命令。如:
tftpboot 200000 uImage-440ep
tftpboot命令指示U-Boot使用TFTP协议、通过网络载入内核映像uImage-440ep。此情况下,内核映像一般是存储在开发主机上。

3)bootm命令的使用
bootm命令指示U-Boot引导内核。假定内核正确配置,则引导Linux内核的结果是在目标板上提示控制台命令。如:
amcc login: <<< This is a Linux kernel console command prompt
要注意:bootm命令是U-Boot的“丧钟”,使用此命令后,Linux内核将获得控制权,bootloader停止并退出。bootloader要获得控制权的方法是重新启动目标板。
余下的引导信息将由Linux内核产生。U-Boot停止,Linux内核映像接管控制。

4)内核初始化
Linux内核开始执行时,它输出大量的状态信息。比如:
--------------------------------------
...
Looking up port of RPC 100003/2 on 192.168.0.9
Looking up port of RPC 100005/1 on 192.168.0.9
VFS: Mounted root (nfs filesystem).
Freeing init memory: 232K
INIT: version 2.78 booting
...
coyote login:
--------------------------------------
这些信息一般不低于100行。
根文件系统包括应用程序、系统库、建立GNU/Linux系统的工具。

5)第一个用户空间的进程:init


二、嵌入式存储器
大多数Linux嵌入式系统的存储需求为4MB~256MB,但目前有增加到G的趋势。

Flash存储器可通过软件控制写入和擦写,且Flash的写入和擦写速度在不断提高。

典型的Flash存储芯片,数据以0或1按位写入,但是擦写则按块整块擦写。故块经常被称为擦写块。

典型的Flash存储器设备包含许多擦写块,例如4MB的Flash芯片可包含64个擦写快,每个块为64KB。

要修改存储在Flash内存的数据,被修改数据所在的整块都将被擦写,即使只修改1个字节,整块先被擦写,再重写。

与硬盘的扇区相比,Flash的块尺寸相对要大很多。比如说,典型的高性能硬盘的扇区大小一般为512或1024字节。

Flash存储器的写速度比硬盘慢了很多,通常更新数据的时间是硬盘的很多倍。

Flash存储器的另一个限制是Flash存储器单元的写使用期限。尽管Flash的写使用期限次数相当大,每个块100k次,但是一个糟糕的算法可能很快就产生一个坏块。

NAND Flash设备通过提供更小的块尺寸,改进了传统NOR Flash的局限性,使得写速度更快,Flash阵列的使用更富有效率。

NOR Flash设备与微处理器的接口与许多微处理器外设相似,即它们通过一个并行数据和地址总线直接连接到微处理器的数据/地址总线。Flash阵列的每个字节或字都可以随机方式单独寻址。
NAND与之相反,NAND设备通过复杂的接口连续访问,NAND设备操作模式类似于传统硬件驱动和相应控制器的模式。

总的来说,微处理器可直接访问NOR Flash存储器,代码在NOR Flash外执行。


Flash的使用
嵌入式系统设计者有多种方式安排和使用Flash存储器。最简单的系统,原始的二进制数据(通常是压缩的)被存储到Flash设备,当引导时,Flash存储的文件系统映像被读入到Linux的内存设备,作为映射并只在内存访问。
这是很好的设计选择,Flash数据很少需要更新。

Flash存储器安排的例子:
在Flash存储器阵列的顶部或底部时Bootloader和配置,紧接着Bootloader的是Linux内核映像,以及Ramdisk文件系统映像(它存储根文件系统)。代表性地是Linux内核和Ramdisk文件系统映像都是压缩的,Bootloader在引导周期处理解压缩任务。

目前最流行的Flash文件系统是使用JFFS2,它是在闪存上使用非常广泛的读/写文件系统。JFFS2有几个重要特征,目标是改进整体性能,增加Flash的使用寿命,减少因电源故障产生的数据丢失问题。
最新的JFFS2文件系统的重要改进包括改进的磨损平衡,压缩和解压缩数据到指定尺寸的Flash存储器,支持Linux硬连接等。


三、内存空间
所有嵌入式操作系统都把系统内存看作是单一的、扁平的地址空间,并以此进行管理。即微处理器的地址空间的范围从0到最大物理地址。
例如,微处理器有24位地址总线,它的最大内存为16MB。用16进制表示范围为:0x00000000~0x00ffffff。
典型的嵌入式系统内存地址表为:
FFFF_FFFF~FF00_0000 Flash存储器(16MB)
F000_0000 外设基地址
8000_0000 PCI总线地址
03FF_FFFF~0000_0000 DRAM(64MB的内存)

高性能微处理器包含了复杂的硬件引擎,称为MMU(存储管理单元)。MMU的目标是是操作系统能够高度管理和控制它分配的地址空间。此控制有两种基本形式:访问权限(Access Right)和内存转换(Memory Translation)。
访问权限:允许OS为指定任务对指定内存的访问权限进行分配。
内存转换:允许OS虚拟地址空间。

嵌入式风格的Hello World
#include <stdio.h>
int bss_var; /*未初始化的全局变量*/
int data_var=1; /*初始化的全局变量*/
int main(int argc, char **argv)
{
void *stack_var; /*在stack上的局部变量*/
stack_var = (void *)main;
printf("Hello, World! Main is executing at %p/n", stack_var);
printf("This address (%p) is in our stack frame/n", &stack_var);
/*bss节包含未初始化的数据*/
printf("This address (%p) is in our bss section/n", &bss_var);
/*数据节包含已初始化的数据*/
printf("This address (%p) is in our data section/n", &data_var);
return 0;
}
----------------
输出结果:
root@amcc:~# ./hello
Hello, World! Main is executing at 0x10000418
This address (0x7ff8ebb0) is in our stack frame
This address (0x10010a1c) is in our bss section
This address (0x10010a18) is in our data section
root@amcc:~#


分享到:
评论

相关推荐

    Java嵌入式开发基础教程

    在学习过程中,逐步掌握以上知识点,可以让你具备进行Java嵌入式开发的基本技能,为构建各种嵌入式系统打下坚实的基础。不过,具体的学习内容还需要根据"新建文件夹"中的具体文件来进一步确定。

    嵌入式开发基础+实践教程课

    本教程将带你深入理解嵌入式开发的基础和实践,让你具备设计和实施嵌入式解决方案的能力。 首先,我们来探讨嵌入式系统的基础知识。嵌入式系统的核心是微处理器,它是整个系统的大脑,负责执行指令和控制硬件。微...

    零基础学会ARM嵌入式开发

    零基础学会ARM嵌入式开发

    嵌入式开发零基础起步

    由于嵌入式开发即需要掌握一定的硬件知识,还需要掌握必要的软件编程知识,把许多初学挡在了门外,本文的目的就是通过使用一块小型嵌入式开发板,引导初读者对嵌入式开发有一个感性的认识,激发出学习热情,进而逐步...

    嵌入式开发入门 ppt

    对于嵌入式开发,动手设计和调试硬件电路是必不可少的技能,这部分内容将帮助读者建立硬件基础。 最后,“05第三章2前向通道.ppt”可能讲解嵌入式系统中的通信接口和协议,如UART、SPI、I2C等,以及如何实现数据...

    嵌入式开发详解

    嵌入式开发详解 知识点一:嵌入式系统的概念与特点 嵌入式系统是一种专用的计算机系统,它被嵌入到一个应用系统中,与该应用系统协同工作,完成特定功能。嵌入式系统有以下几个显著特点:实时性、专用性、可靠性、...

    21天学通ARM嵌入式开发

    总之,《21天学通ARM嵌入式开发》教程覆盖了从基础理论到实践应用的广泛内容,是初学者进入ARM嵌入式世界的良好起点。通过系统地学习和实践,你将具备开发复杂嵌入式系统的技能,为未来的创新项目奠定坚实基础。

    嵌入式LINUX基础教程中文第2版 --百度网盘

    嵌入式LINUX基础教程中文第2版 高清带书签 本书是嵌入式Linux领域的名著。全面深入而又简明地阐述了构建嵌入式Linux系统的精髓。书中不仅剖析了嵌入式Linux系统,而且讲述了处理器、内核、引导加载程序、设备驱动...

    嵌入式系统开发基础

    了解Linux的基本架构、文件系统、命令行接口以及进程管理对于嵌入式开发至关重要。例如,学会使用shell脚本自动化任务,理解和操作设备节点(/dev),以及理解Linux进程间通信(IPC)机制如管道、信号量和共享内存等...

    计算机三级嵌入式开发技术

    嵌入式开发也涉及到硬件层面,考生需要了解基本的数字电路、微处理器架构以及接口技术,如串口、USB、I2C、SPI等通信协议。在实际项目中,考生还需要具备一定的硬件设计和调试能力。 总之,全国计算机等级考试三级...

    Linux嵌入式开发基础

    总结来说,"Linux嵌入式开发基础"涵盖了从内核移植、根文件系统构建、驱动程序开发到应用编程的全过程,是深入理解和实践Linux在嵌入式系统中应用的基石。通过深入学习和实践,开发者可以为各种硬件平台打造出高效、...

    嵌入式开发经典网页收藏.rar

    《嵌入式开发经典网页收藏》 嵌入式开发是一个涵盖广泛的领域,它涉及到硬件、软件、操作系统以及各种专用设备的交互。这个压缩包“嵌入式开发经典网页收藏.rar”显然是一份珍贵的资源,包含了多篇关于嵌入式开发的...

    嵌入式开发学习知识点梳理--思维导图.pdf

    嵌入式开发学习知识点梳理是指学习嵌入式开发相关的知识点,包括嵌入式应用领域、嵌入式方向、嵌入式相关岗位、嵌入式编程基础、嵌入式硬件基础、常见开发工具、嵌入式典型平台(ARM)、嵌入式应用层开发、嵌入式...

    ARM嵌入式系统基础教程习题答案

    本资源为 ARM 嵌入式系统基础教程习题答案,涵盖了嵌入式系统的基本概念、嵌入式处理器、嵌入式操作系统、项目开发生命周期、风险分析、系统规范、系统规划、项目讨论等方面的知识点。 一、嵌入式系统基本概念 * ...

    嵌入式 开发 书籍汇总

    这四本书的组合为学习嵌入式开发提供了一个全面的学习路径,从基础知识到高级实践,从Linux系统到实时控制,覆盖了嵌入式开发的关键环节。通过阅读这些书籍,读者可以系统地掌握嵌入式领域的核心技能,为进一步的...

    arm linux嵌入式开发电子书大全

    这些资源覆盖了嵌入式开发的基础知识到高级技术,对于希望深入了解ARM架构及Linux系统在嵌入式应用中的实现细节的学习者来说非常有价值。 #### 可能包含的书籍类型 - **基础入门类**:介绍ARM架构的基本概念、工作...

    嵌入式开发经典基础教程

    通过学习这个经典教程,你将能够建立起坚实的嵌入式Linux开发基础,从而能够设计和实现高效的、针对特定硬件平台的应用程序。《嵌入式Linux应用程序开发详解》这本书会详细讲解这些知识点,并通过实例帮助你巩固理论...

    嵌入式开发基础实验指导书.doc

    嵌入式开发基础实验指导书.doc

    嵌入式开发实例PPT

    理解这些基础知识对于进行有效的嵌入式开发至关重要。 其次,ARM处理器架构是讲解的重点。ARM提供了多种处理器核心系列,如Cortex-A、Cortex-R和Cortex-M,分别适用于不同的应用场景。学习者会了解到不同系列的核心...

Global site tag (gtag.js) - Google Analytics