202X年嵌入式Linux开发环境的搭建 (2)

上传人:tang****xu1 文档编号:134880772 上传时间:2020-06-09 格式:PPT 页数:62 大小:1.12MB
返回 下载 相关 举报
202X年嵌入式Linux开发环境的搭建 (2)_第1页
第1页 / 共62页
202X年嵌入式Linux开发环境的搭建 (2)_第2页
第2页 / 共62页
202X年嵌入式Linux开发环境的搭建 (2)_第3页
第3页 / 共62页
202X年嵌入式Linux开发环境的搭建 (2)_第4页
第4页 / 共62页
202X年嵌入式Linux开发环境的搭建 (2)_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《202X年嵌入式Linux开发环境的搭建 (2)》由会员分享,可在线阅读,更多相关《202X年嵌入式Linux开发环境的搭建 (2)(62页珍藏版)》请在金锄头文库上搜索。

1、第5章嵌入式Linux开发环境的搭建 嵌入式开发环境的搭建U Boot 嵌入式交叉编译环境的搭建 交叉开发概念模型 minicom tftp 主机 目标板 各种连接方式 Cross Tools Chain Linux内核 网线串口线并口线USB电缆JTAG电缆 minicom 根文件系统 BootLoader Minicom Linux下的Minicom很像Windows下面的超级终端 利用Minicom作为被开发目标板的终端 实现目标板相关信息的显示与交互 适于在Linux通过超级终端对嵌入式设备的管理以及对嵌入操作系统的升级 tftp服务 tftp是用来下载远程文件的最简单网络协议 它基于

2、UDP协议而实现 嵌入式Linux的tftp开发环境包括两个方面 一是嵌入式Linux宿主机的tftp server支持二是嵌入式linux目标机的tftp client支持 配置宿主机上的tftp服务 主要为以后下载相应的内核映像和文件系统做准备 在嵌入式Linux的开发过程中 开发者需要在Linux服务器上进行所有的软件开发 交叉编译后 通用tftp方式将可执行文件下载到嵌入式系统运行 DHCP服务 目标板的Bootloader或者内核都需要分配IP地址 这可以通过动态主机配置协议 DHCPDynamicHostConfigurationProtocol 或者BOOTP协议实现 BOOTP

3、协议可以给计算机分配IP地址并且通过网络获取映像文件的路径 DHCP则是向后兼容BOOTP的协议拓展 Linux操作系统的主机一般包含dhcpd的软件包 可以配置DHCP服务 配置服务的操作需要root用户的权限 busybox busybox是构造文件系统最常用的软件工具包 它被非常形象地称为嵌入式Linux系统中的 瑞士军刀 因为它将许多常用的Linux命令和工具结合到了一个单独的可执行程序 busybox 中 虽然与相应的GNU工具比较起来 busybox所提供的功能和参数略少 但在比较小的系统 例如启动盘 或者嵌入式系统中已经足够了 busybox在设计上就充分考虑了硬件资源受限的特殊

4、工作环境 它采用一种很巧妙的办法减少自己的体积 所有的命令都通过 插件 的方式集中到一个可执行文件中 在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作 采用单一执行文件的方式最大限度地共享了程序代码 甚至连文件头 内存中的程序控制块等其他系统资源都共享了 对于资源比较紧张的系统来说 真是最合适不过了 在busybox的编译过程中 可以非常方便地加减它的 插件 最后的符号链接也可以由编译系统自动生成 NFS文件系统 1 NFS为NetworkFileSystem的简称 最早是由Sun公司提出发展起来的 其目的就是让不同的机器 不同的操作系统之间通过网络可以彼此共享文件 NFS可以让不同

