目录
参考用书: 金伟正,嵌入式Linux系统开发与应用, 电子工业出版社
参考ppt:第3章-Linux编程环境和第4章-Linux外壳程序编程
参考实验指导书
创建一个进程要比创建一个线程耗用更多的时间和空间资源;
(1)多任务的:可以同时创建多个线程或进程来完成多个不同的任务,决不能认为自己的程序是系统唯一的运行实例;同一个用户或不同的用户可以运行该程序的其他实例。因此,在某些情况下必须小心对待同步的问题。
(2)真正的多用户系统:意味着存在某种安全机制,确保把不同用户的文件隔开。用户的程序不像在其他系统中那样,可以修改或者移动任何文件,除非他是root用户。
一套完整的开发工具至少包括:编辑工具、编译工具和调试工具,如果是大型项目,还要有配置工具和项目管理工具。
开发环境大体分为基于文本的开发平台(典型组合是vim/emacs+gcc+gdb)和集成开发平台(Eclipse+CDT插件)。近年来,Linux受到越来越多的开发者和普通用户的喜爱,Linux上的集成开发工具也越来越多,比较出名的有Kylix、Eclipse等。
(1)编辑工具:开发者们使用类似于EDIT的工具——经典的vi来编辑源程序。当然,还有更高档一些的,如joe、emacs等。总之,编辑程序与编译工作是分开的。
(2)编译工具:先用编辑工具输入源程序,然后再执行一长串的命令(包括参数)进行编译。
例如:gcc -o hello hello.c就是将hello.c编译为hello,然后你还需要为其赋予可执行的权限,这样才完成了整个工作。
(3)调试工具:程序运行中,发现存在bug,就需要确定出错位置和出错原因以及一些运行时数据。通过gdb调试程序,可以查看程序运行行中某一变量值,支持断点调试等功能。
为了完成大型软件项目,开发了一种叫make的工具。Make依据一个Makefile文档来工作。
一个简单的Makefile文档其实就是以上那些gcc命令的集合。编辑好之后,只需输入make就可以让它自动运行这些编译命令。Makefile 文档中一个重要的概念就是目标,它用来告诉make要完成些什么工作。比如几乎所有的GNU标准的Makefile都应该有一个叫all的目标,顾名思义就是生成最终的结果。
可以用automake的工具来自动生成Makefile,当然这时候也会用到其他一些如autoscan、autolocal、autoconf等工具。
同时为了供不同的开发人员之间的分工合作,Linux还提供了CVS用于版本控制、管理的软件配置管理工具。
1.下载安装Eclipse;
2.下载CDT二进制文件;
注意:请下载适合你操作系统的正确的CDT。遗憾的是,即使CDT是用Java编写的,它是与平台有关的。将归档文件解压到临时目录中,从临时目录将所有插件目录内容都移到Eclipse plugins子目录。还需要将features目录内容移到Eclipse features子目录中。
3.在Eclipse中安装CDT之后:
浏览至File=>New=>Project,有三个可用项目类型:C(“standard c Make Proiect”)、C++(“Standard C++ Make Project”)和“Convert to C or C++ Projects”。
从Standard Make C++ Project开始,为项目创建源代码文件。在C/C++Projects视图中,单击鼠标右键,然后选择New=>simple=>File,命名文件并保存。
可以用这种方法创建许多头文件以及C/C++实现代码文件。最后,是Makefile,GNU make将使用它来构建二进制文件。Makefile使用GNU make语法。
请记住:Makefile要求使用Tab字符而不是空格来产生缩进。
4.将现有的源代码导入Eclipse:使用Import向导,将文件从文件系统目录复制到工作台;
File=>Import=>File System,单击Next,打开源目录,选择想要添加文件的目录。单击Select All以选择目录中的所有资源,然后从头到尾检查,取消选择你不打算添加的那些资源。指定将作为导入目标的工作台项目或文件夹。还可以通过从文件系统拖动文件夹和文件并将它们放入Navigatoin视图中,或者通过复制和粘贴来导入文件夹和文件。
5.CDT提供了一种设置项目构建选项的简单方法。
CDT依赖于三个GUN工具GCC、GDB和Make.因此,对用于调试的GDB或用于编译的GCC和Make的依赖,要求这些应用程序可用于用户想要使用的平台。大多数Linux(通常和类POSIX)源代码软件包使用autoconf脚本来检查构建环境,所以必需运行configure命令,该命令在编译之前创建“Makeflile”。
如果通过调用make命令来构建项目,那么缺省设置没问题,但是,如果使用一种更复杂的方法进行构建,则必须:在Build Command文本框中输入适当的命令(例如,make –f make_it_all)。
编译成功之后,运行应用程序。 所有用于运行和调试的选项都位于主Eclipse菜单的Run菜单下。
在Linux下开发应用程序时,手册页(manpage)是主要的参考信息来源。手册页中存放的是参考信息,对于每一条shell命令、系统调用、库函数、配置文件和系统的守护程序,都有相关的一页对其进行说明。
手册页分为八个部分:
第1部分:shell命令和用户级程序; 第2部分:系统调用相关文档; 第3部分:C和C++库函数和宏调用相关文档; 第4部分:在内核模块、/dev目录、/proc等目录中的特殊文件和设备的相关文档; 第5部分:系统的不同文件格式; 第6部分:因历史原因而包含的游戏相关文档; 第7部分:有关语言或小语言的文档; 第8部分:守护程序或者其他系统管理员命令的相关文档。
NAME字段:显示了可执行文件的名称和对其功能的简短解释。
SYNOPSIS字段:显示了可执行文件的常用方法,如要声明的选项和它支持的输入类型(文件或数值)。
DESCRIPTION字段:显示了和文件或可执行文件相关的可用选项和数值。
See Alse:显示了相关的术语、文件和程序。
常用的编辑器有很多,比如图形模式下的gedit、kwrite、OpenOffice,文本模式下的VIM、Emacs和nano。VIM和Emacs是我们在Linux下最常用的两个编辑器。
VIM编辑器是Linux最基本的文本编辑工具,VIM编辑器是创建和编辑简单文档最高效的工具。
可有6种,为避免初学者搞混,一般分成3种:
一般模式:进入VIM就是处于一般模式,只能通过按键向编辑器发送命令,不能输入文字。这些命令可能是移动光标的命令,也可能是编辑命令或寻找替换命令。
编辑模式:在一般模式下按i,此时可以输入文字,写你的文章,按Esc就又回到一般模式。
命令模式:在一般模式下按:就会进入命令模式,左下角会有一个冒号出现,此时可敲入命令并执行。按Esc回到一般模式。
编写文件:进入VIM后,按i进入编辑模式,就可以编写文件了。通过方向键控制光标的移动,退格键可消去光标前一个字母,若是中文的话则消去一个字。Del键可删除光标所在处的字母(或汉字)。
:w保存文件
:q退出
:wq存盘并退出
当VIM处于一般模式下时,我们可以用下面的一些键位来快速移动光标:
J | 向下移动一行 |
K | 向上移动一行 |
g | 向左移动一个字符 |
I | 向右移动一个字符 |
ctrl+b | 向上移动一屏 |
ctrl+f | 向下移动一屏 |
向上箭头 | 向上移动 |
向下箭头 | 向下移动 |
向左箭头 | 向左移动 |
向右箭头 | 向右移动 |
对于j,k,l和h键,还能在这些动作命令前面加上数字,比如3j,表示向下移动3行。
注意:进行此类操作前,VIM应处于一般模式,操作后VIM处于编辑模式:
i | 在光标之前插入 |
I | 在光标所在行的行首插入 |
a | 在光标之后插入 |
A | 在光标所在行的行末插入 |
o | 在光标所在的行的下面插入一行 |
O | 在光标所在行的上面插入一行 |
s | 删除光标后的一个字符,然后进入插入模式 |
S | 删除光标所在的行,然后进入插入模式 |
注意:进行此类操作前后VIM都处于一般模式;
x | 删除一个字符 |
#x | 删除几个字符,#代表数字 |
dw | 删除一个单词 |
#dwd | 删除几个单词,比如3dw表示删除三个单词 |
dd | 删除一行 |
#dd | 删除多行,比如3dd表示删除光标行及光标的下两行 |
d$ | 删除光标到行尾的内容 |
J | 清除光标所处的行与下一行间的空格,把光标行和下一行接在一起 |
u 恢复修改及恢复删除操作;进行此操作前,VIM应处于一般模式,操作后VIM仍处于一般模式。
其实删除也带有剪切的意思,当删除文字后,按shift+p键就把内容贴在原处,然后再移动光标到某处,再按p(在光标之后粘贴)或shifI+p(在光标之前粘贴)就能贴上了。
p 在光标之后粘贴;
shift+p 在光标之前粘贴。
首先进入命令模式;再输入/或?就可以使用查找功能了。
/ 要查找的单词,正向查找,按n键把光标移动到下一个符合条件的地方;
?要查找的单词,反向查找,~shift+n键,把光标移动到下一个符合条件的地方;
举一例,比如想在一个文件中找到swap单词,应该这样做:
首先按Esc键,进入命令模式,然后输入;
/swap
或
?swap
此时,VIM会以高亮度显示找到的词语,并把光标定位到词语所在行。
按Esc键进入命令模式;
:s/SEARCH/REPLACE/g 注:把当前光标所处的行中的SEARCH单词,替换成REPLACE,并把所有SEARCH高亮显示;
:%s SEARCH/REPLACE 注:把文档中所有SEARCH替换成REPLACE; :#,#s/SEARCH/REPLACE/g 注:#号表示数字,表示从多少行到多少行,把SEARCH替换成REPLACE在这里,g表示全局查找;我们注意到,就是没有替换的地方,也会把SEARCH高亮显示;
举例说明,比如有一篇文档要修改,我们把光标所在的行,把所有单词the,替换成THE, :s/the/THE/g
我们把整篇文档中所有的the都替换成THE,
:%s/the/THE
我们仅仅是把第1行到第10行中的the,替换成THE,
:1,10 s/the/THE/g
在命令模式下,输入set number,就会在每行的行首显示出行号;
如果想了解更多,请查找man或help:man vim或vim -help
缓冲区就是一块用来保存我们输入的东西的内存区域。在Emacs里,一切都是在内存中进行,直到按下C-s C-x来保存,文件才会被改变,这是一个普遍的文本保存策略,几乎所有的文本编辑器都是这样工作的。
窗口不是Window,它是指你所编辑的文本被显示的区域,这一点类似于你在UltraEdit里打开的各个文件所在的小窗口。
模式是Emacs里最重要的概念,Emacs的强大功能基本上都是由各种模式提供的,常用的有C/C++模式、shell模式、Perl模式、SGML/HTML模式等等。
首先,我们可以在Emacs里同时编辑多个文件。
可以用C-x3垂直分割屏幕,分成左右两个区域。
窗口和缓冲区的概念是完全不同的,因此我们可以“关闭”窗口,而非“关闭’’缓冲区,让它暂时从我们的视线里消失。这相当于图形环境下的“最小化窗口”。使用C-x0关闭当前窗口,使用C-x1关闭当前窗口以外的其他窗口。
从当前位置出发,移动光标的命令如下图所示:(C表示ctrl键,M表示alt键);
C -x u会把一个命令所造成的改变取消掉;
除了作为文本编辑器外,Emacs还集成了万维网浏览器、邮件阅读器、ftp、telnet、新闻组阅读器、版本控制系统等等。Emacs的集成功能实在是太多了,这里不再讨论。
(2022-11-25 10:50:24发布)