《天祥arm9视频tx2440a全部课件第三部分,共四个部分》由会员分享,可在线阅读,更多相关《天祥arm9视频tx2440a全部课件第三部分,共四个部分(55页珍藏版)》请在金锄头文库上搜索。
1、第五部分 嵌入式系统移植 -Bootloader,TX-2440A 嵌入式视频教程,更多资料请登录http:/ http:/ 网址:,第十三讲 bootloader原理和vivi的移植,第十三讲 bootloader原理和vivi的移植,1. Bootloader概述 2. vivi的启动过程分析 3. vivi的配置移植 4. vivi命令详解,Bootloader 概述,一个嵌入式Linux系统从软件的角度看通常分为4个层次: Bootloader Linux内核 文件系统 用户应用程序,Bootloader 概述,简单地说,Bootloader就是在操作系统运行之前运行的一段小程序。通过
2、这段小程序,可以初始化硬件设备、建立系统的内存空间映射图,从而将系统的软件硬件环境带到一个合适的状态,以便为调用操作系统内核准备好正确的环境。 最终,Bootloader把操作系统内核映像加载到RAM中,并将系统控制权交给它,Bootloader 概述,Bootloader的操作模式 大多数Bootloader都包含两种不同的操作模式,即启动加载模式和下载模式,二者的区别仅对开发人员才有意义,从最终用户的角度看,Bootloader的作用就是加载操作系统。,常用的bootloader,U-Boot U-Boot(Universal Boot Loader)是德国DENX小组开发的用于多种嵌入式
3、CPU的BootLoader程序,它可以运行于PowerPC、ARM、MIPS等多种嵌入式开发板上。 vivi vivi是由韩国MIZI公司开发的专门用于SAMSUNG ARM架构的一种Bootloader,常用的bootloader,RedBoot RedHat公司开发的,针对eCos操作系统 BLOB 基于LART硬件平台,目前它主要支持INTEL的StrongARM体系结构和XScale结构的ARM芯片。 LILO Linux磁盘引导程序 GRUB GNU的LILO替代程序,vivi的启动过程分析,Bootloader的启动过程大多是分两个阶段,即stage1和stage2。 依赖CPU
4、体系结构的代码通常放在stage1中,而且通常用汇编语言实现。 stage2中的代码通常用C语言实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。,vivi的启动过程分析,Bootloader的stage1通常包括以下步骤: 1、硬件设备初始化 2、为加载stage2准备RAM空间 3、复制stage2到RAM空间 4、设置好堆栈 5、跳转到stage2的C入口点,vivi的启动过程分析,Bootloader的stage2通常包括以下步骤: 1、初始化本阶段要用到的硬件设备 2、检测系统内存映射 3、将kernel映像和根文件系统映像从 Flash上读到RAM空间 4、为内
5、核设置启动参数 5、调用内核,第五部分 嵌入式系统移植 -Bootloader,TX-2440A 嵌入式视频教程,出品:天祥电子 网址:,第十四讲 U-Boot原理分析和移植,1. U-Boot简介 2. U-Boot源码目录结构 3. U-Boot运行代码分析 4. U-Boot在TX2440A开发板上移植 5. U-Boot常用命令讲解,第十四讲 U-Boot原理分析和移植,U-Boot 简介,UBoot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEM
6、S, ARTOS, LynxOS嵌入式操作系统。 UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。 uboot下载地址: ftp:/ftp.denx.de/pub/u-boot/,U-Boot源码目录结构,1. board:开发板相关目录 2. common:通用的命令函数 3. cpu:特定CPU架构相关目录,如arm920t 4. doc:uboot的开发、使用文档 5. drivers:uboot支持的设备驱动程序,比如串口,nandflash,网卡 6. fs: 支持的文件系统,Uboot现在支持cram
7、fs、fat、fdos、jffs2和registerfs。,U-Boot源码目录结构,7. include:头文件和开发板配置文件,configs目录下是开发板的配置文件 8. lib_xxxx: 与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。 9. lib_generic:通用的库函数 10. net:各种网络协议,TFTP协议、NFS协议等。 11. tools:uboot自带的工具,U-Boot第一阶段启动过程,cpu/arm920t/start.s 完成硬件初始化 设置CPU工作模式 关看门狗 设置系统时钟 关MMU,CACHE 为第二阶段准备RAM空间 (调用boa
8、rd/smdk2410/lowlevel_init.s) 设置堆栈 跳转到第二阶段代码的C入口点 (lib_arm/board.c start_armboot( ) ),U-Boot第二阶段启动过程,第二阶段代码:lib_arm/board.c中的start_armboot函数 init_sequence: 初始化CPU,设置系统时钟,初始化定时器,初始化环境参数,初始化串口控制台,检测内存映射 flash_init: 初始化NORFLASH env_relocate: 初始化环境变量 初始化系统外围设备 最后调用main_loop (command/main.c),第六部分 嵌入式系统移植
9、-Linux内核,TX-2440A 嵌入式视频教程,出品:天祥电子 网址:,第十五讲 Linux内核分析和配置,1. 内核源码目录结构分析 2. Makefile,Kconfig文件分析 3. Linux启动过程分析 4. 配置、编译内核,第十五讲 Linux内核分析和配置,Linux内核的发展,Linux内核的最初版本由Linus Torvalds在1991年发布 Linux1.0 1994年3月 仅支持386 Linux1.2 1995年3月 多平台支持 Linux2.0 1996年6月 支持SMP Linux2.2 1999年1月 支持更多的硬件 Linux2.4 2001年1月 支持桌
10、面系统和USB Linux2.6 2003年12月 支持更多平台,使用新的调度器,内核可被抢占,模块子系统和文件系统做了大量改进,支持更多的硬件驱动。,Linux内核的版本,内核源码的官方网址: www.kernel.org 但这里可用的内核版本并不总是适用于所有的Linux支持 的体系结构。实际上,这个站点的内核首先确保的是在Intel x86体系结构上可以正常运行 要取得目标板可用的内核,必须找到专门负责开发相应处理器架构的团队所提供的内核版本。 ARM体系结构的源码网址: www.arm.linux.org.uk/developer,Linux内核的版本,目前TX2440A开发板上使用的
11、内核版本:2.6.31 在内核源码顶层目录下Makefile中查看版本号: VERSION = 2 主版本号 PATCHLEVEL = 6 主版本号 SUBLEVEL = 31 次版本号 EXTRAVERSION = 扩展版本号,内核源码目录结构分析,arch 与体系结构相关的代码。对应于每个支持的体系结构,有一个相应的子目录如x86、arm等,每个体系结构子目录下包含几个主要子目录: .boot 启动内核所需的平台特有代码 .kernel 体系结构特有特征(如SMP)的实现 .mm 与体系结构相关的内存管理代码 .lib 与体系结构相关的通用函数的实现,内核源码目录结构分析,drivers
12、所有设备驱动程序代码,它占整个内核代码量一半以上,每一个子目录对应一类驱动程序。 fs 文件系统代码,每个支持的文件系统有相应的子目录,如cramfs,yaffs,jffs2等 include 包括编译内核所需的大部分头文件,与平台无关的头文件放在include/linux子目录下,平台相关的头文件如include/asm-arm,内核源码目录结构分析,init 内核初始化代码 kernel 内核管理核心代码 lib 库函数代码 Mm 内存管理代码 net 网络支持代码 sound 音频设备驱动代码 scripts 用于配置内核的脚本文件 documentation 内核相关文档,内核配置系统
13、的基本结构,Makefile:分布在Linux内核源码中的Makefile定义了Linux内核编译的规则; 配置工具: make config 字符界面 make menuconfig Ncurses图形界面 make xconfig Xwindows图形界面 配置文件: .config:在配置内核时生成,根据.config来决定使用哪些Makefile,Makefile 文件分析,Makefile的作用: 决定编译哪些文件 怎样编译这些文件 按什么顺序连接这些文件,Kconfig文件分析,变量: bool 两种取值:y、n tristate 三种取值:y、n、m string 字符串 hex
14、 十六进制数据 int 十进制数据,Kconfig文件分析,menuconfig: 用于生成菜单 config: 生成配置选项 depend on 依赖关系 default 默认值 select 自动选择 source 读入另一个Kconfig文件 help 帮助信息,Linux的启动过程,第一阶段: arch/arm/kernel/head.S arch/arm/kernel/head-common.S arch/arm/mm/proc-arm920.S 检查内核是否支持当前处理器架构和开发板,禁止Cache,使能MMU,设置栈指针,调用 start_kernel,Linux的启动过程,第二
15、阶段: init/main.c start_kernel 完成内核初始化全部工作,最后调用rest_init函数启动init进程,Linux的启动过程,内核文件: vmlinux 编译出来的最原始的内核文件,未压缩 zImage 是vmlinux经过gzip压缩后的文件 uImage U-boot专用的映像文件,由bootm命令启动,准备移植,修改Makefile: ARCH ?= arm CROSS_COMPILE ?=arm-linux- 修改时钟 arch/arm/mach-s3c2440/mach-smdk2440.c 修改机器码 内核中:arch/arm/tools/mach-types uboot中:include/asm-arm/mach-types.h 载入配置文件 arch/arm/configs/s3c2410_defconfig 选择CPU类型 SMDK2440 编译内核镜像 make zImage,第六部分 嵌入式系统移植 -Linux内核,TX-2440A 嵌入式视频教程,出品:天祥电子 网址:,第十六讲 向内核中加入驱动,1. 支持NAND和yaffs2,挂载文件系统 2. 基本外围设备的配置 (LCD、触摸屏、网卡、声