构建嵌入式Linux开发平台.ppt

上传人:小飞机 文档编号:5061995 上传时间:2023-06-01 格式:PPT 页数:68 大小:338.99KB
返回 下载 相关 举报
构建嵌入式Linux开发平台.ppt_第1页
第1页 / 共68页
构建嵌入式Linux开发平台.ppt_第2页
第2页 / 共68页
构建嵌入式Linux开发平台.ppt_第3页
第3页 / 共68页
构建嵌入式Linux开发平台.ppt_第4页
第4页 / 共68页
构建嵌入式Linux开发平台.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《构建嵌入式Linux开发平台.ppt》由会员分享,可在线阅读,更多相关《构建嵌入式Linux开发平台.ppt(68页珍藏版)》请在三一办公上搜索。

1、第6章 构建嵌入式Linux开发平台,6.1 嵌入式交叉编译环境搭建,交叉编译的含义:就是在一个平台上生成另一个平台上可执行的目标代码。平台的含义:处理器的体系结构;运行的操作系统。说明:操作系统或处理器体系结构不同则是不同的平台,嵌入式交叉编译,在嵌入式系统开发过程中一般把进行交叉编译的主机称为宿主机,也就是普通的通用计算机,而把程序实际的运行环境称为目标机,也就是嵌入式系统环境。编译的过程包括编译、汇编、链接等几个阶段,因此,嵌入式的交叉编译也包括交叉编译、交叉汇编、交叉链接等过程。,嵌入式交叉编译环境模型,交叉编译器的安装过程 1)在/usr/local/目录下新建arm目录,并进入该目

2、录。rootvm-dev local#mkdir armrootvm-dev local#cd arm 2)使用cp命令,把拷贝到新建立的/usr/local/arm目录下。3)解压交叉编译器安装文件()。rootvm-dev arm#说明:上述命令执行完毕,在当前目录下将会增加文件夹,这就是交叉编译器所在目录。,4)增加编译器路径。rootvm-dev arm#vi/etc/profile.#Path manipulationIf id-u=0;thenpathmunge/sbinpathmunge/usr/sbinpathmunge/usr/local/sbinFi 说明:编译路径保存在/

3、etc/的profile文件中,因此打开的是profile文件,并在路径字段添加上,示例中的下划线语句。也可以使用环境变量添加编译器路径。,6.2 U-Boot移植,系统启动程序Bootloader是在操作系统内核运行之前运行的一段程序,类似于通用计算机中的BIOS程序。通过这段程序,可以完成硬件设备的初始化,并建立内存空间的映射图的功能,从而将系统的软硬件环境带到一个合适的状态,为最终调用操作系统内核做好准备,通常称之为引导系统。,6.2.1 引导系统简介,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环

4、境带到一个合适的状态,为调用操作系统内核准备好正确的环境。大多数引导系统都分为stage1和stage2两个阶段。Stage1:依赖于处理器体系结构和板级初始化的代码通常都放在stage1阶段,用汇编语言实现;Stage2:则通常用C语言来实现,这样可以实现更复杂的功能,同时具有更好的可读性和可移植性。,引导系统stage1实现的功能(按先后顺序):硬件设备初始化;为加载引导系统的stage2准备RAM空间;拷贝引导系统的stage2程序到RAM空间中;设置好堆栈;跳转到stage2的C程序入口点。,引导系统stage2实现的功能(按先后顺序):初始化本阶段要用到的硬件设备;检测系统内存映射(

5、memory map);将操作系统内核映像和根文件系统映像从Flash读到RAM空间中;为操作系统内核设置启动参数;调用操作系统内核。,由于引导系统是完全依赖于硬件实现的,不同类别的处理器有不同的汇编语言,不同的开发平台有不同的硬件资源。因此,在嵌入式世界里建立一个通用的Bootloader几乎是不可能的。尽管如此,仍然可以对Bootloader归纳出一些通用的概念来指导特定的Bootloader设计与实现。,Bootloader共性分析,1)CPU体系结构:每一种体系结构的处理器都大量面世。2)Bootloader的安装媒介:处理器的复位地址大多统一。3)Bootloader的启动过程分为单

6、阶段和多阶段两种。4)Bootloader 的操作模式。启动加载模式下载模式5)Bootloader的烧写加载:统一使用JTAG接口。,6.2.2 U-Boot概述,U-Boot(Universal Boot Loader)是遵循GPL条款的开放源码项目。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序。U-Boot支持多种类别的嵌入式操作系统的引导。U-Boot支持多种系列的处理器体系结构。U-Boot的前身是PPCBOOT。经由德国DENX软件工程中心的Wolfgang Denk发起并完善起来。,1U-B

