收藏 分享(赏)

嵌入式linux开发环境的搭建.ppt

上传人:无敌 文档编号:347225 上传时间:2018-03-31 格式:PPT 页数:53 大小:769.50KB
下载 相关 举报
嵌入式linux开发环境的搭建.ppt_第1页
第1页 / 共53页
嵌入式linux开发环境的搭建.ppt_第2页
第2页 / 共53页
嵌入式linux开发环境的搭建.ppt_第3页
第3页 / 共53页
嵌入式linux开发环境的搭建.ppt_第4页
第4页 / 共53页
嵌入式linux开发环境的搭建.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、嵌入式应用程序设计第四章 嵌入式Linux开发环境的搭建,2,4.1 搭建嵌入式Linux交叉开发环境4.2 Bootloader4.3 Linux内核与移植4.4 嵌入式文件系统的构建4.5 小结4.6 思考与练习,本章课程:,3,4.1 构建嵌入式Linux开发环境,构建一个Linux系统,需仔细考虑下面几点。(1)选择嵌入式Linux发行版。(2)熟悉开发环境和工具。(3)熟悉Linux内核。(4)熟悉目标板引导方式。(5)熟悉Linux根文件系统。(6)理解Linux内存模型。(7)理解Linux调度机制和进程线程编程。,4,4.1.1 嵌入式交叉编译环境搭建,交叉编译环境的意义如何搭

2、建嵌入式交叉编译环境嵌入式交叉编译环境包括哪些内容,5,4.1.2 主机交叉开发环境的配置,配置控制台程序Windows操作系统中有超级终端(HyperTerminal)工具;Linux/Unix操作系统有minicom(使用“minicom”命令启动该软件)等工具,超级终端配置,minicom配置,6,4.1.2 主机交叉开发环境的配置,配置TFTP服务 tftp是一个传输文件的简单协议,它基于UDP协议而实现。此协议设计的时候是进行小文件传输的 tftp传输中有3种模式。netascii:8位的ASCII码形式。octet:8位源数据类型。mail:这种模式已经不再支持,它将返回的数据直接

3、返回给用户,而不是保存为文件。,7,4.1.2 主机交叉开发环境的配置,Linux下TFTP服务配置 tftp是一个传输文件的简单协议,它基于UDP协议而实现。此协议设计的时候是进行小文件传输的 vim /etc/xinetd.d/tftpservice tftp socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4,

4、8,4.1.2 主机交叉开发环境的配置,启动TFTP服务$ /etc/init.d/xinetd start 关闭TFTP服务 $ /etc/init.d/xinetd stop重启TFTP服务 $ /etc/init.d/xinetd restart查看TFTP状态$ netstat au | grep tftpProto Recv-Q Send-Q Local Address Foreign Address Stateudp 0 0 *:tftp *:*,9,4.1.2 主机交叉开发环境的配置,Windows下TFTP服务配置在Windows下配置tftp服务需要安装使用tftp服务器软件

5、,常见的可使用tftpd32,网上有很多下载该软件的地方,读者可以自行下载。要注意的是,该软件是tftp的服务器端,而目标板上则是tftp的客户端,10,4.1.2 主机交叉开发环境的配置,NFS文件系统NFS为Network FileSystem的简称,最早是由Sun公司提出发展起来的,其目的就是让不同的机器、不同的操作系统之间可以彼此共享文件。NFS的使用分为服务器端和客户端,其中服务器端提供要共享的文件,而客户端则通过挂载“mount”这一动作来实现对共享文件的访问操作。在嵌入式开发中,通常NFS服务端在宿主机上运行,而客户端在目标板上运行。NFS服务器端是通过读入它的配置文件“/etc

