《天祥ARM视频TXA全部课件第三部分共四个部分.ppt》由会员分享,可在线阅读,更多相关《天祥ARM视频TXA全部课件第三部分共四个部分.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、天祥ARM视频TXA全部课件第三部分共四个部分 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望 出品:天祥出品:天祥电子子网址:网址:第十三讲第十三讲第十三讲第十三讲 bootloaderbootloader原理和原理和原理和原理和vivivivi的移植的移植的移植的移植第十三讲第十三讲第十三讲第十三讲 bootloaderbootloader原理和原理和原理和原理和vivivivi的移植的移植的移植的移植1.Bootloader1.Bootloader概述概述2
2、.vivi2.vivi的启动过程分析的启动过程分析3.vivi3.vivi的配置移植的配置移植4.vivi4.vivi命令详解命令详解Bootloader 概述概述一个嵌入式Linux系统从软件的角度看通常分为4个层次:Bootloader Linux内核 文件系统 用户应用程序Bootloader 概述概述简单地说,Bootloader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立系统的内存空间映射图,从而将系统的软件硬件环境带到一个合适的状态,以便为调用操作系统内核准备好正确的环境。最终,Bootloader把操作系统内核映像加载到RAM中,并将系统控制权
3、交给它Bootloader 概述概述BootloaderBootloader的操作模式的操作模式 大多数Bootloader都包含两种不同的操作模式,即启动加载模式和下载模式,二者的区别仅对开发人员才有意义,从最终用户的角度看,Bootloader的作用就是加载操作系统。常用的常用的bootloaderU-Boot U-Boot(Universal Boot Loader)是德国DENX小组开发的用于多种嵌入式CPU的BootLoader程序,它可以运行于PowerPC、ARM、MIPS等多种嵌入式开发板上。vivi vivi是由韩国MIZI公司开发的专门用于SAMSUNG ARM架构的一种B
4、ootloader常用的常用的bootloaderRedBoot RedHat公司开发的,针对eCos操作系统BLOB 基于LART硬件平台,目前它主要支持INTEL的StrongARM体系结构和XScale结构的ARM芯片。LILO Linux磁盘引导程序GRUB GNU的LILO替代程序vivi的启动过程分析的启动过程分析 Bootloader的启动过程大多是分两个阶段,即stage1和stage2。依赖CPU体系结构的代码通常放在stage1中,而且通常用汇编语言实现。stage2中的代码通常用C语言实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。vivi的启动过程
5、分析的启动过程分析Bootloader的stage1通常包括以下步骤:1、硬件设备初始化 2、为加载stage2准备RAM空间 3、复制stage2到RAM空间 4、设置好堆栈 5、跳转到stage2的C入口点vivi的启动过程分析的启动过程分析Bootloader的stage2通常包括以下步骤:1、初始化本阶段要用到的硬件设备 2、检测系统内存映射 3、将kernel映像和根文件系统映像从 Flash上读到RAM空间 4、为内核设置启动参数 5、调用内核第五部分第五部分 嵌入式系统移植嵌入式系统移植 -BootloaderTX-2440A 嵌入式视频教程嵌入式视频教程 出品:天祥出品:天祥电
6、子子网址:网址:第十四讲第十四讲第十四讲第十四讲 U-BootU-Boot原理分析和移植原理分析和移植原理分析和移植原理分析和移植1.U-Boot1.U-Boot简介简介2.U-Boot2.U-Boot源码目录结构源码目录结构3.U-Boot3.U-Boot运行代码分析运行代码分析4.U-Boot4.U-Boot在在TX2440ATX2440A开发板上移植开发板上移植5.U-Boot5.U-Boot常用命令讲解常用命令讲解第十四讲第十四讲第十四讲第十四讲 U-BootU-Boot原理分析和移植原理分析和移植原理分析和移植原理分析和移植U-Boot 简介简介 UBoot是德国DENX小组的开发用
7、于多种嵌入式CPU的bootloader程序,UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。ubootuboot下载地址:下载地址:ftp:/ftp.denx.de/pub/u-boot/ftp:/ftp.denx.de/pub/u-boot/U-BootU-Boot源码目录结构源码目录结构1.board:开发板相关目录mon:通用的命令函数3.cpu:特定CPU
8、架构相关目录,如arm920t4.doc:uboot的开发、使用文档5.drivers:uboot支持的设备驱动程序,比如串口,nandflash,网卡6.fs:支持的文件系统,Uboot现在支持cramfs、fat、fdos、jffs2和registerfs。U-BootU-Boot源码目录结构源码目录结构7.include:头文件和开发板配置文件,configs目录下是开发板的配置文件8.lib_xxxx:与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。9.lib_generic:通用的库函数:各种网络协议,TFTP协议、NFS协议等。11.tools:uboot自带的工具
9、U-BootU-Boot第一阶段启动过程第一阶段启动过程cpu/arm920t/start.s cpu/arm920t/start.s 完成硬件初始化完成硬件初始化 设置CPU工作模式 关看门狗 设置系统时钟 关MMU,CACHE 为第二阶段准备RAM空间 (调用board/smdk2410/lowlevel_init.s)设置堆栈 跳转到第二阶段代码的C入口点 (lib_arm/board.c start_armboot())U-BootU-Boot第二阶段启动过程第二阶段启动过程第二阶段代码:第二阶段代码:lib_arm/board.clib_arm/board.c中的中的start_ar
10、mbootstart_armboot函数函数 init_sequence:初始化CPU,设置系统时钟,初始化定时器,初始化环境参数,初始化串口控制台,检测内存映射flash_init:初始化NORFLASHenv_relocate:初始化环境变量初始化系统外围设备最后调用main_loop(command/main.c)第六部分第六部分 嵌入式系统移植嵌入式系统移植 -Linux内核内核TX-2440A 嵌入式视频教程嵌入式视频教程 出品:天祥出品:天祥电子子网址:网址:第十五讲第十五讲 Linux内核分析和配置内核分析和配置1.1.内核源码目录结构分析内核源码目录结构分析2.Makefile
11、2.Makefile,KconfigKconfig文件分析文件分析3.Linux3.Linux启动过程分析启动过程分析4.4.配置、编译内核配置、编译内核第十五讲第十五讲 Linux内核分析和配置内核分析和配置Linux内核的发展内核的发展Linux内核的最初版本由Linus Torvalds在1991年发布Linux1.0 1994年3月 仅支持386Linux1.2 1995年3月 多平台支持Linux2.0 1996年6月 支持SMPLinux2.2 1999年1月 支持更多的硬件Linux2.4 2001年1月 支持桌面系统和USBLinux2.6 2003年12月 支持更多平台,使用
12、新的调度器,内核可被抢占,模块子系统和文件系统做了大量改进,支持更多的硬件驱动。Linux内核的版本内核的版本内核源码的官方网址:内核源码的官方网址:www.kernel.orgwww.kernel.org 但这里可用的内核版本并不总是适用于所有的Linux支持 的体系结构。实际上,这个站点的内核首先确保的是在Intel x86体系结构上可以正常运行 要取得目标板可用的内核,必须找到专门负责开发相应处理器架构的团队所提供的内核版本。ARMARM体系结构的源码网址:体系结构的源码网址:www.arm.linux.org.uk/developer www.arm.linux.org.uk/deve
13、loperLinux内核的版本内核的版本目前TX2440A开发板上使用的内核版本:2.6.31在内核源码顶层目录下Makefile中查看版本号:VERSION=2 主版本号 PATCHLEVEL=6 主版本号 SUBLEVEL=31 次版本号 EXTRAVERSION=扩展版本号内核源码目录结构分析内核源码目录结构分析archarch 与体系结构相关的代码。对应于每个支持的体系结构,有一个相应的子目录如x86、arm等,每个体系结构子目录下包含几个主要子目录:.boot 启动内核所需的平台特有代码 .kernel 体系结构特有特征(如SMP)的实现 .mm与体系结构相关的内存管理代码 .lib
14、与体系结构相关的通用函数的实现内核源码目录结构分析内核源码目录结构分析driversdrivers 所有设备驱动程序代码,它占整个内核代码量一半以上,每一个子目录对应一类驱动程序。fsfs 文件系统代码,每个支持的文件系统有相应的子目录,如cramfs,yaffs,jffs2等includeinclude包括编译内核所需的大部分头文件,与平台无关的头文件放在include/linux子目录下,平台相关的头文件如include/asm-arm内核源码目录结构分析内核源码目录结构分析init init 内核初始化代码kernel kernel 内核管理核心代码lib lib 库函数代码Mm Mm
15、内存管理代码net net 网络支持代码sound sound 音频设备驱动代码scripts scripts 用于配置内核的脚本文件documentation documentation 内核相关文档内核配置内核配置系统的基本结构系统的基本结构MakefileMakefile:分布在Linux内核源码中的Makefile定义了Linux内核编译的规则;配置工具:配置工具:make config 字符界面 make menuconfig Ncurses图形界面 make xconfig Xwindows图形界面配置文件:配置文件:.config:在配置内核时生成,根据.config来决定使用哪
16、些MakefileMakefile 文件分析文件分析MakefileMakefile的作用:的作用:决定编译哪些文件 怎样编译这些文件 按什么顺序连接这些文件Kconfig文件分析文件分析变量:变量:bool 两种取值:y、n tristate 三种取值:y、n、m string 字符串 hex 十六进制数据 int 十进制数据Kconfig文件分析文件分析menuconfig:menuconfig:用于生成菜单config:config:生成配置选项depend on depend on 依赖关系default default 默认值select select 自动选择source sour
17、ce 读入另一个Kconfig文件help help 帮助信息Linux的启动过程的启动过程第一阶段:arch/arm/kernel/head.Sarch/arm/kernel/head-common.Sarch/arm/mm/proc-arm920.S 检查内核是否支持当前处理器架构和开发板,禁止Cache,使能MMU,设置栈指针,调用start_kernelLinux的启动过程的启动过程第二阶段:init/main.c start_kernel 完成内核初始化全部工作,最后调用rest_init函数启动init进程Linux的启动过程的启动过程内核文件:vmlinux 编译出来的最原始的内
18、核文件,未压缩 zImage 是vmlinux经过gzip压缩后的文件 uImage U-boot专用的映像文件,由bootm命令启动 准备移植准备移植修改修改Makefile: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_defcon
19、fig 选择选择CPUCPU类型类型 SMDK2440编译内核镜像编译内核镜像 make zImage第六部分第六部分 嵌入式系统移植嵌入式系统移植 -Linux内核内核TX-2440A 嵌入式视频教程嵌入式视频教程 出品:天祥出品:天祥电子子网址:网址:第十六讲第十六讲 向内核中加入驱动向内核中加入驱动1.1.支持支持NANDNAND和和yaffs2yaffs2,挂载文件系统,挂载文件系统2.2.基本外围设备的配置基本外围设备的配置 (LCDLCD、触摸屏、网卡、声卡,、触摸屏、网卡、声卡,SDSD卡、卡、USBUSB设备、摄像头)设备、摄像头)3.3.向内核中加入驱动模块向内核中加入驱动模
20、块 (LEDLED、按键、蜂鸣器、按键、蜂鸣器、ADAD、DS18B20DS18B20)第十六讲第十六讲 向内核中加入驱动向内核中加入驱动第七部分第七部分 嵌入式系统移植嵌入式系统移植 -构建根文件系统构建根文件系统TX-2440A 嵌入式视频教程嵌入式视频教程 出品:天祥出品:天祥电子子网址:网址:第十七讲第十七讲第十七讲第十七讲 用用用用busyboxbusybox制作根文件系统制作根文件系统制作根文件系统制作根文件系统1.1.嵌入式文件系统介绍嵌入式文件系统介绍2.2.Linux Linux目录结构详解目录结构详解3.3.配置,编译配置,编译busyboxbusybox4.4.完善根文件
21、系统完善根文件系统5.5.制作制作yaffs2yaffs2镜像镜像第十七讲第十七讲第十七讲第十七讲 用用用用busyboxbusybox制作根文件系统制作根文件系统制作根文件系统制作根文件系统嵌入式文件系统介绍嵌入式文件系统介绍 文件系统是操作系统的重要组成部分,所谓文件系统是指操作系统中负责管理和存储文件信息的软件机构。Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程
22、接口。嵌入式文件系统介绍嵌入式文件系统介绍 Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM,SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。Cramfs Cramfs 文件系统文
23、件系统 CRAMFS文件系统是由Linux Torvalds编写的专门针对闪存设计的只读压缩文件系统。与RAM disk方式不同,CRAMFS文件系统不需要一次性地将文件系统中的所有内容都解压到内存中,而只是在系统需要访问某个数据时,马上计算出该数据在CRAMFS中的位置,将其实时的解压到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。Jffs/Jffs2 Jffs/Jffs2 文件系统文件系统 jffs文件系统是瑞典的Axis通信公司为嵌入式开发的日志文件系统。jffs是针对以闪存为存储介质的嵌入式系统,充分的考虑了闪存的物理局限性,使用了尽可能高效的日志系统 所谓日志文件系统
24、,其工作原理是跟踪记录文件系统的变化,并将变化内容记录入日志,并保存在磁盘分区。写操作中断,系统重启时,会根据日志记录来恢复中断前的写操作 jffs2是RedHat公司基于jffs开发的闪存文件系统,主要针对ECos,也可以用于LINUX。提高了对闪存的利用率,降低了内存的损耗Yaffs/Yaffs2 Yaffs/Yaffs2 文件系统文件系统 YAFFS文件系统是一种和JFFS2类似的Flash文件系统,和JFFS2相比,它减少了一些功能,因此速度更快,占用内存更少。此外YAFFS自带NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD和VFS,
25、直接对文件进行操作。在嵌入式系统设计中,NAND Flash大多使用YAFFS文件系统,而NOR Flash多使用JFFS2文件系统。YAFFS1只支持小页(512b)NAND,YAFFS2兼容YAFFS1,并支持大页(2K或更高)NANDLinux Linux 文件系统目录结构文件系统目录结构/bin/bin 所有用户都可以使用的基本命令/sbin/sbin 只有管理员能够使用的命令(系统命令)/dev/dev 设备文件(对应具体硬件设备)/etc/etc 配置文件/lib/lib 共享库和驱动模块/home/home 用户目录/root/root 根用户(root)目录/var/var l
26、og文件,临时文件/proc/proc 作为proc文件系统的挂载点/mnt/mnt 临时挂载某个文件系统的挂载点/tmp/tmp 临时文件Linux Linux 文件系统目录结构文件系统目录结构/usr/usr 系统中所有的应用程序和文件 /usr/bin 应用程序 /usr/sbin root用户的管理程序 /usr/lib 常用的动态连接库 /usr/local 本地目录 /usr/src Linux内核的源码Busybox 简介简介“嵌入式Linux的瑞士军刀”-Busybox Busybox项目是由Bruce Perens在1996年发起的,目的是协助Debian发行套件建立安装磁盘
27、。从1999年开始,此项目由uClibc的维护者Erik Andersen接手维护。Busybox将众多的UNIX命令集合进一个很小的可执行程序中,为嵌入式系统提供了一个比较完全的工具集网方官站 http:/构建根文件系统构建根文件系统1.创建文件系统目录2.获得busybox源码(busybox-1.15.2)配置、编译3.完善根文件系统4.制作YAFFS2镜像5.开载文件到开发板第七部分第七部分 嵌入式系统移植嵌入式系统移植 -构建根文件系统构建根文件系统TX-2440A 嵌入式视频教程嵌入式视频教程 出品:天祥出品:天祥电子子网址:网址:第十八讲第十八讲 应用程序的移植应用程序的移植1.1.NFSNFS文件系统的挂载文件系统的挂载2.2.移植嵌入式移植嵌入式webweb服务器服务器BoaBoa3.3.移植移植madplaymadplay音乐播放器音乐播放器第十八讲第十八讲 应用程序的移植应用程序的移植Boa Boa 在嵌入式的应用在嵌入式的应用在嵌入式设备上运行一个Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控典型的嵌入式Web服务器如Boa和thttpdBoa是单进程Web服务器,只有在完成一个用户请求后才能响应另一个用户的请求