7、oot的主要特点开放源码;支持多种嵌入式操作系统内核:如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS;支持多个处理器系列:如PowerPC、ARM、x86、MIPS、XScale;较高的可靠性和稳定性;高度灵活的功能设置,适合U-Boot调试、不同操作系统引导要求、产品发布等;丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;较为丰富的开发调试文档与强大的网络技术支持。,2U-Boot主要目录结构 board:目标板相关文件,主要包含SDRAM、FLASH驱动等;common:独立于处理器体系

8、结构的通用代码;cpu:CPU相关文件;driver:通用设备驱动,如CFI FLASH驱动;doc:U-Boot的说明文档;examples:可在U-Boot下运行的示例程序;lib_xxx:处理器体系相关的库文件;net:与网络功能相关的文件目录;post:上电自检文件目录;rtc:RTC驱动程序;tools:用于创建U-Boot S-RECORD和BIN镜像文件的工具;,3U-Boot主要功能 系统引导:支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统。基本辅助功能:强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统;支持目标板环境参数多种存储方式,如FLASH

9、、NVRAM、EEPROM;CRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好。设备驱动:串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持。上电自检功能:SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号。,6.2.3 U-Boot移植过程,1获得U-Boot源码 直接从U-Boot的官方网站下载的源码包,笔者下载的源码包版本为。将源码包拷贝到自己的工作目录下,并解压源码包。rootvm-dev 2410-s#rootvm-dev 2410-s#说明:解压后,当前目录下产生子目录,可

10、进入该目录查看相关信息。,2建立板级支撑包,在board目录下,每一块开发板都有一个对应的目录;需要为自己的开发板建立一个目录;rootvm-dev u-boot-1.3.2#cd board/rootvm-dev board#mkdir up2410rootvm-dev board#cp./smdk2410/*./up2410/rootvm-dev board#cd.说明:为了体现开发板所使用的S3C2410处理器,这里取名up2410,并创建相应的文件。/smdk2410/是U-Boot专门针对S3C2410处理器设计。,U-Boot源码中,专门为S3C2410处理器的开发板建立有一个目录

11、,名为smdk2410,并提供相关的文件支撑。U-Boot为每个开发板都提供有一个独立的配置文件,为smdk2410提供的的配置文件为include/configs/smdk2410.h。用户自己建立的开发板up2410的配置文件可以直接从smdk2410开发板的配置文件修改得到。拷贝操作如下:rootvm-dev u-boot-1.3.2#cp./include/configs/smdk2410.h./include/configs/up2410.h,修改Makefile,使得可以配置自己的开发板:rootvm-dev u-boot-1.3.2#vi Makefile 在Makefile中找

12、到smdk2400的配置项,具体内容如下:smdk2400_config:unconfig$(MKCONFIG)$(:_config=)arm arm920t smdk2400 NULL s3c24x0 在smdk2400配置项下添加用户的开发板配置,添加如下:up2410_config:unconfig$(MKCONFIG)$(:_config=)arm arm920t up2410 NULL s3c24x0这样,用户自己的板级支持包就建好了。,3添加代码,支持从Nand Flash启动 S3C2410开发板通常都没有Nor Flash,只能从Nand Flash启动。而U-Boot默认不支

13、持从Nand Flash启动,需要自己添加代码来实现从Nand Flash启动。,1)修改start.S文件,位于cpu/arm920t/目录下的start.S文件是开发板上电后运行的第一段代码。在start.s文件中添加支持从Nand Flash启动的代码。把Nand Flash里面的代码拷贝到SDRAM中去,而U-Boot本身并没有实现该功能,因此,还需要编写一段代码以实现程序拷贝。,start.S文件实现对nand flash的支持以及使用的同时,要确保nand flash能正常工作。相当于nand flash驱动功能正常。start.S对nand flash操作包括初始化和数据读取。添

14、加nand flash初始化和数据读取功能代码。并形成文件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)网卡

15、配置(U-Boot自带对CS8900网卡芯片的支持)2)添加命令便于调试及使用 3)修改环境变量主要包括启动延时、串口波特率、MAC地址、TCP/IP属性等。4)修改命令提示符目标机开机后的提示信息。5)修改默认下载地址需要跟开发板硬件的SDRAM地址保持一致。6)修改环境变量在Flash中的存储地址,4开发板硬件配置,5修改网卡驱动 开发板厂商通常都在配套光盘里提供有网卡芯片的驱动程序,如Magic ARM2410开发板配套光盘里提供有dm9000 x.c和dm9000 x.h两个文件,把这两个文件拷贝到u-boot源代码目录下的drivers/net下,替换掉U-Boot自身的网卡驱动文件

