嵌入式开发基础(2)

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/3705717 嵌入式开发基础(2)一、目标板在开发机(运行桌面Linux系统)和目标板(嵌入式开发板)之间:首先通过RS-232串口线进行连接,其次通过以太网连接线进行连接。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/3705717

嵌入式开发基础(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:~#


目录
相关文章
|
6月前
|
传感器 NoSQL 物联网
嵌入式开发系统学习——干货分享(一)
嵌入式开发系统学习——干货分享(一)
156 0
|
7月前
|
传感器 C++
精通嵌入式开发:从原理到实践
嵌入式开发是一门涉及硬件和软件交叉领域的技术,要想精通这门技术,需要从理论基础到实际操作都有深入的了解和实践。
80 3
|
传感器 开发工具 数据安全/隐私保护
嵌入式开发
一、嵌入式开发是什么 嵌入式开发是指在嵌入式系统中进行软件开发的过程。嵌入式系统是一种特殊的计算机系统,它被设计用于执行特定的任务,通常嵌入在其他设备或系统中,如家电、汽车、医疗设备等。嵌入式开发涉及到设计、编写和调试嵌入式系统的软件,以满足特定的需求和功能要求。 嵌入式开发通常需要掌握特定的编程语言和开发工具,如C、C++、汇编语言等。开发人员需要了解硬件平台的特性和限制,以便进行有效的软件设计和优化。嵌入式开发还涉及到驱动程序的开发、实时操作系统的使用、硬件接口的编程等。 嵌入式开发的目标是开发出高效、可靠、节能的嵌入式软件,以满足特定应用的需求。嵌入式系统的应用范围广泛,从智能手机到工业
120 0
|
测试技术
《 嵌入式系统设计与实践》一一1.2 嵌入式系统开发
本节书摘来自华章出版社《 嵌入式系统设计与实践 》一 书中的第1章,第1 . 节,作者:Elecia White 著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看
4624 0
|
Linux C语言 SoC
嵌入式学习难点 嵌入式软件学习
嵌入式学习不是一蹴而就的,需要不断的积累,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,我认为大概分3个阶段:     嵌入式学习难点 嵌入式软件学习3个阶段 1、嵌入式linux上层应用,包括QT的GUI开发 2、嵌入式linux系统开发 3、嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,LINUX,WINCE、VxWorks等等。
1785 0
|
测试技术 C语言 开发者
《测试驱动的嵌入式C语言开发》——1.6节对于嵌入式开发的益处
本节书摘来自华章社区《测试驱动的嵌入式C语言开发》一书中的第1章,第1.6节对于嵌入式开发的益处,作者:(美)James W. Grenning,更多章节内容可以访问云栖社区“华章社区”公众号查看
1361 0