6、/ exports”来决定所共享的文件目录的.,11,4.1.2 主机交叉开发环境的配置,NFS配置配置文件:/etc/exports配置文件每一行格式: 共享的目录 客户端主机名称或IP(参数1,参数2)NFS配置文件常用参数:NFS配置文件举例:cat /etc/exports/home/david/project *(rw,sync,no_root_squash),12,4.1.2 主机交叉开发环境的配置,NFS服务启动设置NFS服务在每次系统引导时自动开启:# /sbin/chkconfig nfs on (在Ubuntu中应该输入 /sbin/chkconfig nfs-kernel

7、-server on),13,Bootloader是什么? Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映像表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。,4.2 Bootloader,14,4.2.1 Bootloader的种类,15,4.2.2 U-Boot的编译和使用,什么是U-Boot 最早,DENX软件工程中心的Wolfgang Denk基于8xxrom的源码创建了PPCBOOT工程,并且不断添加处理器的支持。后来,Sysgo Gmbh把PPCBOOT移植到ARM平台上,创建了ARMBOOT工程。

8、然后以PPCBOOT工程和ARMBOOT工程为基础,创建了U-Boot工程。,16,4.2.2 U-Boot的编译和使用,U-Boot编译 U-Boot目录可以分为三类:与处理器体系结构或者开发板硬件直接相关。一些通用的函数或驱动。U-Boot的应用程序、工具或者文件。,17,4.2.2 U-Boot的编译和使用,U-Boot目录结构,18,4.2.2 U-Boot的编译和使用,U-Boot的源码是通过gcc和Makefile组织编译的。顶层目录下的Makefile首先可以设置开发板的定义,然后递归地调用各级子目录下的Makefile,最后把编译过的程序链接成U-Boot映像。顶层目录下的 M

9、akefile它负责u-boot整体配置编译。每一种开发板在Makefile都需要有板子配置的定义。配置u-boot: make smdk2410_config编译: make,19,4.2.2 U-Boot的编译和使用,U-Boot生成镜像文件,20,4.2.2 U-Boot的编译和使用,U-Boot工具,21,4.2.2 U-Boot的编译和使用,U-Boot命令介绍bootm命令 bootm命令可以引导启动存储在内存中的程序映像。这些内存包括RAM和可以永久保存的Flash。第1个参数addr是程序映像的地址,这个程序映像必须转换成U-Boot的格式。第2个参数对于引导Linux内核有用

10、,通常作为U-Boot格式的RAMDISK映像存储地址;也可以是传递给Linux内核的参数(默认情况下传递bootargs环境变量给内核)。,22,4.2.2 U-Boot的编译和使用,U-Boot命令介绍bootp命令bootp命令通过bootp请求,要求DHCP服务器分配IP地址,然后通过TFTP协议下载指定的文件到内存。第1个参数是下载文件存放的内存地址。第2个参数是要下载的文件名称,这个文件应该在开发主机上准备好。,23,4.2.2 U-Boot的编译和使用,U-Boot命令介绍cmp命令cmp命令可以比较两块内存中的内容。.b以字节为单位;.w以字为单位;.l以长字为单位。注意:cm

11、p.b中间不能保留空格,需要连续输入命令。第1个参数addr1是第一块内存的起始地址。第2个参数addr2是第二块内存的起始地址。第3个参数count是要比较的数目,单位是字节、字或者长字。,24,4.2.2 U-Boot的编译和使用,U-Boot命令介绍cp命令cp命令可以在内存中复制数据块,包括对Flash的读写操作。第1个参数source是要复制的数据块起始地址。第2个参数target是数据块要复制到的地址。这个地址如果在Flash中,那么会直接调用写Flash的函数操作。所以U-Boot写Flash就使用这个命令,当然需要先把对应Flash区域擦干净。第3个参数count是要复制的数目