16、。,6编译U-Boot,首先make开发板的配置文件:rootvm-dev u-boot-1.3.2#make up2410_configConfiguring for up2410 board.rootvm-dev u-boot-1.3.2#然后运行make命令进行U-Boot编译:rootvm-dev u-boot-1.3.2#make 编译完成后,会在U-Boot的源代码目录下生成u-boot.bin文件。这个文件就是最终生成的bootloader目标文件。,7加载U-Boot 用JTAG加载器连接宿主机和目标机,并接通目标机电源。将编译得到的u-boot.bin和烧写器文件sjf241

17、0-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系统提供的超级终端软件;设置串口连接参数。包括波特率、每帧数据位数、奇偶校验方式、停止位数、数据流控制方式

18、等;启动开发板。,U-Boot 1.3.2(Dec 5 2010-10:35:38)DRAM:64 MBFlash:512 kBNAND:64 MB*Warning-bad CRC or NAND,using default environment In:serialOut:serialErr:serialHit any key to stop autoboot:0 xch-2410-S#,如果加载成功,会在超级终端界面上出现如下内容:,说明:产生警告原因,主要是因为没有把环境变量写入Flash。,6.3 Linux内核移植,6.3.1 概述,嵌入式系统启动过程,典型的Flash存储空间分配

19、操作系统作为一组管理软硬件资源的程序,它能够管理内存、决定系统资源分配、控制输入/输出设备以及管理网络文件等,是系统软硬件之间的纽带,其典型存储地址结构如图所示。,6.3.2 Linux内核移植过程,1获得Linux源码(http:/)将得到的Linux源码拷贝到对应的工作目录下,解压。rootvm-dev 2410-s#tar-jxvf说明:这里以为示例,内核解压后,当前目录下自动新建一个名为的子目录,可进入该目录查看Linux目录结构。rootvm-dev 2410-s#cdrootvm-dev linux-2.6.24.4#ls,2修改Makefile文件 Magic ARM2410的主

20、处理器是S3C2410X,属于ARM920T,使用交叉编译器arm-linux-,需修改内核的底层Makefile文件。rootvm-dev linux-2.6.24.4#vi Makefile 修改前:ARCH?=$(SUBARCH)CROSS_COMPILE?=修改后:ARCH?=armCROSS_COMPILE?=arm-linux-,3拷贝.config配置文件 由于Magic ARM2410的配置和SMDK2410开发板的类似,可以使用SMDK2410的配置文件s3c2410_defconfig,只需要把该文件拷贝成内核目录下的.config文件即可:rootvm-dev linux

21、-2.6.24.4#cp./arch/arm/configs/s3c2410_defconfig./.config,4修改Nand Flash分区 Linux内核移植过程所使用的是SMDK2410开发板原型,而SMDK2410开发板的NAND Flash和Magic ARM2410开发板不一样,需修改。用vi打开arch/arm/plat-s3c24xx/common-smdk.c文件;找到关于Nand Flash分区的结构体struct mtd_partition smdk_default_nand_partrootvm-dev linux-2.6.24.4#vi./arch/arm/pla

22、t-s3c24xx/common-smdk.c,static struct mtd_partition smdk_default_nand_part=0=.name=Bootloader,.size=0 x80000,.offset=0,1=.name=Linux Kernel,.offset=0 x80000,.size=SZ_2M,2=.name=Root File System,.offset=0 x280000,.size=SZ_4M,3=.name=User Space,.offset=0 x680000,.size=0 x3980000,;,结构体struct mtd_partit

23、ion smdk_default_nand_part,5添加LCD驱动支持 Magic ARM2410开发平台上配置有640480的TFT液晶屏,需要在Linux内核部分添加对LCD的支持。LCD驱动支持添加在/arch/arm/mach-s3c2410/目录下的mach-smdk2410.c文件中;用vi编辑器打开该文件,并进行修改。rootvm-dev linux-2.6.24.4#vi./arch/arm/mach-s3c2410/mach-smdk2410.c,修改mach-smdk2410.c文件,添加包含LCD的数据结构的头文件:#include#include 添加与LCD点阵结

24、构相关的程序代码:找到smdk2410_init函数,在函数的末尾添加对LCD的数据进行设置。,6添加网卡驱动支持 Magic ARM2410开发板上配置了DM9000A网卡,Linux内核已经有网卡驱动的实现代码,需要添加相应的配置。配置方法:在“./arch/arm/mach-s3c2410/mach-smdk2410.c”文件中添加相应的内容(地址、中断号、网卡数据等)。注意:具体地址、中断号要与实际的开发板对应。把网卡数据加入smdk2410_devices数组,,7添加YAFFS文件系统支持 YAFFS(Yet Another Flash Filing System)是第一个专门为N