5、的主机通过网络将远端的NFS服务器共享出来的文件安装到自己的系统中 从客户端看来 使用NFS的远端文件就像是使用本地文件一样 在嵌入式中使用NFS会使应用程序的开发变得十分方便 并且不用反复地进行烧写映像文件 NFS的使用分为服务端和客户端 其中服务端是提供要共享的文件而客户端则通过挂载 mount 这一动作来实现对共享文件的访问操作 下面主要介绍NFS服务端的使用 在嵌入式开发中 通常NFS服务端在宿主机上运行 而客户端在目标板上运行 NFS文件系统 2 NFS服务端是通过读入它的配置文件 etc exports 来决定所共享的文件目录的 在这个配置文件中 每一行都代表一项要共享的文件目录以

6、及所指定的客户端对它的操作权限 客户端可以根据相应的权限 对该目录下的所有目录文件进行访问 共享的目录 客户端主机名称或IP 参数1 参数2 在这里 主机名或IP是可供共享的客户端主机名或IP 若对所有的IP都可以访问 则可用 表示 这里的参数有很多种组合方式 U Boot Linux启动过程 自解压 跳到入口 初始化硬件 数据结构 驱动程序 挂接根文件系统 从inittab获取运行级别 检测与初始化系统环境 启动与级别相应的服务项 启动终端等待用户登录 祖先进程 控制其他进程 从预定地址执行 0 xFFFF0000 硬件初始化 跳到启动盘第一扇区 将Linux内核映像装入内存 跳到内核映像入

7、口 Bootloader的概念 BootLoader就是在操作系统内核运行之前运行的一段小程序 通过这段小程序 我们可以初始化硬件设备 建立内存空间的映射图 从而将系统的软硬件环境带到一个合适的状态 以便为最终调用操作系统内核准备好正确的环境 通常 BootLoader是严重地依赖于硬件而实现的 特别是在嵌入式世界 因此 在嵌入式世界里建立一个通用的BootLoader几乎是不可能的 尽管如此 我们仍然可以对BootLoader归纳出一些通用的概念来 以指导用户特定的BootLoader设计与实现 Bootloader的概念 Bootloader是一段可执行程序 完成的主要功能是将可执行文件

8、一般是操作系统 搬移到内存中 然后将控制权交给这段可执行文件 操作系统 cpu loader Bootloader的工作模式 一 下载模式对研发人员来说 Bootloader一般需要工作在这种模式下 特别是调试内核或者Bootloader本身的时候 通过串口终端与Bootloader进行交互 可以操作系统硬件 比如通过网口或者串口下载内核 烧写Flash等等 Bootloader的工作模式 二 启动加载模式嵌入式产品发布的时候 Bootloader必须工作在该模式下 这种情况下 Bootloader必须完成硬件自检 配置 并从Flash中将内核拷贝到SDRAM中 并跳转到内核入口 实现自启动

9、而不需要人为的干预 Bootloader的安装媒介 系统上电时或复位以后 都从芯片厂商预先安排的一个地址处取第一条指令执行 对S3C2410芯片 从0 x0处开始 由于上电或复位需要运行的第一段程序就是Bootloader 故必须把Bootloader放入该地址 将Bootloader写入固态存储设备 永久保存 系统上电后将自动执行Bootloader Bootloader的烧写 Bootloader可以配置系统 没有Bootloader 系统就不能启动 Bootloader可以实现自烧写 但是系统中没有还没有Bootloader的时候 怎么启动 JTAG烧写 典型的Flash存储空间分配图

10、bootloader 启动参数 内核 根文件系统 提供较多命令接口 U Boot简介 1999年由德国DENX软件工程中心的WolfgangDenk发起 全称UniversalBootloader 特点 支持多种硬件构架 包括ARM x86 PPC MIPS m68k NIOS Blackfin 支持多种操作系统 包括Linux VxWorks NETBSD QNX RTEMS ARTOS LynxOS 支持多达216种以上的开发板 开放源代码 遵循GPL条款 易于移植 调试官方网站 http www denx de wiki U Boot WebHome U Boot目录结构 board目标