12、,根据cp.b、cp.w、cp.l分别以字节、字、长字为单位。,25,4.2.2 U-Boot的编译和使用,U-Boot命令介绍crc32命令crc32命令可以计算存储数据的校验和。第1个参数address是需要校验的数据起始地址。第2个参数count是要校验的数据字节数。第3个参数addr用来指定保存结果的地址。,26,4.2.2 U-Boot的编译和使用,U-Boot命令介绍echo命令echo命令回显参数,27,4.2.2 U-Boot的编译和使用,U-Boot命令介绍erse命令erase命令可以擦除Flash。参数必须指定Flash擦除的范围。按照起始地址和结束地址,start必须是

13、擦除块的起始地址;end必须是擦除末尾块的结束地址。这种方式最常用。,28,4.2.2 U-Boot的编译和使用,U-Boot命令介绍nand命令nand命令可以通过不同的参数实现对Nand Flash的擦除、读、写操作。常见的几种命令的含义如下(具体格式见help nand)。nand erase:擦除Nand Flash。nand read:读取Nand Flash,遇到flash坏块时会出错。nand read.jffs2:读取Nand Flash,遇到坏块时会把坏块部分对应的内容填充为0xff,不会出错。nand read.jffs2s:读取Nand Flash,遇到坏块时自动跳过(建

14、议使用)。nand write:写Nand Flash,nand write命令遇到flash坏块时会出错。nand write.jffs2:写Nand Flash,可自动跳过坏块(建议使用)。,29,4.2.2 U-Boot的编译和使用,U-Boot命令介绍flinfo命令nand命令可以通过不同的参数实现对Nand Flash的擦除、读、写flinfo命令打印全部Flash组的信息,也可以只打印其中某个组。一般嵌入式系统的Flash只有一个组。,30,4.2.2 U-Boot的编译和使用,U-Boot命令介绍go命令go命令可以执行应用程序。第1个参数是要执行程序的入口地址。第2个可选参数

15、是传递给程序的参数,可以不用。,31,4.2.2 U-Boot的编译和使用,U-Boot命令介绍iminfo命令iminfo可以打印程序映像的开头信息,包含了映像内容的校验(序列号、头和校验和)。第1个参数指定映像的起始地址。可选的参数是指定更多的映像地址。,32,4.2.2 U-Boot的编译和使用,U-Boot命令介绍loadb命令loadb命令可以通过串口线下载二进制格式文件。,33,4.2.2 U-Boot的编译和使用,U-Boot命令介绍loads命令loads命令可以通过串口线下载S-Record格式文件。,34,4.2.2 U-Boot的编译和使用,U-Boot命令介绍mw命令m

16、w命令可以按照字节、字、长字写内存,.b、.w、.l的用法与cp命令相同。第1个参数address是要写的内存地址。第2个参数value是要写的值。第3个可选参数count是要写单位值的数目。,35,4.2.2 U-Boot的编译和使用,U-Boot命令介绍nfs命令nfs命令可以使用NFS网络协议通过网络启动映像。,36,4.2.2 U-Boot的编译和使用,U-Boot命令介绍printenv命令printenv命令打印环境变量。可以打印全部环境变量,也可以只打印参数中列出的环境变量。,37,4.2.2 U-Boot的编译和使用,U-Boot命令介绍protect命令protect命令是对

17、Flash写保护的操作,可以使能和解除写保护。第1个参数on代表使能写保护;off代表解除写保护。第2、第3个参数是指定Flash写保护操作范围,跟擦除的方式相同。,38,4.2.2 U-Boot的编译和使用,U-Boot命令介绍rarpboot命令rarpboot命令可以使用TFTP协议通过网络启动映像。也就是把指定的文件下载到指定地址,然后执行。第1个参数是映像文件下载到的内存地址。第2个参数是要下载执行的镜像文件。,39,4.2.2 U-Boot的编译和使用,U-Boot命令介绍run命令run命令可以执行环境变量中的命令,后面参数可以跟几个环境变量名。,40,4.2.2 U-Boot的