25、and Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备。从免费获得源码文件。将YAFFS的源代码拷贝到的同级目录下,解压该源码包,获得YAFFS源码。进入yaffs2目录,运行./patch-ker.sh给Linux内核打上补丁。这样,Linux内核就可以支持YAFFS文件系统了。,8编译和配置Linux内核 在内核源代码的根目录下运行make menuconfig命令,SystemType子项界面,编译内核:配置完成后,一个精简的Linux就已经设置完成。可在Linux内核源文件的根目录下使用make命令编译内核。rootvm-dev linux-2.6.24.4#make 生

26、成内核镜像:编译完成后,在内核的/boot/arch/arm目录下生成内核的镜像文件zImage。,9加载Linux内核 使用交叉网线连接好宿主机和目标机;设置宿主机的TCP/IP属性(必须保证宿主机与目标机的IP地址处于同一网段)编译U-Boot时,在源代码tools目录下生成有一个mkimage可执行文件,用该文件可对刚编译Linux内核生成的zImage进行处理,以供U-Boot启动。注意:mkimage与zImage需要处于同一目录下。使用tftp下载内核映像文件。,6.4 根文件系统移植,根文件系统一直以来都是所有类Unix操作系统的一个重要组成部分,也可以认为是嵌入式Linux系统

27、区别于其他一些传统嵌入式操作系统的重要特征,它给Linux带来了许多强大和灵活的功能,同时也带来了一些复杂性。,6.4.1 根文件系统概述,简单的说,根文件系统就是一种目录结构。根文件系统就是要包括Linux启动时所必须的目录和关键性的文件。Linux启动时需要有init目录下的相关文件;在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件;根文件系统中还包括了许多的应用程序bin目录等;任何包括这些Linux系统启动所必须的文件都可以称为根文件系统。,1Linux根文件系统目录结构,Linux的根文件系统以树型结构组织,包含内核和系统管理所需要的各种文件和程序;一般说来根

28、目录”/”下的顶层目录都有一些比较固定的命名和用途;linux根文件系统下一些主要目录的功用如下:/bin:二进制可执行命令;/dev:设备特殊文件;/etc:系统管理和配置文件;/etc/rc.d:启动的配置文件和脚本;/home:用户主目录的基点,比如用户user的主目录就是/home/user;,/lib:标准程序设计库,又叫动态链接共享库;/sbin:系统管理命令,存放系统管理员使用的管理程序;/tmp:公用的临时文件存储点;/root:系统管理员的主目录;/mnt:系统提供让用户临时挂载其他的文件系统;/lost+found:这个目录平时是空的,用于存放系统非正常关机而留下“无家可归

29、”的文件;/proc:虚拟的目录,是系统内存的映射;/var:某些大文件的溢出区,比如各种服务的日志文件;/usr:最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中主要包含:/usr/bin:众多的应用程序;/usr/sbin:超级用户的一些管理程序。,2Linux根文件系统引导过程BusyBox的init进程依次进行以下工作:为init设置信号处理进程;初始化控制台;剖析inittab、/etc/inittab文件;执行系统初始化的命令行。执行所有会导致init暂停的inittab命令;(告诉init必须等到相应的进程完成之后才能继续执行。)执行所有仅执行一次的inittab命令。

30、(仅执行相应的进程一次,而且不会等待它完成。)一旦完成以上工作,init进程便会循环执行以下工作:1执行所有终止时必须重新启动的inittab命令;2执行所有终止时必须重新启动但启动前必须先询问过用户的inittab命令。,1获得BusyBox源码 从网站http:/下载。解压源码,得到完整的BusyBox源码包.rootvm-dev 2410-s#tar-vxjf rootvm-dev 2410-s#cd rootvm-dev busybox-1.12.2#ls说明:BusyBox解压后,当前目录下自动新建一个名为的子目录,可进入该目录查看BusyBox目录结构。,6.4.2 BusyBox

31、根文件系统移植过程,2修改Makefile文件 与Linux内核移植原因相同,需要修改Makefile中的ARCH和CROSS_COMPILE与本机的路径一致。打开Makefile文件。rootvm-dev busybox-1.12.2#vi Makefile 将Makefile文件的目标平台改为arm,交叉编译器前缀改为arm-linux-,修改如下:CROSS_COMPILE?=arm-linux-.ARCH?=arm,3配置和编译BusyBox 运行make munuconfig命令,进入BusyBox配置界面,将BusyBox编译成静态库。,添加转义字符识别,选择shell,其他选项请