11、板相关文件 主要包含硬件初始化 SDRAM初始化 common独立于处理器体系结构的通用代码 cpu与处理器相关的文件 包含cpu初始化 串口初始化 中断初始化等代码 docU Boot的说明文档 drivers设备驱动代码 如Flash驱动 网卡驱动 串口驱动等 net网络功能的上层文件 实现各种协议 如nfs tftp arp等 U Boot目录结构 fsU Boot支持的文件系统的实现 如cramfs fat ext2 jffs2等 includeU Boot使用的头文件 包括不同硬件构架的头文件 lib xxx处理器相关文件 如我们要使用的lib arm 与arm体系结构相关的文件 大

12、多数引导系统都分为stage1和stage2两大部分 依赖于处理器体系结构和板级初始化的代码通常都放在stage1中 用汇编实现 而stage2则通常用C语言来实现 这样可以实现更复杂的功能 同时代码具有更好的可读性和可移植性 18 引导系统的stage1 1 硬件设备初始化 2 为加载引导系统的stage2准备RAM空间 3 拷贝引导系统的stage2到RAM空间中 4 设置好堆栈 5 跳转到stage2的C入口点 引导系统的stage2 1 初始化本阶段要用到的硬件设备 2 检测系统内存映射 memorymap 3 将内核映像和根文件系统映像从flash上读到RAM空间中 4 为内核设置启

13、动参数 5 调用内核 U Boot启动可分为两个阶段 U Boot启动流程之stage1 第一阶段的代码位于cpu arm920t start S中 依次完成以下功能 1 系统上电 进入svc模式2 关闭看门狗 禁止所有中断3 进行初级硬件初始化4 将自身代码拷贝到SDRAM中5 设置堆栈6 清空bss段7 跳转到C语言实现的stage2中 从NANDFlash启动 经典2410试验箱不带NORFlash 只能从NANDFlash启动 由硬件实现选择从NAND启动 系统上电或者复位时NANDFlash控制器自动将NANDFlash的前4KB拷贝到一段内置RAM 并将这段RAM映射到0 x000

14、00000处 NORFlash与NANDFlash比较 进入SVC模式 start code setthecputoSVC32mode mrsr0 cpsrbicr0 r0 0 x1forrr0 r0 0 xd3msrcpsr r0 看门狗和中断处理 ldrr0 pWTCONmovr1 0 x0strr1 r0 maskallIRQsbysettingallbitsintheINTMR default movr1 0 xffffffffldrr0 INTMSKstrr1 r0 ldrr1 0 x3ffldrr0 INTSUBMSKstrr1 r0 copy myself的实现 copy mys

15、elf ldrr0 UBOOT RAM BASE 0 x33f80000movr1 0 x0movr2 0 x30000blnand read wholetstr0 0 x0beqok nand read1 b1bnand read whole用C语言实现 根据ARM过程调用标准 AAPCS 参数传递如下 R0C程序的第一个参数 在函数中被定义为读取的目的地址R1C程序的第二个参数 在函数中被定义为读取的源地址R2C程序的第三个参数 在函数中被定义为读取数据块的大小nand read whole的原型如下 在board up2410 nand c中实现 intnand read whole u

16、nsignedchar buf unsignedlongstart addr intsize 若读取成功 函数返回0 否则返回1 根据AAPCS 返回结果放在r0中 nand read whole intnand read whole unsignedchar buf unsignedlongstart addr intsize while i 9 设置堆栈指针 stack setup ldrr0 TEXT BASEsubr0 r0 CFG MALLOC LENsubr0 r0 CFG GBL DATA SIZEsubsp r0 12 U Boot启动流程之stage2 ldrpc start armboot start armboot wordstart armboot start armboot和start armboot都是symbol 程序链接时由连接器使用 上面程序的第二行表示在symbol处放置一个值 这个值就是start armboot的链接地址 也是程序代码存放的地址 将这个地址放入PC中 从而实现程序的跳转 U Boot启动流程之stage2 该函数是c语言的入口函数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号