




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、arm linux 系统开发流程,1、开发目标硬件系统 2、建立交叉编译工具 3、开发bootloader 4、移植linux内核 5、开发一个文件系统 6、开发相关硬件的驱动程序 7、开发上层应用程序 8、烧写bootloader、内核、文件系统等。,嵌入式交叉编译环境简介,交叉编译就是在一个平台上生成另一个平台上的可执行代码。 这里说的平台分别指的是主机平台Host和目标平台Target。 就我们在ARM平台上移植Linux来说,Host是一台一般的PC机,它通过串口或网络接口与Target通信;Target是arm-linux平台(这里说的arm指的是平台所使用的CPU是ARM9处理器,
2、linux指的是运行的操作系统是Linux)。 我们在Host上开发程序,并在这个平台上运行交叉编译器Cross Complier,编译我们的程序,而由Cross Complier生成的程序将在Target上运行,需要交叉编译的原因: 首先,在项目的起始阶段,目标平台尚未建立,因此需要做交叉编译,以生成我们所需要的Boot loader以及kernel(因为Bootloader和kernel的源码需要经过交叉编译后才可以在目标平台上运行); 其次,当目标平台能启动之后,由于目标平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。,如何建立交叉编译工具链,构建交叉工具链通常有以下3
3、种方法: 1分步骤手工编译 分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。 2通过脚本编译 通过crosstool脚本工具来实现一次编译生成交叉编译工具链 3直接获取交叉编译工具链 直接通过网上下载已经制作好的交叉编译工具链。,ftp:.uk ftp: ftp:,Linux内核代码 linux-2.6.10.tar.gz glibc库 glibc-2.3.2.tar.gz 工具程序 binutils-2.15.tar.bz2 内核线程包 glibc-linuxthreads-2.3.2.tar.gz 编译器
4、 gcc-3.3.6.tar.gz,配置开发板PXA270嵌入式系统的宿主机交叉编译环境,arm-linux.tar.gz 提供ARM系统开发的交叉编译器 /usr/local/arm-linux/bin vi /etc/profile pathmunge /usr/local/arm-linux/bin,cp arm-linux.tar.gz /usr/local cd /usr/local tar -xzf arm-linux.tar.gz,目标机与主机的通讯方式,1、minicom,minicom 很像Windows 下面的超级终端,我們用minicom 作为目标板的终端显示视窗;通过串
5、口控制目标板,2、从菜单中选择Serial Port Setup,配置minicom,1、#minicom -s,3、“A”以设置“Serial Device”。如果使用串口1,则输入/dev/ttyS0。如果使用串口2,则输入/dev/ttyS1。,4、“E”键进入设置“bps/par/Bits”(波特率)界面,再按“I”以设置波特率为115200,设置被保存到“/etc/minirc.dfl”,目标板上电后,目标板的启动过程显示在minicom; CTR+A+szmodern,2 NFS服务,NFS服务可以使网络上的同为Linux或Unix系统主机共享文件系统。 NFS可以将远程文件系统载
6、入在本地文件系统下。远程的硬盘、目录和光驱都可以变成本地主机目录树中的一个子目录。载入后与处理自己的文件系统一样使用即可。不只方便,也节省了重复保存文件的空间、传输文件的时间及网络带宽。,NFS特点,NFS系统也是使用C/S体系结构,就是有服务器端与客户端 服务器端提供共享的文件系统,必须把文件系统输出(export)出去 客户端则要把文件系统载入到自己的系统下 使用NFS,需要在服务器端设置输出,在客户端设置载入,NFS服务器端配置 (1)关闭防火墙 (2)配置共享目录 -客户端主机IP范围 (3)主机IP (4)启动NFS服务,NFS客户端 (1)设置客户端IP地址 (2)挂载共享目录,m
7、ount -t nfs 主机ip:共享目录 挂载点,注意事项:关闭防火墙,主机与客户端在同一ip段,具体配置步骤,服务器端 1)关闭防火墙,具体配置步骤,2)配置NFS服务器,具体配置步骤,2-1)设置共享目 录和主机范围,具体配置步骤,2-2)设置其他选项,具体配置步骤,2-3)设置其他选项,具体配置步骤,3)设置NFS 服务器的IP,具体配置步骤,4)启动NFS服务,具体配置步骤,客户端 1)配置ip,具体配置步骤,2)挂载NFS,/etc/exports,它的基本格式是 Directory host (权限选项、用户映像、) Directory:表示打算共享的目录名称; Host:共享这
8、个目录的主机名称; 权限选项:定义安全选项;,权限选项 1)ro:只读,只允许客户机挂载这个文件系统为只读模式。 2)rw:明确指定共享目录为读/写权限。 用户映像 来限定某些用户对NFS共享文件的使用权限 no_root_squash: 其他安全选项 1)Insecure :以非安全端口的方式访问,即默认用户端口是1024或者更高,而NFS服务器默认的安全的服务器端口应该是低于1024的。 2)Sync:根据请求进行同步。,例: vi /etc/exports /home/ls 0 (rw, insecure, no_root_squash) 表示共享的目录为/home
9、/ls,允许访问的客户机地址为0的主机,权限为可读可写(rw),非安全方式访问(insecure),让客户机的根用户在服务器上拥有根权限。,例: vi /etc/exports /home/ls *(rw) 表示共享的目录为/home/ls,允许任意主机访问,权限可读可写,Bootloader是什么? Bootloader,为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。 Bootloader的位置:通常固化在硬件上的某个固态存储设备上,加电后自启动。基于 ARM处理器核的CPU在复位时通常都从地址 0 x00000000取它的第一条指令。在这
10、个地址处安排的就是Bootloader。 Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映像表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。,3 Bootloader,几种发布的Bootloader,Bootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootloader。不过Bootloader的发展也趋于支持多种体系结构,如现在比较成熟的vivi、RedBoot和U-Boot等。,ftp:/ftp.denx.de/pub/u-boot/,Bootloader操作模式,大多数Bo
11、otloader都有两种不同的操作模式:“启动加载”模式和“下载”模式。其区别对于开发人员才有意义。 从最终用户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载模式的区别。,1、启动加载(Bootloading)模式 即Bootloader从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。 启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。,2、下载(Downloading)模式 下载方式:在这种模式下,目标机上的Bootloader将通过串口
12、连接或网络连接等通信手段从主机下载文件。 下载内容及存储:主要是下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH 类固态存储设备中。,下载模式应用场合:Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用到这种工作模式。 用户应用接口:工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。 如在U-BOOT下,将出现“#”提示符;在vivi 下出现“vivi”提示符。,下载(Downloading)模式示例,
13、Bootloader启动过程,大多数 Boot Loader 启动都分为 stage1 和 stage2 两大部分。 依赖于处理器体系结构和板级初始化的代码,通常都放在 stage1 中,用汇编语言实现 而 stage2 则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。,Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序): 硬件设备初始化。 为加载 Boot Loader 的 stage2 准备 RAM 空间。 拷贝 Boot Loader 的 stage2 到 RAM 空间中。 设置好堆栈 跳转到 stage2 的 C 入口点
14、。 Stage1主要工作是硬件初始化,并准备第二阶段的C语言运行环境,关闭处理器内部指令/数据cache等 设置CPU的速度和时钟频率 RAM初始化 初始化led等,为了获得更快的执行速度,通常把 阶段2 的代码加载到 RAM 空间中来执行。 准备RAM空间考虑的因素:阶段2代码大小、堆栈、页大小(4KB的倍数)、安排位置等。,Boot Loader 的 stage2 通常包括以下步骤(以执行的先后顺序): 初始化本阶段要使用到的硬件设备。 检测系统内存映射(memory map)。 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。 为内核设置启动参数。 调用内核
15、。 stage2 的代码通常用 C 语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。与普通 C 语言应用程序不同的是,在编译和链接 boot loader 这样的程序时,我们不能使用 glibc 库中的任何支持函数。 Stage2的主要目的是运行Linux内核,在此之前需要完成硬件和内存初始化工作。,Bootloader调用Linux kernel的方法是直接跳转到内核的第一条指令处。在跳转时必须满足下列条件: 1)、CPU寄存器的设置:R0为0;R1为机器类型ID;R2为启动参数,标记列表在RAM中的起始基地址。 2)、CPU模式: CPU必须设置为SVC模式,必须禁止中
16、断(IRQs和FIQs)。 3)、 MMU 和 Cache的设置:MMU 必须关闭;指令 Cache 可以打开也可以关闭; 数据 Cache 必须关闭。,vivi Bootloader源码分析,vivi是韩国Mizi公司开发的Bootloader,适用于ARM9处理器。 vivi有两种工作模式,在启动时可以选择。在vivi启动时,通过串行口发出如下信息: Press Return to start the Linux now, any other key for vivi 按回车键启动Linux OS,按其它键进入vivi命令接口模式,可以使用vivi提供的命令进行一些操作。,vivi源代码目
17、录结构,vivi源代码包含的目录有:arch、Documentation、drivers、init、include、lib、scripts、test、util等10目录,共300多个文件。各个目录内容如下: 1、arch(architecture)目录 它下面的文件为与CPU硬件相关的初始化代码,此目录包含了所用vivi支持的CPU。一般只包含S3C2410 x的文件。 2、Documentation目录 其下文件为vivi使用指南。 3、drivers目录 存放的为MTD(memory technology device内存技术设备) (数据存储媒质)设备读写控制文件和串行口操作文件,对串行
18、口支持xmodem和ymodem协议。 4、include目录 存放所有的头文件,包括S3C2410微处理器的和S3C2410开发板的头文件。,5、init目录 该目录下是系统初始化文件main.c、version.c,后者是vivi版本信息,main.c为vivi整个初始化的结构。 6、lib目录 该目录下是公共应用及接口代码,如时钟功能文件time.c,堆栈初始化文件heap.c等文件。 7、scripts目录 该目录存放的是系统配置需要的脚本文件,如menuconfig和configue文件。 8、CVS目录 所有的目录下面都有一个CVS目录,存放的是该目录的路径和它的子目录。,vivi
19、源代码文件与功能结构,vivi源代码文件: 1、vivi/arch/s3c2410/head.s 2、一段过渡,实现循环调用,main返回后重新复位 LDRSP,DW_STACK_START MOVFP,#0 MOVA2,#0 BLMAIN MOVPC,#FLASH_BASE ; main返回后重新复位 3、vivi/init/main.c,vivi Bootloader接口命令,viviload flash kernel x viviboot nand 0 x80000 flash erase 0 x80000 0 xc0000,vivi源码的修改移植,vivi的移植方法步骤: 对vivi进
20、行修改移植 对vivi进行配置 对vivi进行编译 下载、运行vivi,1、修改vivi/Makefile (1)修改交叉编译库和头文件 1)修改编译器路径CROSS_COMPILE= 2)修改编译器库文件路径:ARM_GCC_LIBS= 3)增加交叉编译时头文件的搜索路径: LIBC_INCLUDE_DIR= (2)Linux内核包含文件 LINUX_INCLUDE_DIR=,编译vivi用到的交叉编译工具版本是cross-2.95.3.tar.bz2,2、修改Flash的分区信息(vivi/arch/s3c2410/smdk.c),#ifdef CONFIG_S3C2410_AMD_BOO
21、T mtd_partition_t default_mtd_partitions = name:vivi, offset:0, size:0 x00020000, flag:0 , name:param, offset:0 x00020000, size:0 x00010000, flag:0 , name:kernel, offset:0 x00030000, size:0 x000C0000, flag:0 , name:root, offset:0 x00100000, size:0 x00140000, flag:MF_BONFS ; #endif,二、对vivi进行配置 运行vivi
22、配置程序menuconfig:makemenuconfig 启动对vivi配置的主菜单,根据自己的目标系统逐项进行设置,设置完后退出保存即可。,三、对vivi进行编译 在vivi目录下执行以下命令: makeclean make make clean是清除以前编译时生成的所有目标文件和临时文件。 如果没有错误,编译后会生成vivi的目标文件vivi.bin。,四、对vivi进行下载 利用JTAG口将vivi下载到目标板的 flash空间(0 x00000-0 x20000)。 然后对目标板加电,使vivi启动运行,观察运行情况。,Jflash-s3c2410 /t=,其中,Flash 类型有如
23、下选项: 1:SMDK2410:K9S3208 4MB 2:SMDK2410:K9S6408 8MB 3:SMDK2410:K9S2808 16MB 4:SMDK2410:K9S5608 32MB 5:SMDK2410:K9S1208 64MB 6:SMDK2410:AM29LV800BB,在烧写过程中,有3次提示,要求用户选择: (1)在“Select the function to test :”后面输入“ 0 ”,表示对型号为K9S1208的Flash芯片进行烧写,烧写类型为程序。 (2)在“Input target block number:” 后面输入“ 0 ”,表示从偏移地址0处开
24、始烧写。,经过数分钟的烧写之后,将vivi烧写到Flash之中。再次出现提示:,在“Select the function to test :” 后面输入“ 2 ”,退出vivi烧写。并关闭开发板电源,拔下JTAG连接线。 在完成vivi烧写之后,使用串口线,通过串口将宿主机与开发板连接起来。,在宿主机上打开超级终端minicom窗口,再按下“Backspace”(回格)键不放,接通开发板电源。这时我们通过超级终端minicom窗口可以观察到嵌入式系统开发板上Linux系统的启动过程,并在出现提示符“ vivi ”时停住(如果Linux系统有启动,但没有 “ vivi ” 提示符出现,则需要再
25、一次按住键盘上的“Backspace” (回格)键不放,对开发板“Reset”重启)。进入vivi提示状态,(1)对Flash分区 在“vivi ”提示符下用命令“bon part ”对Flash进行分区: Bon part 0 192k 1M 其中,从地址0处开始为vivi,地址192k(192*1024196608)处开始为内核,地址1M(1*1024*10241048576)处开始为文件系统。,由于对Flash进行了重新分区,原来烧写在Flash中从地址0处开始的引导加载程序vivi亦被擦除了,因此,这时不能掉电,也不能重启开发板,必须紧接着重新烧写vivi程序。 (2)vivi loa
26、d flash vivi x 当出现: Ready for downloading using xmodem. Waiting. 然后,按下Ctrl+A+S ,弹出一个对话框,(3)烧写内核 当vivi烧写完毕后,需要重新启动开发板,使刚才的分区及引导程序生效。 重新启动开发板时,操作过程如前所述,按下“Backspace”(回格)键不放的同时,重新启动开发板系统,出现提示符“ vivi ”。 vivi load flash kernel x 4)烧写文件系统 紧接着上面的操作,在提示符“vivi”下,输入命令: vivi load flash root x,Linux内核,Linux内核主要
27、功能 进程管理 内存管理 文件管理 设备管理 网络管理,Linux内核结构,Linux配置与编译,编译内核的步骤: 下载内核源码 修改内核目录树根下的的Makefile,指明交叉编译器 设置环境变量 配置内核产生.config文件 输入内核配置命令(make menuconfig),进行内核选项的选择 编译内核 下载Linux内核,1、确定处理器类型 Linux内核源代码支持20多种微处理器类型,在编译之前要先确定微处理器类型。,ARCH:= arm,CROSS_COMPILE=arm-linux-,Linux2.4 内核还没有包含S3C2410处理器 Linux2.6内核已经支持。,2、确定
28、配置方法 内核支持 4种不同的配置方法,每种方法是读取一个根目录下隐藏的配置文件 “ .config ” 。这 4 种方式如下。 make config:基于文本的最为传统的配置界面,不推荐使用。 make menuconfig:基于文本选单的配置界面,字符终端下推荐使用。 make xconfig:基于图形窗口模式的配置界面,Xwindow 下推荐使用。 make oldconfig:自动读入“.config”配置文件,并且只要求用户设定前次没有设定过的选项。,【例】以 make menuconfig 为例进行S3C2410系统的内裁剪核配置。,# make menuconfig 弹出内核裁剪配置窗口,“System Type -”子项的界面,在完成配置之后,就可以保存退出,如图 所示。,内核编译 make zImage arch/$(ARCH)/boot”目录中。,文件系统,文件系统是嵌入式Linux系统必备的一个组成部分,是系统文件和应用文件存储的地方。,文件目录,/bin目录下需要包含常用的用户命令,如sh等。 /sbin目录要包含所有系统命令,如reboot等 。 /etc目录下是系统配置文件。 /boot目录下是内核映像 /dev目录含有系统所有的特殊设备文件 /lib目录包含系统所有的库
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南信阳市人力资源和社会保障局发布就业见习岗位考试笔试试题(含答案)
- 2025年国家信息中心面向应届毕业生招聘工作人员16人笔试历年典型考题及考点剖析附带答案详解
- 动物课件教学反思
- 如何批量下载教学课件
- 三年级下册教学通知课件
- 数字交互活动方案
- 旅投公司年会策划方案
- 【九江】2025年江西九江市濂溪区司法局补录司法所辅助岗位12人笔试历年典型考题及考点剖析附带答案详解
- 春节值守水务活动方案
- 春节公司产品策划方案
- 污水处理厂风险清单
- 创伤严重程度(ISS)评分表(完整版)
- 港珠澳大桥工程可行性研报告地勘报告
- GB/T 20740-2006胶粘剂取样
- 第二季度护理红黄警示及核心制度试题含答案
- 第13章-临床即时检验仪器与技术课件
- 2022小说精读鲁迅小说《药》附阅读试题答案解析
- DB33-T1244-2021《建设工程移动式起重机安全检查技术规程》
- GB∕T 1001.1-2021 标称电压高于1000V的架空线路绝缘子 第1部分:交流系统用瓷或玻璃绝缘子元件 定义、试验方法和判定准则
- 品牌中国产业联盟简介ppt课件
- 肝素钠生产工艺综述
评论
0/150
提交评论