嵌入式Linux应用完全开发手册范本_第1页
嵌入式Linux应用完全开发手册范本_第2页
嵌入式Linux应用完全开发手册范本_第3页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式Linux应用完全开发手册终端概述在Linux中,TTY (终端)是一类字符设备的统称,包括了 3中类型:控制台、 串口、伪终端。控制台:供内核使用的终端为控制台。控制台在 Linux启动时,通过命令 con sole=指定,如果没有指定控制台,系把第一个注册的终端作为控制台。 控制台是一个虚拟的终端,它必须映射到真正的终端上。控制台可以简单的理解为printk输出的地方。控制台是个只输出的设备,功能很简单,只能在内核中访问。进程四要素V有独氏的用户空间?进程有用户空间? A有段程序供其执行。这段 程序不一定是某个进程所专 有,可以与其它进程共用。有进程专用的内核空间 堆栈。在内核中有一

2、个task_struct 数据结构,即通 常所说的“进程控制块”。有 了这个数据结构,进程才能 成为内核调度的一个基本单位接受内核的调度 有独立的用户空间进程调度调度概念:从就绪的进程中选出最合适的一个进程执行调度策略-SCHED_NORMAL(SCHED_OTH普通的分时进程。-SCHED_FIFO先进先出的实时调度-SCHED_RR时间片轮转实时进程-SCHED_BATCH批处理进程-SCHED_IDLE只有在系统空闲时,才能够被调度执行的进程进程管理特点:动态性、并发性、独立性、异步性状态编译说明编译选项:-c编译不链接。-g带有调试信息。-I .h 文件所在目录-预处理:语法分析,例如

3、:将宏定义展开。-编译:*.c文件编译成*.s文件。-汇编:*.s文件编译成*0文件。-链接:多个*.0文件链接成执行文件。 Linux系统调用和C库Lin ux 系统调用是依赖于系统的,而 C库在任何操作系统下,调用都是相同信号类型 SIGHUP:从终端上发出结束信号 SIGINT:来自键盘的中断信号(Ctrl-C ) SIGKILL: 该信号结束接收信号的进程。 SIGTERM:kill 命令发出的信号。 SIGCHLD标识子进程停止或结束的信号。 SIGSTOP来自键盘(Ctrl-Z )或调试程序停止执行的信号。SIGKILL和SIGSTO不能被忽略,因为它们是超级用户提供了了一种终止或

4、停止 进程的方法。文件系统 文件系统类型 根据设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为:RAM和FLASH常用的基于存储设 备的文件系统类型包括: jffs2 、yaffs 、cramfs 、 ramd isk 、 ramfs 等。文件系统是对存储设备上的文件进行存储和组织的机制, Linux 支持多种文 件系统,可以分为: 磁盘文件系统,如: ext2 Flash 文件系统,如: jffs2 , yaffs2 网络文件系统:如: NFS 特殊文件系统,如: /sys /proc根文件系统根文件系统: 是 Linux 启动时的第一

5、个文件系统 。没有根文件, Linux 无法正常启动。根文件系统由 一系列目录 组成,目录中包含了应用程序、C库、以及相关配置文件。总线的功能: 提供时钟分配/管理地址响应中断传输数据传输控制信号全速、高速、低速三种时钟。(FCLK,HCLK,PCLK)arm AMBA总线结构 AHB/APBAHB总线上有内存,NAND空制器等高速设备。HCLKAPB总线上有UMAR设备控制器等慢速设备。PCLKARM三级流水结构取指:把指令从程序存储器中取出来。取指是在处理器内核和程序存储器之 间进行的。译码:把读到内核的指令进行解释,也就是把二进制的指令变换成电路的动 作。执行:即按照指令的要求把门电路的

6、动作送到指定的目标地址。ARM在执行一条指令的时候,PC的指针是在取指的那条指令的。程序:1、代码段:指令2、数据段:有初始值(并且不为 0)的全局、静态变量3、BSS段 (Block Started by Symbol):初始值为0或无初始值的全局、静态变量。BSS( Block Started by SymboI)通常是指用来存放程序中未初始化的全局 变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前 BSS段会 自动清0。所以,未初始的全局变量在程序执行之前已经成0 了。注意和数据段的区别,BSS存放的是未初始化的全局变量和静态变量,数据 段存放的是初始化后的全局变量和静态变

7、量。UNIX下可使用size命令查看可执行文件的段大小信息。如 size a.out 。4、栈区域。1、程序运行是应该位于它的链接地址2、硬件决定了程序一开始从0运行,需要重定位(从0开始的8k代码)。重定位:前面的一小段代码(从 0开始的8k代码),复制到它的链接地址3、前面 8k 代码为什么能正常运行:因为是位置无关码写的IO 端口和 IO 内存IO 端口:当一个寄存器或内存位于 IO 地址空间时,为 IO 端口。IO 内存:当一个寄存器或内存位于内存地址空间时,为 IO 内存MMI管理权限管理:程序不能访问内核或其它程序的内存空间。地址映射:应用程序访问的“虚拟地址”,而数据真正存放在真

8、实的物理地址。 虚拟地址和真实地址的转换是由 MM实现的。物理地址:指出现在CPU地址总线上的寻址物理内存的 地址信号,是地址变 换的最终结果 。线性地址(虚拟地址):是在32位CPU架构下,可以表示4G的地址空间,用16 进制表示就是: 0x00000000-0xFFFFFFFF。 逻辑地址:程序经过编译后,出现在汇编程序中的地址。地址转换:CPU要将一个逻辑地址转换为物理地址,需要两步:-首先,CPU利用段式内存管理单元,将逻辑地址转换成线性地址。- 再利用页式内存管理单元,把线性地址最终转换成物理地址。段式管理单元:16位CPU内部拥有20位地址线,它的寻址范围就是 220,也 就是1M

9、的地址空间。但16位CPU用于存放地址寄存器(IP,SP.等)只有16 位,因此只能访问 65536个存储单元, 64K。 页式管理单元:从管理和效率的角度出发, 线性地址被分为固定长度的组, 称为“页(page)”,例如32位的机器,线性地址最大可为4G如果4K为一个 页来划分,这样整个线性地址就被划分 220个页。另一类“页” ,称为物理页,或者是“页框、页帧” 。分页单元把所有的 物理内存 也划分为固定长度的管理单位,它的长度一般与线性地址页是相同的。分页管理1、分页单元中,页目录的地址放在 CPU勺CR3寄存中,是进行地址转换的开始 点。2、每一个进程,都有其独立的虚拟地址空间,运行一

10、个进程首先需要将它的的也目录地址放到CR3寄存中,将其它进程的地址保存起来。3、每个 32位的线性地址被划分为三个部分: 页目录索引 (10 位)、页表索引(10 位)、页偏移( 12 位)。依据以下步骤进行地址转化:1、 装入进程的页目录地址(操作系统在调度进程时,把这个地址装入CR3)。2、根据线性地址的 前 10位,在页目录中,找到对应的索引项, 页目录中的项是 一个页表的地址 。3、根据线性地址的 中间 10位,在页表中找到 页的起始地址 。4、将页的起始地址 与线性地址的最后 12位相加,得到 物理地址 。 内存使用 slab 管理工具启位置无关码1、使用B或bl跳转2、不访问全局静

11、态变量异常处理中断是一种异常-CPU上电,CPU处于SVC模式,-当发生了中断,CPU就进入IRQ模式,并且切换到自己的 R13和R14,并跳到中断向量的相应地 址执行。 SWI中断处理硬件处理:1、CPUS入 SVC模式2、把之前模式的CPSR->SPSR_svc3、切换到 R13_svc, R14_svc4、下一条指令->R145、跳转到地址8软件处理:1、在地址 8,写一条跳转指令2、保存现场3、处理中断4、恢复现场Idmia sp!,r0-r12,pcAA:表示将 spsr 恢复到 cpsr 中。 SWI指令的作用用户应用程序 open、read 、write 、print

12、 函数等用户应用运行在用户态, 经常用到内核的资源,如何调用内核呢?就是调用SWI指令,CPl就会响应中断, 跳到相应的中断服务程序,访问内核资源。 未定义指令用于 调试等待队列Linux 驱动程序设计中, 可以使用等待队列来实现进程的阻塞, 等待队列可看作保存进程的容器, 在阻塞进程时,将进程放入等待队列,唤醒进程时,从等待队列中取出进程。如何看电路图1. GPIP 和门电路1.1 输入、输出引脚、上拉 / 下拉电阻、三极管1.2 与、或、非门1.3 中断 三极管:PNP(正负正),NPN(负正负)。 上拉 / 下拉电阻:确定悬空的引脚一个状态。 怎么用接口1、配置引脚功能。2、 读出某寄存

13、器 - 输入。设置寄存器 输出2. 协议类 双方约定信号的协议 双方满足时序的要求2.1 UART2.2 I 2C:每个|2C设备都有一个地址。是自己的地址才回应2.3 SPI2.4 NAND2.5 LCD3类似内存接口类3.1 NOR、SDRAM 网卡3.2不同位宽外设的接线、访问过程3.3如何确定访问地址、设置内存控制器4综合理解原理图Linux内核简介Linux体系结构 Linux系统构成GNU/ V Unux ?User SpMMKernel Space-Linux由用户空间和内 核空间两部分。-为什么分为用户空间和内核空间?出于安全考虑。通过系统调用和硬件中 断从用户空间进入内核 空

14、间。 Linux系统构成 -SCI :用户进入内核的入口。-PM:主要是进程调度和进程间通信。-MM分配、回收、内存的地址转换。-Arch :和CPU相关的管理。将PM MM NS与CPU相关的代码集成,减少了移植 的难度。-VFS:虚拟文件系统。隐藏了各种具体文件系统的细节,为文件系统提供了统一 的接口。NS:网络协议栈。-DD:设备驱动。 Linux内核目录结构arch目录:内核支持的每种 CPU体系,在该目录下都有对应的子目录。每个CPU的子目录,有分为 boot ,mm, kernel 等子目录,分别控制系统引导,内存管理,系统调用等。block 目录:部分块设备驱动程序。driver

15、 目录:设备驱动程序。fs 目录:存放各种文件系统的实现代码。每个子目录对应一种一种文件系统的实现,公用的源 代码用于实现虚拟文件系统( VFS)。include 目录:内核所需的头文件。与平台无关的头文件在 include/linux 子目录下,与平台相 关的头文件存放在相应的子目录中。lib 目录:库文件代码,自己实现的库的源代码也放在这里。mm目录:mm目录中的文件用于实现内存管理中与体系结构无关的部分。与体系结构相关的代码在 arch 目录中。net 目录:用于网络协议的实现代码。子目录用于实现具体协议的代码。srcipts 目录:配置内核的脚本usr 目录: cpio 命令的实现。内

16、核编译 清除临时文件、中间文件和配置文件make clean :清除大部分编译产生的中间文件,保留 config 文件。make mrproper :清除所有编译产生的中间文件和 config 文件。make distclean : mrproper+ 和备份文件和补丁文件。 配置1、 make menuconfig (完整配置)2、使用默认配置在 /arch/arm 找到相似的配置文件make xxxdefconfigmake menuconfig.c 文件中的宏定义来源于 autoconfig.h 文件 子目录中的 Makefile 的宏定义来源于 auto.c onfig 文件autoc

17、onfig.h 、auto.config 文件中的定义来源于 .configmake uImage 时, .config 文件自动生成 autoconfig.h 和 auto.config 文件。3、使用厂家提供的配置文件嵌入式软件层次一个嵌入式系统,从软件的角度看分为三个层次: 引导加载程序包括固化在固件( firmware )中的 boot 程序(可选)和 Bootloader 两大部 分。 Linux 内核 特定式嵌入式平台的定制内核。 文件系统包括了系统命令和应用程序。BootLoader 的启动流程 stage1- 硬件初始化 CPU 内部的寄存器。-为加载 Bootloader 的 stage2 准备 RAM空 间。-拷贝Bootloader的stage2代码到RAM空间中- 设置堆 / 栈- 跳转到 stage2 的 C 入口点。 stage2- 初始化本阶段要使用的硬件设备 板在的硬件,比如:串口、网卡等。- 调用内核。U-boot 目录结构 board 目录 和开发板有关的文件。每一个开发板都以一个子目录出现在当前目录中,比如: SMDK241,0 子目录中存放于开发板相关的文件。 Commor目录实现 Uboot 支持的命令 CPU与特定CPU架构相关的代码,每一款Uboot下支持的CPU在该目录下对应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论