28
嵌嵌嵌嵌 嵌嵌 嵌嵌 designed by 嵌嵌 嵌嵌嵌嵌嵌嵌嵌嵌嵌

嵌入式系统设计 实验一

Embed Size (px)

DESCRIPTION

嵌入式系统设计 实验一. 搭建嵌入式开发环境. designed by 卢坤. 试验一. 目标:在开发板上运行helloworld 嵌入式开发环境 GCC编译器 Makefile bootloader. 一、嵌入式开发环境. 开发工具 交叉编译工具链的安装 gcc binutils glibc 等等 开发环境 宿主机和目标机的互联 互联手段:JTAG,RS232,网线. 二、开发工具--交叉编译环境. 编辑、编译和链接工具. 头文件. 交叉编译环境. 库文件. 帮助文档. 二、开发工具--交叉编译环境. 为什么要交叉编译环境? - PowerPoint PPT Presentation

Citation preview

Page 1: 嵌入式系统设计 实验一

嵌入式系统设计 实验一

designed by 卢坤

搭建嵌入式开发环境

Page 2: 嵌入式系统设计 实验一

试验一

目标:在开发板上运行 helloworld

一.嵌入式开发环境二.GCC编译器三.Makefile

四.bootloader

Page 3: 嵌入式系统设计 实验一

一、嵌入式开发环境

开发工具交叉编译工具链的安装

gcc binutils glibc等等

开发环境宿主机和目标机的互联互联手段: JTAG, RS232,网线

Page 4: 嵌入式系统设计 实验一

二、开发工具 -- 交叉编译环境

交叉编译环境

编辑、编译和链接工具

头文件

库文件

帮助文档

Page 5: 嵌入式系统设计 实验一

二、开发工具 -- 交叉编译环境 为什么要交叉编译环境?

指令集( ARM,X86)

Page 6: 嵌入式系统设计 实验一

交叉编译工具链的安装

开发工具的安装脚本已经写好,只需要执行。./install.sh该命令会自动创建一个名为

/opt/host/armv4l的目录

Page 7: 嵌入式系统设计 实验一

交叉编译工具链

Page 8: 嵌入式系统设计 实验一

PATH 环境变量 PATH环境变量

PATH中保存的是一些目录信息,这些目录中的命令 (可执行文件 )可以直接使用,不需要输入全路径。

查看 PATH环境变量 echo $PATH

PATH环境变量的格式

PATH的作用 使用户使用 linux命令更方便

Page 9: 嵌入式系统设计 实验一

PATH 环境变量 -- 实例

在 /bin下面,有名为 ls的可执行文件。这就是我们平时所用的 ls命令。

为什么平时使用时不需要使用 /bin/ls这样的全路径? 执行 ls命令时,现在 PATH环境变量中指定的目录中的可执行程序,都是可以直接使用的。

Page 10: 嵌入式系统设计 实验一

一、嵌入式开发环境

开发工具交叉编译工具链的安装

gcc binutils glibc等等

开发环境宿主机和目标机的互联互联手段: JTAG, RS232,网线

Page 11: 嵌入式系统设计 实验一

两种互联方式

网络拓扑很简单,连接手段的区别

Page 12: 嵌入式系统设计 实验一

两种连接方式 JTAG

开发板中没有 bootloader时使用 一般情况下可以用来调试程序。 工具:厂家带的 JTAG工具

RS232 开发板中 bootloader可用,或者 开发版中 linux内核是好的,但是网络还没不能用。 工具: minicom(linux)或超级终端 (windows)

网线

Page 13: 嵌入式系统设计 实验一

串口线

Page 14: 嵌入式系统设计 实验一

其他的连接方式 NFS

C/S模型 一般情况下

宿主机:服务器 目标机:客户端

FTP C/S模型 一般情况下

宿主机:服务器 目标机:客户端

等等 本质上,只要能传输文件即可。

Page 15: 嵌入式系统设计 实验一

