1 / 28

嵌入式系统设计 实验一

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

Download Presentation

嵌入式系统设计 实验一

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 嵌入式系统设计 实验一 搭建嵌入式开发环境 designed by 卢坤

  2. 试验一 目标:在开发板上运行helloworld • 嵌入式开发环境 • GCC编译器 • Makefile • bootloader

  3. 一、嵌入式开发环境 • 开发工具 • 交叉编译工具链的安装 • gcc • binutils • glibc • 等等 • 开发环境 • 宿主机和目标机的互联 • 互联手段:JTAG,RS232,网线

  4. 二、开发工具--交叉编译环境 编辑、编译和链接工具 头文件 交叉编译环境 库文件 帮助文档

  5. 二、开发工具--交叉编译环境 • 为什么要交叉编译环境? • 指令集(ARM,X86)

  6. 交叉编译工具链的安装 开发工具的安装脚本已经写好,只需要执行。 ./install.sh 该命令会自动创建一个名为 /opt/host/armv4l的目录

  7. 交叉编译工具链

  8. PATH环境变量 • PATH环境变量 • PATH中保存的是一些目录信息,这些目录中的命令(可执行文件)可以直接使用,不需要输入全路径。 • 查看PATH环境变量 • echo $PATH • PATH环境变量的格式 • PATH的作用 • 使用户使用linux命令更方便

  9. PATH环境变量--实例 • 在/bin下面,有名为ls的可执行文件。这就是我们平时所用的ls命令。 • 为什么平时使用时不需要使用/bin/ls这样的全路径? • 执行ls命令时,现在PATH环境变量中指定的目录中的可执行程序,都是可以直接使用的。

  10. 一、嵌入式开发环境 • 开发工具 • 交叉编译工具链的安装 • gcc • binutils • glibc • 等等 • 开发环境 • 宿主机和目标机的互联 • 互联手段:JTAG,RS232,网线

  11. 两种互联方式 网络拓扑很简单,连接手段的区别

  12. 两种连接方式 • JTAG • 开发板中没有bootloader时使用 • 一般情况下可以用来调试程序。 • 工具:厂家带的JTAG工具 • RS232 • 开发板中bootloader可用,或者 • 开发版中linux内核是好的,但是网络还没不能用。 • 工具:minicom(linux)或超级终端(windows) • 网线

  13. 串口线

  14. 其他的连接方式 • NFS • C/S模型 • 一般情况下 • 宿主机:服务器 • 目标机:客户端 • FTP • C/S模型 • 一般情况下 • 宿主机:服务器 • 目标机:客户端 • 等等 • 本质上,只要能传输文件即可。

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

  16. 三、NFS服务 • NFS配置步骤 • 前提:两台主机已经连接 • 以能ping到对方作为标准 • PC和开发板使用的是网线直连,所以要把他们的IP地址配置成一个网段。 • 确认网口已经启动,通过ifconfig命令 • 确认防火墙已经关闭 • 安装NFS服务(RedHat系统上默认安装) • 配置NFS服务 • redhat提供了图形界面

  17. 三、NFS原理 • linux目录树 • 在linux启动之初,整个目录树中只有根文件系统,启动的后期会加载一些其他的文件系统(devfs,sysfs,nfs等等) • 只有在目录树中的文件或目录才是能够访问的。 • 所以要通过mount命令把光盘,U盘等mount到目录树中。 • NFS也是一种文件系统(网络文件系统network file system)

  18. 配置NFS服务 • 主菜单 • 系统设置 • 服务器设置 • NFS服务器 • 参数含义 • 目录:指定共享目录 • 主机IP:选择能访问本地的IP地址范围 • 读写权限

  19. GCC介绍--一个小例子 文件名:hello.c #include <stdio.h> int main() { printf("hello world\n"); } 编译: gcc hello.c 运行: ./a.out

  20. GCC介绍--交叉编译 文件名:hello.c #include <stdio.h> int main() { printf("hello world\n"); } 编译: armv4l-unknown-linux-gcc hello.c 拷贝a.out到开发板 然后运行: ./a.out

  21. 动态链接的概念 • printf库函数由谁提供? • 共享库 • 编译时是否把printf的机器码编译到可执行文件中? • 动态编译时:否 • 静态编译时:是 • gcc默认是动态编译

  22. 进一步理解hello.c 文件名:hello.c #include <stdio.h> int main() { printf("hello world\n"); } std标准库: 1.printf是库函数,那么编译时使用的库函数,和运行时使用的库函数是同一个吗?

  23. Makefile • 一个自动化编译工具 • Makefile规则 • 一个简单的例子: target : prerequisites command first: hello.c gcc hello.c -o a.out clean: rm a.out

  24. Makefile 一个稍微复杂点的例子 pc: hello.c gcc hello.c -o a.out arm: hello.c armv4l-unknown-linux-gcc hello.c clean: rm a.out 使用: make pc 编译出来的可执行文件可以再PC上执行 make arm 编译出来的可执行文件能在开发板上执行 make clean 删除a.out可执行文件。

  25. bootloader • 在操作系统内核运行之前运行的一段小程序。 • 在嵌入式世界里,bootloader严重依赖于硬件。一个通用的bootloader不现实也没必要。 • 在试验中bootloader的名字叫vivi

  26. bootloader原理 • 系统加电复位 • 所有CPU同行都从某个预定的地址上取指令。 • ARM7TDMI从0x00000000取第一条地址 • x86从0x7C00取第一条指令 • bootloader的第一条指令放在这个预定地址 • bootloader启动: • 初始化内存,串口,网口和其他必要的外设 • bootloader启动后才能实现和宿主机之间用串口通讯。

  27. 通过bootloader烧写内核的过程 • 启动开发板 • 进入到bootloader界面 • 从宿主机下载内核到目标板上 • 把内核烧写到目标板上的存储器中 • 第3,4步,在我们的试验指导中,实际上是一步操作完成的。

  28. Thank You

More Related