课前实验 Linux 操作系统的安装 C 语言编程环境的设置 TinyOS 开发环境的设置 一 实验目的 1 学会在计算机或虚拟机环境中安装 Linux 操作系统 2 学会在 Linux 下进行 C 语言编程 3 掌握交叉编译开发, 学会在 Linux 下设置 TinyOS 开发环 境, 能够完成基于 NesC 的 TinyOS 应用程序开发
二 Linux 操作系统的安装 14.04.4-desktop-amd64.iso ), 下载地址为 下载和安装 Ubuntu 14.04 Desktop (64-bit) (ubuntu- http://www.ubuntu.com/download/alternativedownloads, 若要用双系统, 请先安装 Windows 再安装 Ubuntu 14.04 到 https://www.virtualbox.org/ 下载虚拟机软件 : VirtualBox-5.1.0-108711-Win.exe Oracle_VM_VirtualBox_Extension_Pack-5.1.0-108711.vboxextpack
三 Linux 下的 C 语言编程 1 编辑 2 编译 各种文本编辑器均可 vi gcc 3 调试 GDB p QT eclipse 等集成开发环境
Linux 文件编辑 vi Linux 古老的 功能强大的全屏幕编辑器启动方式 : --$vi 文件名 打开已有的文件或编辑新文件 --$vi 先编辑, 以后命名存盘
Linux 文件编辑 ( 续 ) Vi 的三种状态命令态 Command mode: 接受编辑命令插入态 Insert mode: 做文字输入, 按 Esc 键可到 Command mode 最后一行态 Last line mode: 将文件写入或离开编辑器, 亦可设定编辑环境, 如寻找字串 列出行号.. 等
Linux 文件编辑 ( 续 ) 命令态 Command mode i : 插入, 从目前光标所在之处插入所输入之文字 a : 增加, 目前光标所在之下一个字开始输入文字 o : 从新的一行行首开始输入文字 x : 删除一个文字 #x : 例, 3x 表删除 3 个文字 dd : 删除光标所在之行
Linux 文件编辑续 Last line mode 在命令态按 : 或 / 即可进入最后一行态 Last line mode Vi 底部出现 : 或 / -- 列出行号 :set nu 取消行号 :set nonumber 多行拷贝 :3,10 co 20 存盘 :w 存盘退出 :wq 强制存盘退出 :wq! -- 寻找字串 /word ( 由首至尾寻找 )
Linux 进程查看 ps 命令 该命令可以确定有哪些进程正在运行和运行的状态 进程 是否结束 进程有没有僵死 哪些进程占用了过多的资源 等等语法格式如下 : ps [ 选项 ] 常用选项说明 : -e 显示所有进程 -f 全格式
Linux 下的 C 语言开发工具 gcc gcc GCC 很多人把 GCC 看成只是一个 C 编译器, 其实 GCC 是 GNU Compiler Collection 的简称, 目前 GCC 可以支持 C,C++, ADA,JAVA,Fortran,PASCAL 等多种高级语言,GCC 主要包括以下一些工具 : cpp( 预处理器 ), gcc(c 编译器 ), g++(c++ 编译器 ) 等编译器. binutils 是一组二进制工具集, 是辅助 GCC 的主要软件, 常用的工具有 :as( 汇编器 ),ld( 链接器 ) 等等
Linux 下的 C 语言开发工具 gcc gcc 是符合 ISO 标准的 C 编译器, 它在需要的时候调用其它组件 ( 预处理器 汇编器 连接器 ) 输入文件的类型和传给 gcc 的参数决定了 gcc 调用哪些组件 gcc 提供了足够的参数, 可以让开发者全面控制代码的生成 源程序 (*.c) 预处理 编译 汇编 链接 可执行文件 预处理器编译器汇编器连接器
Linux 下的 C 语言开发工具 gcc $ gcc [options][filenames] 其中 filenames 为所要编译的程序源文件 当使用 gcc 时,gcc 会完成预处理 编译 汇编和连接 前三步分别生成目标文件, 连接时, 把生成的目标文 件链接成可执行文件 gcc 可以针对支持不同的源程序文 件进行不同处理, 文件格式以文件的后缀来识别
后缀名 所对应的语言 -c 只是编译不链接, 生成目标文件.o gcc c -S 只是编译不汇编, 生成汇编代码.s gcc S -E 只进行预编译, 不做其他处理.i gcc E o -g 在执行程序中包含标准调试信息 -o file 把输出文件输出到 file 里 as a.s o a.o -v 打印编译器版本信息 -I dir 增加头文件的搜索范围 -L dir 增加库文件的搜索范围 -Wall 显示告警信息 -l 指定需要使用的库文件 -fpic/fpic 生成位置无关的目标代码 -shared 产生共享库, 在创建共享库时使用 -DM 相当于在程序中添加 #define M 1( 用于调试 )
Linux 下的 C 语言开发工具 gcc 一般来说, 实际面向 C 程序的 gcc 编译过程主要分 4 个阶段 : 1 预处理阶段, 完成宏定义和 include 文件展开等工作 ; 2 根据编译参数进行不同程度的优化, 编译成汇编代码 ; 3 用汇编器把汇编代码进一步生成目标代码 ; 4 用连接器把生成的目标代码和系统或用户提供的库连接起来, 生成可执行文件 ;
gcc 的基本操作 gcc 编译器可生成汇编代码, 这里介绍两种方式 : 20
21
22
23
24
gcc 的基本操作 gcc 编译器可生成目标代码也有多种方式, 这里介绍三种 : 25
26
27
28
29
gcc 的基本操作 gcc 编译器可生成可执行代码也有多种方式, 这里介绍两种 : 30
31
32
gcc 的基本操作 gcc 可以同时用来编译 C 程序和 C++ 程序 但 gcc 只能编译 C++ 源文件, 而不能自动和 C++ 程序使用的库链接 因此, 通常使用 g++ 完成 C++ 程序的编译和链接. 33
gcc 的基本操作 34 一般希望通过使用编译器达到两个目的 : 检查出源程序的错误 ; 生成速度快, 代码量小的可执行程序 对于一般应用程序和内核程序, 建议加上 -Wall 参数, 可以尽可能发现源程序中隐藏的错误 为了优化代码, 建议加上 - O2 参数, 一般可以优化程序的速度和大小 如要对可执行程序进行调试, 应加上 -g 参数
35
36
37
Gdb 简介 GNU 工具集中的调试器是 gdb, 该程序是一个交互式工具, 工作在字符模式 除 gdb 外,linux 下比较有名的调试器还有 xxgdb, ddd, kgdb, ups 38
gdb 的使用 39 gdb 是功能强大的调试器, 可完成如下调试任务 : 1 设置断点 2 监视程序变量的值 3 程序的单步执行 4 显示 / 修改变量的值 5 显示 / 修改寄存器 6 查看程序的堆栈情况 7 远程调试
gdb 的常用命令 40
gdb 的使用 下面以一个小程序来说明 gdb 的使用流程 41
42
43
四 TinyOS 设置 见 Keshi-TinyOS-GetStarted.pdf