18、编译和使用,U-Boot命令介绍setenv命令setenv命令可以设置环境变量。第1个参数是环境变量的名称。第2个参数是要设置的值,如果没有第2个参数,表示删除这个环境变量。,41,4.2.2 U-Boot的编译和使用,U-Boot命令介绍sleep命令tftpboot命令可以使用TFTP协议通过网络下载文件。按照二进制文件格式下载。另外使用这个命令,必须配置好相关的环境变量。例如serverip和ipaddr。第1个参数loadAddress是下载到的内存地址。第2个参数是要下载的文件名称,必须放在TFTP服务器相应的目录下。,42,4.2.3 U-Boot移植,在顶层Makefile中为

19、开发板添加新的配置选项创建一个新目录存放开发板相关的代码,并且添加新文件 为开发板添加新的配置文件 配置开发板 编译U-Boot 添加驱动或者功能选项 调试U-Boot源代码,直到U-Boot在开发板上能够正常启动,43,4.3 Linux内核与移植,Linux内核是Linux操作系统的核心,也是整个Linux功能体现。它是用C语言编写,符合POSIX标准。Linux最早是由芬兰黑客Linus Torvalds为尝试在英特尔X86架构上提供自由免费的类Unix操作系统而开发的。 Linux内核主要功能进程管理内存管理文件管理设备管理网络管理,44,4.3.1 Linux内核结构,45,4.3.

20、1 Linux内核结构,46,4.3.2 Linux配置与编译,编译内核之前要先配置。为了正确、合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面4个考虑。 尺寸小节省内存减少漏洞动态加载模块,47,4.3.2 Linux配置与编译,编译内核的步骤:下载内核源码 修改内核目录树根下的的Makefile,指明交叉编译器 设置环境变量 配置内核产生.config文件 输入内核配置命令(make menuconfig),进行内核选项的选择 编译内核下载Linux内核,48,4.3.3Linux内核移植,所谓移植就是把程序代码从一种运行环境转移到另外一种运行环境。对于内核移植来

21、说,主要是从一种硬件平台转移到另外一种硬件平台上运行。添加开发板平台支持选项移植开发板驱动程序,49,4.4 嵌入式文件系统的构建,在嵌入式Linux中,busybox是构造文件系统最常用的软件工具包,它被非常形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的Linux命令和工具结合到了一个单独的可执行程序(busybox)中。虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中已经足够了。,49,50,4.4 嵌入式文件系统的构建,使用busybox构建文件根文件系统的步骤(1)首先从busybox网站下载bus

22、ybox源码(本实例采用的busybox-1.0.0)并解压,接下来,根据实际需要进行busybox的配置。(2)编译并安装busybox(3)通过创建系统所需要的目录和文件来完善一下文件系统的内容。(4)需要创建一些重要文件。(5)创建cramfs文件系统映像文件。,50,51,4.5 小结,本章主要讲解搭建嵌入式Linux开发的环境的整个流程。本章首先讲解如何搭建嵌入式交叉开发环境,包括交叉编译环境、各种服务程序和应用程序的安装、配置和使用。为了驱动目标板,我们必须要先做好Bootloader、操作系统内核以及文件系统。本章介绍Bootloader的概念以及U-Boot的编译和移植的方法;

23、接下来讲解Linux内核的相关知识,主要讲解了内核编译和移植的方法;本章最后还介绍了Linux根文件系统的构建。因为嵌入式系统的特点,它的开发与PC机上开发相比有很多复杂的前提工作,这正是嵌入式开发的难点之一,希望读者熟悉开发环境搭建的每个环节。,52,4.6 思考与练习,在读者的主机上搭建交叉编译环境,并用交叉编译器编译hello.c程序。移植与编译FS2410目标板平台的U-Boot、内核。用Busybox或者已做好的文件系统创建(或重建)新的文件系统,而且把编译好的hello程序复制到该文件系统中去。在主机上安装和配置minicom、tftp、nfs等应用程序和服务器,并通过这些软件进行嵌入式系统的应用程序开发。,53,53,

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

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报