Thesuccess'sroad开发流程远见品质主要内容:ARM体系结构ARMlinux概述ARMlinux开发平台搭建ARMlinuxbootloader开发ARMlinux内核开发ARMlinux文件系统远见品质ARM体系结构1.ARM处理器结构ARM系统发展趋势ARM体系结构2.ARM编程模型数据类型处理器模式寄存器组织异常存储器映射3.ARM寻址方式远见品质ARM处理器结构ARM系统发展趋势ARM(AdvancedRISCMachines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。具有性能高、成本低和能耗省的特点。ARM当前有6个产品系列:ARM7、ARM9、ARM9E、ARM10、ARM11、SecurCore变种:StrongARM、Xscale远见品质ARM处理器结构ARM体系结构ARM基于精简指令集(RISC)通常具有两套套指令集高性能32位ARM指令集高代码密度16位Thumb指令集(操作码,有些指令不要操作数)Thumb在32位体系结构上实现了16位指令集,提供:比16位更高的性能;(寻址空间,访问速度)比32位更高的代码密度.(处理非数据指令)远见品质ARM处理器结构远见品质数据类型Byte8位Halfword16位Word32位处理器模式user用户,正常程序执行模式FiqFIQ,高速数据传送活通道处理IrqIRQ,通用中断处理Svc管理,操作系统保护模式Abt中止,虚拟存储器或存储器保护Und未定义,硬件协处理器软件仿真Sys系统,特权操作系统任务ARM编程模型远见品质ARM编程模型寄存器组织ARM处理器总共有37个寄存器31个通用寄存器(32位有效)不分组寄存器R0~R7分组寄存器R8~R14程序计数器R157个状态寄存器(12位有效)在所有模式下都可以访问当前程序状态寄存器CPSR(CurrentProgramStatus)远见品质ARM编程模型远见品质ARM编程模型远见品质ARM编程模型异常远见品质ARM编程模型存储器映射地址空间存储器格式大端存储系统小端存储系统非对准存储器访问非对准取指—结果不可预知非对准数据访问—按体系决定,忽略低地址预取指(流水线)存储器映射I/OARM系统完成I/O功能的标准做法是使用存储器映射I/O远见品质ARM编程模型远见品质ARM编程模型远见品质ARM寻址方式寄存器寻址ADDR0,R1,R2;R0R1+R2立即寻址ADDR3,R3#1;R3R3+1寄存器移位寻址ADDR3,R2,R1,LSL#3;R3R2+8xR1寄存器间接寻址LDRR0,[R1];R0[R1]变址寻址LDRR0,[R1,#4];R0[R1+4]远见品质ARM寻址方式多寄存器寻址LDMIAR1,{R0,R2,R5};R0[R1];R2[R1+4];R5[R1+8]堆栈寻址块拷贝寻址LDMIAR0!,{R2-R9}STMIAR1,{R2-R9}相对寻址BLSUBR;转移到SUBR远见品质ARMlinux概述嵌入式Linux的发展嵌入式Linux的组成ARMLinux概况ARMLinuxpatch文件的使用远见品质嵌入式Linux的发展发展历史1992年底,linux1.0问世90年代末,出现了RT-Linux、RTAI、(任务调度10MS满足)QT/Embedded等开源项目2000年,基于嵌入式Linux的网络产品逐渐兴起2001年,一批专业嵌入式Linux解决方案商涌现,Montavista、Lineo、Mizi等2002年,基于嵌入式Linux的PDA面世远见品质嵌入式Linux的发展嵌入式Linux的基本需求实时性能:RT-Linux、RTAI高可靠性:内核不断完善,升级较低功耗:电源管理快速启动:bootloader、kernel体积小巧:Flash、Ram等资源占用移植性强:灵活方便的移植到其他平台远见品质嵌入式Linux的组成嵌入式Linux的三要素:BootLoader系统引导、调试、烧写内核KERNELLinuxkernel+patch根文件系统定制的应用程序远见品质嵌入式Linux的组成Linux系统核心框图Linux系统支持硬件类型字符设备块设备网络设备用户级进程系统调用接口硬件驱动物理硬件进程控制系统进程通信虚拟文件系统EXT2NFS其他网络协议内存管理进程调度远见品质ARMLinux概况Linux支持广泛的ARM体系CPU,目前已有数十种不同厂家的芯片,支持的板子也超过200多种,并且越来越多的厂家在ARM上选择使用Linux系统。ARMLinux的资源丰富,有很多的系统方案提供商可以方便地添加自己的ARM平台ARMLinux的开发也在不断进行中远见品质ARMLinuxpatch文件的使用ARMLinux是以patch的方式发布的,需要在原linux基本内核基础上打patch举例说明:bash$tarzxvflinux-2.4.18.tar.gzbash$cdlinux-2.4.18bash$zcat../patch-2.4.18-rmk7.gz|patch-p1bash$zcat../diff-2.4.18-rmk7-pxa1.gz|patch-p1bash$zcat../diff-2.4.18-rmk7-pxa1-mz4.gz|patch-p1远见品质ARMlinux开发平台搭建跨平台开发模式交叉编译工具链主机端系统配置开发所需工具远见品质跨平台开发模式跨平台开发与我们平时的编程有何不同绝大多数的软件开发都是以native方式进行的即本机(HOST)开发、调试,本机运行的方式嵌入式系统的软件开发采用一种交叉编译调试编译生成的代码不能在开发主机上运行,需要传输到板子上运行远见品质跨平台开发模式交叉编译调试环境建立在宿主机上,对应的开发板叫做目标板。如下图所示:【宿主机】【目标板】远见品质交叉编译工具链交叉编译工具链的组成如何生成自己的交叉编译工具链交叉编译工具链的安装远见品质交叉编译工具链交叉编译工具链的组成Binutils软件包汇编器和连接器GCC软件包GCC软件包包含GNU编译器,其中有C和C++编译器.Glibc软件包Glibc是提供系统调用和基本函数的C库一般说来安装了上述软件包后,一个基本的开发工具链已经建立远见品质交叉编译工具链如何生成自己的交叉编译工具链自己动手制作交叉编译工具链的过程是非常复杂的版本兼容性问题需要考虑编译过程比较漫长,一旦出错需要从头开始参考资料有些时候现有的交叉编译工具链与板子的配合不是很好时,自己制作工具链可以解决远见品质交叉编译工具链下面简单列出各个步骤编译安装Binutils-第一遍非常重要,因为Glibc和GCC会针对可用的连接器和汇编器进行多种测试,以决定打开某些特性编译安装GCC-第一遍这里我们不需要C++编译器,所以我们这里只解压gcc-core包安装Linux头文件包含系统相关信息编译安装Glibc提供系统调用和基本函数的C库编译安装Gcc-第二遍编译安装Binutils-第二遍重新编译GCC和Binutils,连接到新的Glibc上远见品质交叉编译工具链交叉编译工具链的安装现有公认比较好的ARMLINUX交叉编译工具链一共有五组:SharpzaurusPDA版本Handhelds版本Snapgear版本Montavista版本Mizi版本远见品质交叉编译工具链交叉编译工具链的安装以Mizi开发板为例Mizi交叉编译工具以RPM包方式发布,并包含了一些常用的库文件如果选择mizi的2410TK的SDK里的交叉工具链,则gcc版本为2.95.2,如果选择了mizi2.0的则gcc版本为2.95.3rpm-ivh-force--nodeps*.rpm开发所用工具安装到/opt/host/armv4l下远见品质主机端系统配置检测并口是否工作正常;检测串口是否工作正常,运行MINICOM,将串口配置;为115200,8-N-1方式#minicom–s启动NFS服务,设置输出路径;编辑/etc/exports文件,在里面加入如下一句话:/nfsrootxxx.xxx.xxx.xxx(rw)启动TFTP服务,通过运行SETUP命令;取消IPTABLES防火墙的启动运行;#chkconfig–level3iptablesoff上面两个设置也可以通过图形界面,在系统菜单里的服务里面进行选择配置,详细过程这里就不多讲述。远见品质开发所需工具仿真器,如MULTI-ICE;简易JTAG,可以用来烧写Bootloader;交叉串口线,23交叉;交叉网线,主机对联线;USB扁平线,系统烧写;仿真软件,ADS,SDT。远见品质ARMlinuxbootloader开发Bootloader的主要功能ARMlinuxBootloader的启动步骤内核启动参数表几种常见的ARMlinuxBootloader远见品质Bootloader的主要功能基本功能引导操作系统初级调试功能下载与烧写附加功能系统自检系统升级参数设置远见品质ARMlinuxBootloader的启动步骤一个最小需求的bootloader启动步骤配置CPU、内存系统、FLASH及中断装载内核到指定内存区域装载initialRAMdisk到指定内存区域初始化内核启动参数获取ARMLinux机器类型设置正确的寄存器值,并启动内核附加步骤判定ARM系统状态(SLEEP模式)初始化串口、网口、VIDEO等设备远见品质内核启动参数表Bootloader传递的内核参数内容内存容量大小内核启动命令行参数Initramdisk的位置及大小其他必要参数(显示及音频设置、版本信息等)参数表由许多项组成,须遵循以下原则:参数表存贮在RAM的区域不能与kernel及initrd位置冲突,推荐在RAM的前16KiB,通常,在RAM起始的0x100偏移处最前面是中断向量表在内核启动前,将参数表位置把参数表位置固定在RAM的0x100偏移处.参数表不能超越RAM的0x4000偏移处,内核初始化转换表在那里如果不按上述推荐位置,那么参数表位置要字对齐参数表必须以ATAG_CORE项起始,以ATAG_NONE结束参数表至少包含ATAG_MEM项关于参数表信息可查看内核代码include/asm/setup.h远见品质内核启动参数表内核中参数表定义:structtag{structtag_headerhdr;union{structtag_corecore;structtag_mem32mem;structtag_videotextvideotext;structtag_ramdiskramdisk;structtag_initrdinitrd;structtag_serialnrserialnr;structtag_revisionrevision;structtag_videolfbvideolfb;structtag_cmdlinecmdline;}u;};远见品质几种常见的ARMlinuxBootloader远见品质ARMlinux内核开发ARMLinux内核原码树结构ARMLinux内核i