32、用户根据自己的使用情况进行配置。配置好BusyBox选项后,即可对BusyBox进行编译。BusyBox编译过程:rootvm-dev busybox-1.12.2#makerootvm-dev busybox-1.12.2#make install,4创建根文件系统目录结构,使用shell脚本创建根文件系统的目录结构,并在想要建立根文件系统的地方运行此脚本。创建shell脚本文件:rootvm-dev busybox-1.12.2#vi build_fs.sh,#!/bin/shecho makeing rootdirmkdir rootfscd rootfsecho makeing dir

33、:bin dev etc lib proc sbin sys usrmkdir bin dev etc lib proc sbin sys usr#8 dirsmkdir usr/bin usr/lib usr/sbin lib/modules#Dont use mknod,unless you run this Script as mknod-m 600 dev/console c 5 1mknod-m 666 dev/null c 1 3echo making dir:mnt tmp varmkdir mnt tmp varchmod 1777 tmpmkdir mnt/etc mnt/j

34、iffs2 mnt/yaffs mnt/data mnt/tempmkdir var/lib var/lock var/log var/run var/tmpchmod 1777 var/tmpecho making dir:home root bootmkdir home root bootecho done,build_fs.sh程序清单,5拷贝etc目录 把busybox源码目录下的etc的内容拷贝到buildfs.sh新建的/rootfs/etc目录下。具体操作过程:rootvm-dev busybox-1.12.2#cd rootfsrootvm-dev rootfs#lsbin b

35、oot dev etc home lib mnt proc root sbin sys tmp usr varrootvm-dev rootfs#cd etcrootvm-dev etc#bootfloppy/etc/*./rootvm-dev etc#lsfstab init.d inittab profile,6修改profile文件/etc/profile是用户登录时的环境变量设置;根据建立的根文件系统设置相应的环境变量;使用vi编辑器编辑并保存profile文件。rootvm-dev etc#vi profile说明:profile文件的具体内容与用户建立的根文件系统相关。,7修改初始

36、化文件inittab和fstab inittab initilize table(定义了开机之后的run-level以及其他有关启动的设定)fstab filesystem table(让系统可以自动挂载的配置文件)1)根据目标板硬件平台修改inittab文件2)根据目标板硬件平台和用途修改fstab文件,8修改初始化脚本文件init.d/rcS脚本文件init.d/rcS的主要功能:为启动环境设置必要的环境变量 设置目标机名称 挂载“虚拟”的文件系统 创建设备节点 设置系统时间 设置启动提示信息 根据系统配置及硬件情况修改该文件。,9用户和组文件创建1)创建passwd文件rootvm-de

37、v etc#vi passwd passwd一共由7个字段组成,由6个冒号将其隔开。其含义分别为:用户名;是否有加密(x表示有,不填表示无);用户ID;组ID;注释字段;登录目录;所使用的shell程序。示例清单如下:root:x:0:0:root:/root:/bin/ash2)创建group文件rootvm-dev etc#vi group group共由4个字段组成。含义分别为:组名;是否有加密口令;组ID;示例清单如下:root:x:0:,10创建mdev.conf文件 用touch命令创建一个空的mdev.conf文件,用于挂载根文件系统。rootvm-dev etc#touch m

38、dev.conf,11复制安装目录_install,把第三步“make install”命令创建的_install文件全部拷贝到第四步创建的rootfs目录下。rootvm-dev etc#cd.rootvm-dev rootfs#cp-rfv/root/2410-s/busybox-1.12.2/_install/*./说明:busybox默认安装目录中的文件全部复制到rootfs后。会发现多了linuxrc-bin/busybox文件,这是挂载文件系统需要执行的。注意:如果编译busybox时选择动态库方式编译,则需要查看生成的busybox使用哪些动态库,然后把它们拷贝到rootfs/l

39、ib目录下。,12制作cramfs文件系统 使用mkcramfs命令制作cramfs根文件系统 操作过程:rootvm-dev rootfs#cd.rootvm-dev busybox-1.12.2#mkcramfs rootfs/root.cramfs,13根文件系统加载,加载过程如下:使用交叉网线连接好宿主机和目标机;设置宿主机的IP地址,要求宿主机与目标机的IP地址为同一网段。把制作好的root.cramfs文件系统文件拷贝到宿主机的tftpboot目录下;打开目标机电源,和超级终端软件,在启动提示符下使用tftp命令从宿主机下载root.cramfs文件。并写入目标板相应的Nand Flash地址单元。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号