350 likes | 583 Views
实验 6 Linux 应用程序开发. 1 实验目的. 通过实验了解 VI 编辑器的使用; 了解 Linux 下应用的开发过程. 2. 实验内容. Linux 开发流程介绍 编写 Hello World 程序 在开发板上运行开发程序 终端输出程序实验. 3 . 实验设备. 硬件: UP-TECHPXA270-S 嵌入式开发板、 PC 机 Pentumn500 以上 , 硬盘 10G 以上。 软件: PC 机操作系统 REDHAT LINUX 9.0 + MINICOM + ARM-LINUX 开发环境. 4. 实验原理.
E N D
1 实验目的 • 通过实验了解VI编辑器的使用; • 了解Linux下应用的开发过程
2.实验内容 • Linux开发流程介绍 • 编写Hello World程序 • 在开发板上运行开发程序 • 终端输出程序实验
3 .实验设备 • 硬件:UP-TECHPXA270-S嵌入式开发板、PC机Pentumn500以上, 硬盘10G以上。 • 软件:PC机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX开发环境
4.实验原理 • 嵌入式系统的软件开发采用一种交叉编译调试的方式。交叉编译调试环境建立在宿主机(即一台PC 机)上,对应的开发板叫做目标板。 • 运行Linux 的PC【宿主机】开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行。)然后把可执行文件下载到目标机上运行。
5.实验步骤 1.启动VMware和Linux操作系统,设置NFS服务,建立共享文件夹。 2. 在指定的共享文件夹下建立01_hello文件夹,使用VI编辑器编写实验源程序hello.c和make文件。 3.在本机环境下使用gcc编译源程序,生成可在宿主机上运行的目标程序hello1。 4.使用make命令交叉编译源程序,生成可在开发平台上运行的目标程序hello2。 5. 使用挂接命令Mount将共享文件夹挂接到开发板,运行Hello2。 6.重复2~5编写终端输出程序star.c和make文件,并分别在宿主机和开发板上运行验证程序。
Linux开发工具 • GCC-GNU Compiler Collection,包含一系列针对不同语言和不同目标平台,以及可运行在不同主机系统上的编译器 • Make • GDB-负责程序调试 • Glibc-标准C库,数学库,以及板级程序库 • 集成开发环境
GCC-程序编译 • GCC支持的前端 • GCC支持的语言包括C(gcc),C++(g++), Fortran(g77), Java(GCJ)和Ada(GNAT) • GCC支持的后端 • 后端的扩展机制使得GCC能够支持多种类型的体系结构,从RISC,CISC到DSP都有支持。 • GCC支持的主机系统 • 它可以运行在几乎所有操作系统的平台上(GNU/Linux)DOS Windows
GCC程序编译 • hello.c #include <stdio.h>int main(void){printf ("Hello world, Linux programming!\n");return 0;}然后执行下面的命令编译和运行这段程序: # gcc hello.c -o hello# ./helloHello world, Linux programming!
GCC选项 • -g:在可执行文件中输出调试信息,通常是为调试器gdb所用 • -On:代码优化,n随着系统的不同而不同 • -Idir:指定头文件搜索目录 • gcc foo.c –I/home/chen/include –o foo • -Ldir:指定在目录中需要搜索的库(动态库.so • 和静态库.a) • gcc foo.c –L/home/chen/lib –lfoo –o foo • -static:链接时使用静态链接 • -elf2flt:将可执行文件头转换为flt平板格式 • -c:只预处理,编译和汇编生产obj文件
vi介绍 vi vi编辑器是一个用于创建和修改文本文件的交互式编辑器。使用vi编辑器时所有的文本编辑都放在一个缓冲区中,可以把所作的修改写到磁盘也可以放弃所做的修改。
vi的模式 • Command Mode (命令模式) • 这是执行vi后的缺省模式 • 此时键盘输入当作命令 • 命令有大小写之区分 • Input Mode (插入模式) • 使用 a、i、o、c、r、s进入插入模式 • 用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上 • 按下 ESC 键即可回到 Command Mode
vi的模式 • Last Mode (末行模式) • 在Command Line 按下 : 即可进入该模式 • 用来进行保存文件、打开文档或环境的设定 • 命令有大小写之分。
vi的进入和内容输入 (命令模式) • 进入: vi 文件名 • 输入文件内容 (进入插入模式) • 新增 (append) a 从光标所在位置后面开始新增内容 A 从光标所在行最后面的地方开始新增内容。 • 插入 (insert) i 从光标所在位置前面开始插入内容 I 从光标所在行的第一个非空白字符前面开始插入资料。 • 开始 (open) o 在光标所在行下新增一行并进入输入模式。 O 在光标所在行上新增一行并进入输入模式。
命令模式 • 1、光标的移动 h 左移一个字符 l 右移一个字符j 下移一行 k 上移一行w,W 跳至后一个字的开头(W忽略标点)b,B 跳至前一个字的开头(B忽略标点)e 移动到后一个字的末尾 ^ 至本行第一个非空字符 $ 至行尾 0 至行首H 移动到当前窗口的第一列 M 移动到当前窗口的中间列 L 移动到视窗的最后一列) 光标所在位置到下个句子的第一个字母 ( 光标所在位置到该句子的第一个字母 } 光标所在位置到该段落的最后一个字母 { 光标所在位置到该段落的第一个字母
命令模式 1、光标的移动(续) nH 将光标移到屏幕的第 n 行 nL 将光标移到屏幕的倒数第 n 行 CTRL-d 向下半页 CTRL-f 向下一页 CTRL-u 向上半页 CTRL-b 向上一页 n- 减号移动到上一行的第一个非空白字符,前面加上数字可以指定移动到以 上 n 行 n+ 加号移动到下一行的第一个非空白字符,前面加上数字可以指定移动到以下 n 行
命令模式 2、删除 x 删除光标所在字符 X 删除光标前面的字符 s 删除光标所在字符,并进入输入模式 S 删除光标所在的行,并进入输入模式 dd 删除光标所在的行 D 从光标位置开始删除到行尾 d与光标移动命令的组合
命令模式 3、修改 r 修改光标所在字符,r 后接着要修改的字符。如,rc 可以用字符“c ”替换光标所指向的当前字符 R 进入替换状态,新增内容会覆盖原先内容,直到按 [ESC] 回到命令模式下为止 cc 修改光标所在行 C 修改从光标位置到该行末尾的内容 c 与光标移动命令的组合
命令模式 4、复制和移动 yy 复制当前行到内存缓冲区 nyy 复制 n 行内容到内存缓冲区 y与光标移动的组合 p 将缓冲区的内容粘贴到光标的后面 P 将缓冲区的内容粘贴到光标的前面 另:在末行模式下实现移动 :n1,n2 m n3 : 把 n1到n2 行内容搬到第 n3 行后
命令模式 5、搜索字符串 /pattern 移至下一个包含pattern的行 ?pattern 移至上一个包含pattern的行 / 往下重复查找 ? 往上重复查找 n 在同一方向重复查找 N 在相反方向重复查找 /pattern/+n 移至下一个pattern所在行后的第n行 ?pattern?-n 移至上一个Pattern所在行前的第n行 6、其他 u 撤销前一条命令的结果
末行模式 1、文件的保存和退出 :w 保存 :q 退出 :w! 强制保存 :q! 强制退出 :wq 保存退出 :wq! 强制保存退出
末行模式 2、字符串的替换 :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1 :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1 :.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1 :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1 :g/str1/s//str2/g 功能同上
末行模式 其他: : n 将光标移到第 n 行 编辑多个文件 vi file1 file2 … :n 编辑下一个文件 :e filename 编辑指定文件
gcc介绍 GCC由来: GCC由GNU创始人Richard Stallman首创,是GNU的标志产品。 GCC内容: GNU软件包括C编译器GCC,C++编译器G++,汇编器AS,链接器LD,二进制转换工具(OBJCOPY,OBJDUMP),调试工具(GDB,GDBSERVER,KGDB) 和基于不同硬件平台的开发库。在GNU GCC支持下用户可以使用流行的C/C++语言开发应用程序,满足生成高效率运行代码、易掌握的编程语言的用户需求 GCC应用: 运行于Linux操作系统下的自由软件GNU gcc编译器,不仅可以编译Linux操作系统下运行的应用程序,还可以编译Linux内核本身,甚至可以作交叉编译,编译运行于其它CPU上的程序。所以,在进行嵌入式系统应用程序开发时,这些工具得到了日益广泛的应用
编写HelloWorld应用程序 在Linex 环境下使用mkdir new 创建一个目录,cd new进入当前目录; 在Linux 环境下使用VIM编辑器,在当前目录下新建一个hello.c # vim hello.c 键入如下内容: #include <stdio.h> int main() { printf("hello,I,m learning Linux!\n"); return 0; }
Gcc命令 • gcc hello.c –o hello1 • arm-linux-gcc hello.c –o hello2
编写HelloWorld的Makefile文件 在同一个目录下建立 makefile文件 # vim makefile 键入如下内容: CC =arm-linux-gcc EXEC=hello2 OBJS=hello.o $(EXEC):$(OBJS) $(CC) –ggdb3 -o $(EXEC) $(OBJS) Hello.o: hello.c $(CC) –c hello.c clean: rm -rf hello.o $(EXEC) 注意,在$(CC)和rm两行前面的空格是一个Tab键制表符,不能用空格代替
编译HelloWorld应用程序 在同一个目录下,敲入make命令 # make # ls 就可以看到名为hello2 的目标程序
下载HelloWorld应用程序 要将计算机上的网线(lan network)拔下来,插到实验箱的网口上. 首先要:成功启动实验箱的Linux操作系统之后 配置linux 的网络地址(不能和网络上的网络地址发生冲突和相同) ifconfig eth0 192.168.0.* 配置开发板的IP网络地址: ifconfig eth0 192.168.0.*(地址与主机的IP 在同一网段内)
下载HelloWorld应用程序 下载应用程序:在宿主机上启动nfs服务,并设置好共享目录, 在开发板终端上执行以下命令: mount –o nolock 192.168.0.123:/up-techpxa270 /mnt/nfs (123为宿主机的IP 地址,要根据实际情况修改) 挂接成功之后在开发板上,cd mnt/nfs ,再进入开发程序目录,执行./hello2命令,查看运行结果.
终端输出实验 编写应用程序star.c,在超级终端中输出如下格式显示: 0 *1 **2 ***3 ****4 *****5 ******6 *******7 ********8 *********9 注意:输出用printf语句
终端输出实验源程序 #include <stdio.h> int main() { int i,j; for (i=0;i<10;i++) { for(j=0;j<i;j++) { printf("*"); } printf("%d",i); printf("\n"); } return 0; }
终端输出实验makefile文件 实验程序的makefile文件代码: CC =arm-linux-gcc EXEC=star OBJS=star.o $(EXEC):$(OBJS) $(CC) –ggdb3 -o $(EXEC) $(OBJS) star.o: star.c $(CC) –c star.c clean: rm -rf star.o $(EXEC)
终端输出实验下载并执行 下载应用程序:在宿主机上启动nfs服务,并设置好共享目录,执行以下命令: mount –o nolock 192.168.0.121:/new /mnt/nfs(121为宿主机的IP 地址,要根据实际情况修改) 挂接成功之后在开发板上进入/mnt/nfs ,再进入开发程序目录,执行./star 命令,查看运行结果.