




已阅读5页,还剩64页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章构建嵌入式Linux开发平台 6 1嵌入式交叉编译环境搭建 交叉编译的含义 就是在一个平台上生成另一个平台上可执行的目标代码 平台的含义 处理器的体系结构 运行的操作系统 说明 操作系统或处理器体系结构不同则是不同的平台 嵌入式交叉编译 在嵌入式系统开发过程中一般把进行交叉编译的主机称为宿主机 也就是普通的通用计算机 而把程序实际的运行环境称为目标机 也就是嵌入式系统环境 编译的过程包括编译 汇编 链接等几个阶段 因此 嵌入式的交叉编译也包括交叉编译 交叉汇编 交叉链接等过程 嵌入式交叉编译环境模型 交叉编译器的安装过程1 在 usr local 目录下新建arm目录 并进入该目录 root vm devlocal mkdirarm root vm devlocal cdarm2 使用cp命令 把cross 3 3 2 tar bz2拷贝到新建立的 usr local arm目录下 3 解压交叉编译器安装文件 cross 3 3 2 tar bz2 root vm devarm tar jxvfcross 3 3 2 tar bz2说明 上述命令执行完毕 在当前目录下将会增加文件夹3 3 2 这就是交叉编译器所在目录 4 增加编译器路径 root vm devarm vi etc profile PathmanipulationIf id u 0 thenpathmunge sbinpathmunge usr sbinpathmunge usr local sbinpathmunge usr local arm 3 3 2 binFi说明 编译路径保存在 etc 的profile文件中 因此打开的是profile文件 并在路径字段添加上 3 3 2 bin 示例中的下划线语句 也可以使用环境变量添加编译器路径 6 2U Boot移植 系统启动程序Bootloader是在操作系统内核运行之前运行的一段程序 类似于通用计算机中的BIOS程序 通过这段程序 可以完成硬件设备的初始化 并建立内存空间的映射图的功能 从而将系统的软硬件环境带到一个合适的状态 为最终调用操作系统内核做好准备 通常称之为引导系统 6 2 1引导系统简介 BootLoader就是在操作系统内核运行之前运行的一段小程序 通过这段小程序初始化硬件设备 建立内存空间的映射图 从而将系统的软硬件环境带到一个合适的状态 为调用操作系统内核准备好正确的环境 大多数引导系统都分为stage1和stage2两个阶段 Stage1 依赖于处理器体系结构和板级初始化的代码通常都放在stage1阶段 用汇编语言实现 Stage2 则通常用C语言来实现 这样可以实现更复杂的功能 同时具有更好的可读性和可移植性 引导系统stage1实现的功能 按先后顺序 硬件设备初始化 为加载引导系统的stage2准备RAM空间 拷贝引导系统的stage2程序到RAM空间中 设置好堆栈 跳转到stage2的C程序入口点 引导系统stage2实现的功能 按先后顺序 初始化本阶段要用到的硬件设备 检测系统内存映射 memorymap 将操作系统内核映像和根文件系统映像从Flash读到RAM空间中 为操作系统内核设置启动参数 调用操作系统内核 由于引导系统是完全依赖于硬件实现的 不同类别的处理器有不同的汇编语言 不同的开发平台有不同的硬件资源 因此 在嵌入式世界里建立一个通用的Bootloader几乎是不可能的 尽管如此 仍然可以对Bootloader归纳出一些通用的概念来指导特定的Bootloader设计与实现 Bootloader共性分析 1 CPU体系结构 每一种体系结构的处理器都大量面世 2 Bootloader的安装媒介 处理器的复位地址大多统一 3 Bootloader的启动过程分为单阶段和多阶段两种 4 Bootloader的操作模式 启动加载模式下载模式5 Bootloader的烧写加载 统一使用JTAG接口 6 2 2U Boot概述 U Boot UniversalBootLoader 是遵循GPL条款的开放源码项目 其源码目录 编译形式与Linux内核很相似 事实上 不少U Boot源码就是相应的Linux内核源程序的简化 尤其是一些设备的驱动程序 U Boot支持多种类别的嵌入式操作系统的引导 U Boot支持多种系列的处理器体系结构 U Boot的前身是PPCBOOT 经由德国DENX软件工程中心的WolfgangDenk发起并完善起来 1 U Boot的主要特点开放源码 支持多种嵌入式操作系统内核 如Linux NetBSD VxWorks QNX RTEMS ARTOS LynxOS 支持多个处理器系列 如PowerPC ARM x86 MIPS XScale 较高的可靠性和稳定性 高度灵活的功能设置 适合U Boot调试 不同操作系统引导要求 产品发布等 丰富的设备驱动源码 如串口 以太网 SDRAM FLASH LCD NVRAM EEPROM RTC 键盘等 较为丰富的开发调试文档与强大的网络技术支持 2 U Boot主要目录结构board 目标板相关文件 主要包含SDRAM FLASH驱动等 common 独立于处理器体系结构的通用代码 cpu CPU相关文件 driver 通用设备驱动 如CFIFLASH驱动 doc U Boot的说明文档 examples 可在U Boot下运行的示例程序 lib xxx 处理器体系相关的库文件 net 与网络功能相关的文件目录 post 上电自检文件目录 rtc RTC驱动程序 tools 用于创建U BootS RECORD和BIN镜像文件的工具 3 U Boot主要功能系统引导 支持NFS挂载 RAMDISK 压缩或非压缩 形式的根文件系统 基本辅助功能 强大的操作系统接口功能 可灵活设置 传递多个关键参数给操作系统 支持目标板环境参数多种存储方式 如FLASH NVRAM EEPROM CRC32校验 可校验FLASH中内核 RAMDISK镜像文件是否完好 设备驱动 串口 SDRAM FLASH 以太网 LCD NVRAM EEPROM 键盘 USB PCMCIA PCI RTC等驱动支持 上电自检功能 SDRAM FLASH大小自动检测 SDRAM故障检测 CPU型号 6 2 3U Boot移植过程 1 获得U Boot源码直接从U Boot的官方网站下载的源码包 笔者下载的源码包版本为1 3 2 将源码包u boot 1 3 2 tar bz2拷贝到自己的工作目录下 并解压源码包 root vm dev2410 s tarjxvfu boot 1 3 2 tar bz2 root vm dev2410 s cdu boot 1 3 2说明 解压后 当前目录下产生u boot 1 3 2子目录 可进入该目录查看相关信息 2 建立板级支撑包 在board目录下 每一块开发板都有一个对应的目录 需要为自己的开发板建立一个目录 root vm devu boot 1 3 2 cdboard root vm devboard mkdirup2410 root vm devboard cp smdk2410 up2410 root vm devboard cd 说明 为了体现开发板所使用的S3C2410处理器 这里取名up2410 并创建相应的文件 smdk2410 是U Boot专门针对S3C2410处理器设计 U Boot源码中 专门为S3C2410处理器的开发板建立有一个目录 名为smdk2410 并提供相关的文件支撑 U Boot为每个开发板都提供有一个独立的配置文件 为smdk2410提供的的配置文件为include configs smdk2410 h 用户自己建立的开发板up2410的配置文件可以直接从smdk2410开发板的配置文件修改得到 拷贝操作如下 root vm devu boot 1 3 2 cp include configs smdk2410 h include configs up2410 h 修改Makefile 使得可以配置自己的开发板 root vm devu boot 1 3 2 viMakefile在Makefile中找到smdk2400的配置项 具体内容如下 smdk2400 config unconfig MKCONFIG config armarm920tsmdk2400NULLs3c24x0在smdk2400配置项下添加用户的开发板配置 添加如下 up2410 config unconfig MKCONFIG config armarm920tup2410NULLs3c24x0这样 用户自己的板级支持包就建好了 3 添加代码 支持从NandFlash启动S3C2410开发板通常都没有NorFlash 只能从NandFlash启动 而U Boot默认不支持从NandFlash启动 需要自己添加代码来实现从NandFlash启动 1 修改start S文件 位于cpu arm920t 目录下的start S文件是开发板上电后运行的第一段代码 在start s文件中添加支持从NandFlash启动的代码 把NandFlash里面的代码拷贝到SDRAM中去 而U Boot本身并没有实现该功能 因此 还需要编写一段代码以实现程序拷贝 start S文件实现对nandflash的支持以及使用的同时 要确保nandflash能正常工作 相当于nandflash驱动功能正常 start S对nandflash操作包括初始化和数据读取 添加nandflash初始化和数据读取功能代码 并形成文件nand c nand c文件作为新增文件 原U Boot工程管理器尚未包含该文件 需修改Makefile文件 2 添加nand c文件 新增加nand c文件通常涉及一些宏定义 全局变量 系统参数等系统信息 这些系统信息通常用头文件来定义 因此将nand c程序中用到的一些宏增加到头文件up2410 h中 说明 具体添加内容根据编程者编写的代码情况确定 3 修改up2410 h文件 up2410 h是开发板的配置文件 而U Boot的一个重要功能就是基础硬件初始化 因此 需要在up2410 h文件中增加一些初始化配置信息 1 网卡配置 U Boot自带对CS8900网卡芯片的支持 2 添加命令 便于调试及使用3 修改环境变量 主要包括启动延时 串口波特率 MAC地址 TCP IP属性等 4 修改命令提示符 目标机开机后的提示信息 5 修改默认下载地址 需要跟开发板硬件的SDRAM地址保持一致 6 修改环境变量在Flash中的存储地址 4 开发板硬件配置 5 修改网卡驱动开发板厂商通常都在配套光盘里提供有网卡芯片的驱动程序 如MagicARM2410开发板配套光盘里提供有dm9000 x c和dm9000 x h两个文件 把这两个文件拷贝到u boot源代码目录下的drivers net下 替换掉U Boot自身的网卡驱动文件 6 编译U Boot 首先make开发板的配置文件 root vm devu boot 1 3 2 makeup2410 configConfiguringforup2410board root vm devu boot 1 3 2 然后运行make命令进行U Boot编译 root vm devu boot 1 3 2 make编译完成后 会在U Boot的源代码目录下生成u boot bin文件 这个文件就是最终生成的bootloader目标文件 7 加载U Boot用JTAG加载器连接宿主机和目标机 并接通目标机电源 将编译得到的u boot bin和烧写器文件sjf2410 s exe 通常随开发板配套光盘附带 即使光盘里面没有该文件 也可以通过安装givieo获得 拷贝到windows环境下的某个指定位置 如E盘 在windows环境下打开一个DOS对话框 并进入到u boot bin和sjf2410 s exe存放位置 运行sjf2410 s exe程序进行u boot bin加载 8 测试U Boot现在U Boot已经加载到开发板上 可以启动开发板检测是否加载正确 连接好开发板和主机之间的串口 断开开发板的JTAG下载线 打开windows系统提供的超级终端软件 设置串口连接参数 包括波特率 每帧数据位数 奇偶校验方式 停止位数 数据流控制方式等 启动开发板 U Boot1 3 2 Dec52010 10 35 38 DRAM 64MBFlash 512kBNAND 64MB Warning badCRCorNAND usingdefaultenvironmentIn serialOut serialErr serialHitanykeytostopautoboot 0 xch 2410 S 如果加载成功 会在超级终端界面上出现如下内容 说明 产生警告原因 主要是因为没有把环境变量写入Flash 6 3Linux内核移植 6 3 1概述 嵌入式系统启动过程 典型的Flash存储空间分配操作系统作为一组管理软硬件资源的程序 它能够管理内存 决定系统资源分配 控制输入 输出设备以及管理网络文件等 是系统软硬件之间的纽带 其典型存储地址结构如图所示 6 3 2Linux内核移植过程 1 获得Linux源码 http 将得到的Linux源码拷贝到对应的工作目录下 解压 root vm dev2410 s tar jxvflinux 2 6 24 4 tar bz2说明 这里以Linux 2 6 24 4为示例 内核解压后 当前目录下自动新建一个名为linux 2 6 24 4的子目录 可进入该目录查看Linux目录结构 root vm dev2410 s cdlinux 2 6 24 4 root vm devlinux 2 6 24 4 ls 2 修改Makefile文件MagicARM2410的主处理器是S3C2410X 属于ARM920T 使用交叉编译器arm linux 需修改内核的底层Makefile文件 root vm devlinux 2 6 24 4 viMakefile修改前 ARCH SUBARCH CROSS COMPILE 修改后 ARCH armCROSS COMPILE arm linux 3 拷贝 config配置文件由于MagicARM2410的配置和SMDK2410开发板的类似 可以使用SMDK2410的配置文件s3c2410 defconfig 只需要把该文件拷贝成内核目录下的 config文件即可 root vm devlinux 2 6 24 4 cp arch arm configs s3c2410 defconfig config 4 修改NandFlash分区Linux内核移植过程所使用的是SMDK2410开发板原型 而SMDK2410开发板的NANDFlash和MagicARM2410开发板不一样 需修改 用vi打开arch arm plat s3c24xx common smdk c文件 找到关于NandFlash分区的结构体structmtd partitionsmdk default nand part root vm devlinux 2 6 24 4 vi arch arm plat s3c24xx common smdk c staticstructmtd partitionsmdk default nand part 0 name Bootloader size 0 x80000 offset 0 1 name LinuxKernel offset 0 x80000 size SZ 2M 2 name Root offset 0 x280000 size SZ 4M 3 name UserSpace offset 0 x680000 size 0 x3980000 结构体structmtd partitionsmdk default nand part 5 添加LCD驱动支持MagicARM2410开发平台上配置有640 480的TFT液晶屏 需要在Linux内核部分添加对LCD的支持 LCD驱动支持添加在 arch arm mach s3c2410 目录下的mach smdk2410 c文件中 用vi编辑器打开该文件 并进行修改 root vm devlinux 2 6 24 4 vi arch arm mach s3c2410 mach smdk2410 c 修改mach smdk2410 c文件 添加包含LCD的数据结构的头文件 include include 添加与LCD点阵结构相关的程序代码 找到smdk2410 init函数 在函数的末尾添加对LCD的数据进行设置 6 添加网卡驱动支持MagicARM2410开发板上配置了DM9000A网卡 Linux内核已经有网卡驱动的实现代码 需要添加相应的配置 配置方法 在 arch arm mach s3c2410 mach smdk2410 c 文件中添加相应的内容 地址 中断号 网卡数据等 注意 具体地址 中断号要与实际的开发板对应 把网卡数据加入smdk2410 devices数组 7 添加YAFFS文件系统支持YAFFS YetAnotherFlashFilingSystem 是第一个专门为NandFlash存储器设计的嵌入式文件系统 适用于大容量的存储设备 从免费获得源码文件yaffs2 tar gz 将YAFFS的源代码yaffs2 tar gz拷贝到linux 2 6 24 4的同级目录下 解压该源码包 获得YAFFS源码 进入yaffs2目录 运行 patch ker sh给Linux内核打上补丁 这样 Linux内核就可以支持YAFFS文件系统了 8 编译和配置Linux内核在内核源代码的根目录下运行makemenuconfig命令 SystemType子项界面 编译内核 配置完成后 一个精简的Linux就已经设置完成 可在Linux内核源文件的根目录下使用make命令编译内核 root vm devlinux 2 6 24 4 make生成内核镜像 编译完成后 在Linux 2 6 24 4内核的 boot arch arm目录下生成内核的镜像文件zImage 9 加载Linux内核使用交叉网线连接好宿主机和目标机 设置宿主机的TCP IP属性 必须保证宿主机与目标机的IP地址处于同一网段 编译U Boot时 在源代码tools目录下生成有一个mkimage可执行文件 用该文件可对刚编译Linux内核生成的zImage进行处理 以供U Boot启动 注意 mkimage与zImage需要处于同一目录下 使用tftp下载内核映像文件 6 4根文件系统移植 根文件系统一直以来都是所有类Unix操作系统的一个重要组成部分 也可以认为是嵌入式Linux系统区别于其他一些传统嵌入式操作系统的重要特征 它给Linux带来了许多强大和灵活的功能 同时也带来了一些复杂性 6 4 1根文件系统概述 简单的说 根文件系统就是一种目录结构 根文件系统就是要包括Linux启动时所必须的目录和关键性的文件 Linux启动时需要有init目录下的相关文件 在Linux挂载分区时Linux一定会找 etc fstab这个挂载文件 根文件系统中还包括了许多的应用程序bin目录等 任何包括这些Linux系统启动所必须的文件都可以称为根文件系统 1 Linux根文件系统目录结构 Linux的根文件系统以树型结构组织 包含内核和系统管理所需要的各种文件和程序 一般说来根目录 下的顶层目录都有一些比较固定的命名和用途 linux根文件系统下一些主要目录的功用如下 bin 二进制可执行命令 dev 设备特殊文件 etc 系统管理和配置文件 etc rc d 启动的配置文件和脚本 home 用户主目录的基点 比如用户user的主目录就是 home user lib 标准程序设计库 又叫动态链接共享库 sbin 系统管理命令 存放系统管理员使用的管理程序 tmp 公用的临时文件存储点 root 系统管理员的主目录 mnt 系统提供让用户临时挂载其他的文件系统 lost found 这个目录平时是空的 用于存放系统非正常关机而留下 无家可归 的文件 proc 虚拟的目录 是系统内存的映射 var 某些大文件的溢出区 比如各种服务的日志文件 usr 最庞大的目录 要用到的应用程序和文件几乎都在这个目录 其中主要包含 usr bin 众多的应用程序 usr sbin 超级用户的一些管理程序 2 Linux根文件系统引导过程BusyBox的init进程依次进行以下工作 为init设置信号处理进程 初始化控制台 剖析inittab etc inittab文件 执行系统初始化的命令行 执行所有会导致init暂停的inittab命令 告诉init必须等到相应的进程完成之后才能继续执行 执行所有仅执行一次的inittab命令 仅执行相应的进程一次 而且不会等待它完成 一旦完成以上工作 init进程便会循环执行以下工作 1 执行所有终止时必须重新启动的inittab命令 2 执行所有终止时必须重新启动但启动前必须先询问过用户的inittab命令 1 获得BusyBox源码从网站http 下载 解压源码 得到完整的BusyBox源码包 root vm dev2410 s tar vxjfbusybox 1 12 2 tar bz2 root vm dev2410 s cdbusybox 1 12 2 root vm devbusybox 1 12 2 ls说明 BusyBox解压后 当前目录下自动新建一个名为busybox 1 12 2的子目录 可进入该目录查看BusyBox目录结构 6 4 2BusyBox根文件系统移植过程 2 修改Makefile文件与Linux内核移植原因相同 需要修改Makefile中的ARCH和CROSS COMPILE与本机的路径一致 打开Makefile文件 root vm devbusybox 1 12 2 viMakefile将Makefile文件的目标平台改为arm 交叉编译器前缀改为arm linux 修改如下 CROSS COMPILE arm linux ARCH arm 3 配置和编译BusyBox运行makemunuconfig命令 进入BusyBox配置界面 将BusyBox编译成静态库 添加转义字符识别 选择shell 其他选项请用户根据自己的使用情况进行配置 配置好BusyBox选项后 即可对BusyBox进行编译 BusyBox编译过程 root vm devbusybox 1 12 2 make root vm devbusybox 1 12 2 makeinstall 4 创建根文件系统目录结构 使用shell脚本创建根文件系统的目录结构 并在想要建立根文件系统的地方运行此脚本 创建shell脚本文件 root vm devbusybox 1 12 2 vibuild fs sh bin shecho makeingrootdir mkdirrootfscdrootfsecho makeingdir bindevetclibprocsbinsysusr mkdirbindevetclibprocsbinsysusr 8dirsmkdirusr binusr libusr sbinlib modules Don tusemknod unlessyourunthisScriptasmknod m600dev consolec51mknod m666dev nullc13echo makingdir mnttmpvar mkdirmnttmpvarchmod1777tmpmkdirmnt etcmnt jiffs2mnt yaffsmnt datamnt tempmkdirvar libvar lockvar logvar runvar tmpchmod1777var tmpecho makingdir homerootboot mkdirhomerootbootecho done build fs sh程序清单 5 拷贝etc目录把busybox源码目录下的etc的内容拷贝到buildfs sh新建的 rootfs etc目录下 具体操作过程 root vm devbusybox 1 12 2 cdrootfs root vm devrootfs lsbinbootdevetchomelibmntprocrootsbinsystmpusrvar root vm devrootfs cdetc root vm devetc cp a root 2410 s busybox 1 12 2 examples bootfloppy etc root vm devetc lsfstabinit dinittabprofile 6 修改profile文件 etc profile是用户登录时的环境变量设置 根据建立的根文件系统设置相应的环境变量 使用vi编辑器编辑并保存profile文件 root vm devetc viprofile说明 profile文件的具体内容与用户建立的根文件系统相关 7 修改初始化文件inittab和fstabinittab
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 入职安全培训测验课件
- 卫生院服务中心人事管理制度
- 银行灰名单管理办法
- 肺功能检查及结果解读讲课文档
- 社区群众经费管理办法
- 纪委关爱谈话管理办法
- 新解读《GB 31247-2014电缆及光缆燃烧性能分级》
- 出租车安全培训内容课件
- 出租车公司安全培训会课件
- 全民国家安全教育日知识竞赛试题及答案(单项选择题)
- 仓库年度评审报告范文
- 《工会财务与会计》课件
- 工商银行-(招聘笔试题)
- 物业保洁员礼节礼貌培训
- 八年级物理上册课程纲要
- 普外科出院患者随访制度
- 《楼梯的故事》话剧剧本
- 第二单元 观察物体(单元测试)-2024-2025学年三年级上册数学北师大版
- DB65-T 4773-2024 生物安全实验室消毒技术指南
- 人教版PEP四年级英语上册Unit-1-My-classroom课件
- Starter知识点清单(含默写)2024-2025学年牛津上海版英语六年级上册
评论
0/150
提交评论