三、 NFS 服务 NFS服务可以使网络上的 Linux( Uni

x)系统之间共享文件系统。 NFS可以将远程文件系统挂载在本地文件系统下。远程的硬盘、目录和光驱都可以变成本地主机目录树中的一个子目录。挂载成功之后,就可以像使用本机文件系统一样使用远程文件。不只是方便,同时也节省了重复保存文件的空间、传输文件的时间和网络带宽。

Page 16: 嵌入式系统设计 实验一

三、 NFS 服务 NFS配置步骤

I. 前提:两台主机已经连接以能 ping到对方作为标准 PC和开发板使用的是网线直连,所以要把他们的 IP地址配置成一个网段。

确认网口已经启动,通过 ifconfig命令确认防火墙已经关闭

II.安装 NFS服务 (RedHat系统上默认安装 )III.配置 NFS服务

redhat提供了图形界面

Page 17: 嵌入式系统设计 实验一

三、 NFS 原理 linux目录树

在 linux启动之初,整个目录树中只有根文件系统,启动的后期会加载一些其他的文件系统 (devfs,sysfs,nfs等等 )

只有在目录树中的文件或目录才是能够访问的。 所以要通过 mount命令把光盘, U盘等 mount到目录树中。 NFS也是一种文件系统 (网络文件系统 network file system)

Page 18: 嵌入式系统设计 实验一

配置 NFS 服务 主菜单

系统设置服务器设置

NFS服务器 参数含义

目录:指定共享目录主机 IP:选择能访问本地的 IP地址范围读写权限

Page 19: 嵌入式系统设计 实验一

GCC 介绍 -- 一个小例子

文件名: hello.c

#include <stdio.h>

int main()

{

printf("hello world\n");

}

编译:gcc hello.c

运行:./a.out

Page 20: 嵌入式系统设计 实验一

GCC 介绍 -- 交叉编译

文件名: hello.c

#include <stdio.h>

int main()

{

printf("hello world\n");

}

编译:armv4l-unknown-linux-gcc hello.c

拷贝 a.out到开发板然后运行:./a.out

Page 21: 嵌入式系统设计 实验一

动态链接的概念 printf库函数由谁提供?

共享库 编译时是否把 printf的机器码编译到可执行文件中? 动态编译时:否 静态编译时:是

gcc默认是动态编译

Page 22: 嵌入式系统设计 实验一

进一步理解 hello.c

文件名: hello.c

#include <stdio.h>

int main()

{

printf("hello world\n");

}

std标准库:1.printf是库函数,那么编译时使用的库函数,和运行时使用的库函数是同一个吗?

Page 23: 嵌入式系统设计 实验一

Makefile

一个自动化编译工具 Makefile规则

一个简单的例子:

target : prerequisitescommand

first: hello.cgcc hello.c -o a.out

clean:rm a.out

Page 24: 嵌入式系统设计 实验一

Makefile 一个稍微复杂点的例子

pc: hello.cgcc hello.c -o a.out

arm: hello.carmv4l-unknown-linux-gcc hello.c

clean:rm a.out

使用:make pc 编译出来的可执行文件可以再 PC上执行make arm 编译出来的可执行文件能在开发板上执行make clean 删除 a.out可执行文件。

Page 25: 嵌入式系统设计 实验一

bootloader

在操作系统内核运行之前运行的一段小程序。

在嵌入式世界里, bootloader 严重依赖于硬件。一个通用的 bootloader不现实也没必要。

在试验中 bootloader的名字叫 vivi

Page 26: 嵌入式系统设计 实验一

bootloader 原理

I. 系统加电复位所有 CPU同行都从某个预定的地址上取指令。

ARM7TDMI 从 0x00000000 取第一条地址 x86 从 0x7C00 取第一条指令

bootloader的第一条指令放在这个预定地址II. bootloader启动:

初始化内存,串口,网口和其他必要的外设 bootloader启动后才能实现和宿主机之间用串口通讯。

Page 27: 嵌入式系统设计 实验一

通过 bootloader 烧写内核的过程

1.启动开发板2. 进入到 bootloader界面3. 从宿主机下载内核到目标板上4.把内核烧写到目标板上的存储器中

第 3,4步,在我们的试验指导中,实际上是一步操作完成的。

Page 28: 嵌入式系统设计 实验一

Thank You