1、第 2.2 讲嵌入式 Linux 编程基础对应第对应第3 3、4 4章部分内容章部分内容OutlineBasic CommandVi编辑器的使用编辑器的使用gcc与与makefile Linux文件系统简介文件系统简介嵌入式交叉编译环境嵌入式交叉编译环境Basic Commandlogin登入系统(注意大小写)logout登出系统dmesg察看开机的信息(按 shift+PageUp、Shift+PageDown 翻页)su切换成为 root 系统管理用户一般使用者切换成为其他身份使用者需要输入该使用者密码。若是执行者为 root 系统管理员的話,則不需要输入密码即可切换。File opera
2、tionls 显示目录文件内容显示目录文件内容 使用方式:ls 参数 文件目录名称ls alls F 文件结尾显示出型态.开始的文件目录为隐藏文件 ls 显示目录文件内容的解释drwxr-xr-x 15 root root 4096 Aug 28 12:00 home-rw-r-r-1 root root 249 Sep 25 2019 zprofile1.文件特性与使用权限2.所含目录数量3.拥有者4.群组5.文件大小6.最後建立/修改时间7.文件名称Basic CommandBasic Commandclear清屏幕(类似于 dos cls 指令)cd 切换目录只输入 cd 或者是输入 c
3、d 回到家目录(home)cat显示文件内容#cat/etc/fstab#cat/var/log/messages#cat/etc/fstab/var/log/messages /tmp/text.txtBasic Commandcp:复制目录复制目录文件文件cp cp r cp i mv:移移动动目录目录文件文件 mv mkdir:建立目录建立目录mkdir .rm:删除目录删除目录rm rm rf /Basic Commandman 显示 manual 帮助手册man lsman 热键 h 显示帮助信息 j/k 前进/后退一行 空格或f 向前翻页 b 向后翻页 G/g 跳转到文件的最后一行
4、/第一行?或/向后或前搜索字符 q 退出手册Basic Commandgrep 寻找符合的欲寻找的资料并显示出来 grep dev/etc/fstab grep l dev*.txtfind 寻找文件 find/-name core printecho 显示一行信息 echo Hello World echo“$PATH”Basic Commandtar 文件打包文件打包与解压与解压用来打包或解压文件或目录两种方式:gzip(.gz or.z)及bzip2(.bz2)选项说明:c 创建 x 提取 z 用gzip 方式处理 j 用bzip2方式处理 f 表示后面是文件名 v 显示过程示例示例:示
5、例:tar-czvf xxx.tar.gz xxx/xxx1 xxx2 xxx3 多个待打包文件以空格分隔 tar-czvf xxx.tar.gz/home/user/xxx/使用绝对路径打包,解包也使用绝对路径 tar-xzvf xxx.tar.gz 按相对路径解包到当前目录下,或按绝对路径解包 tar-czvf xxx.tar.gz xxx|split-b 1m 打包后,使用split分割为1m大小的多个文件 OutlineBasic CommandVi编辑器的使用编辑器的使用gcc与与makefileLinux文件系统简介文件系统简介嵌入式交叉编译环境嵌入式交叉编译环境Vi 编辑器Vi是
6、是Linux系统上的第一个全屏幕交互式编辑程系统上的第一个全屏幕交互式编辑程序。我们目前一般使用的是序。我们目前一般使用的是Vim(Vi Improved)Vim是一个带模式的编辑器,同样的按键,在不是一个带模式的编辑器,同样的按键,在不同模式下,具有不同的功能定义。例如同模式下,具有不同的功能定义。例如 h j k l 在在 编辑模式编辑模式 下输入相应的字符,在下输入相应的字符,在 普通模式普通模式 下却下却相当于方向键的作用。相当于方向键的作用。您只要把手安安稳稳的放在打字区就可以了,而您只要把手安安稳稳的放在打字区就可以了,而不需要使用诸如方向键、排版键、小键盘等需要不需要使用诸如方向
7、键、排版键、小键盘等需要挪开双手的键位,从而提高了您的效率和专注程挪开双手的键位,从而提高了您的效率和专注程度。事实上,度。事实上,Vim的前身的前身Vi诞生的时候,键盘上诞生的时候,键盘上还没有方向键、排版键和小键盘:)还没有方向键、排版键和小键盘:)Vi 编辑器的使用Vi 编辑器的使用用 Vi 打开文件Vi 编辑器的使用模式介绍:模式介绍:Vim常见的模式有:常见的模式有:普通模式普通模式、插插入模式入模式、命令模式命令模式,另外我们也会经常用到,另外我们也会经常用到 可可视模式视模式 Vim启动时默认启动时默认 普通模式普通模式;或者在其它模式下,;或者在其它模式下,按下按下 Esc 键
8、,便可以回到普通模式键,便可以回到普通模式按下按下 i 键,编辑器底部出现了键,编辑器底部出现了 -insert-,您进,您进入了插入模式入了插入模式 在普通模式下,按下在普通模式下,按下:键(键(Shift+;),在编辑),在编辑器底部出现了一个器底部出现了一个:,您进入了命令模式,您进入了命令模式 Vi 编辑器的使用模式切换模式切换Vi 编辑器的使用Vi 编辑器的使用浏览浏览Vi 编辑器的使用编辑编辑Vi 编辑器的使用搜索和替换搜索和替换Vi 编辑器的使用退出退出 vi 及保存文件及保存文件 在普通模式下,按一下:冒号键进入Last line mode,例如::w filename(输入
9、w filename将文章以指定的文件名filename保存):wq(输入wq,存盘并退出vi):q!(输入q!,不存盘强制退出vi)OutlineBasic CommandVi编辑器的使用编辑器的使用gcc与与makefileLinux文件系统简介文件系统简介嵌入式交叉编译环境嵌入式交叉编译环境Tool Chain OverviewTool Chain GCC Binutils Liberary Other tools:make,cvs,gdbGCCThe GNU Compiler Collection(GCC)is the most important piece of open sour
10、ce software in the world.Virtually all other open software is based on it at some level or another.Even other languages,such as Perl and Python,are written in C,which is compiled by the GNU compiler.GCCGNU Compiler Collection(也就是所谓(也就是所谓的的GCC)是由高级语言源码来构建二进制)是由高级语言源码来构建二进制文件的编译器以及实用程序的集合。文件的编译器以及实用程序
11、的集合。GCC不仅是不仅是GNU/Linux上的标准编译器,上的标准编译器,而且他也是嵌入式系统开发的标准编译器。而且他也是嵌入式系统开发的标准编译器。GCCGCC支持各种不同的目标架构支持各种不同的目标架构为我们编译所用的平台构建软件交叉编译(为一个不同的目标构建)GCC提供了40种不同的结构体系 其中包括X86,RS6000,Arm,PowerPC以及其他的许多GCC也可以用在也可以用在40多种不同的主机系统多种不同的主机系统LinuxSolarisWindowsGCC supported languagesC Is the Fundamental LanguageC+Was the Fi
12、rst AdditionObjective-C Objective-C It is referred to as“C with objects”FortranJavaAda The newest addition to the GCC family is Ada.It was added as a fully functional compiler originally developed separately by Ada Core Technologies as the GNAT Ada 95 compiler,and donated to GCC in October of 2019.G
13、CC platformsThe reason for primary and secondary testing on such a limited number of platforms is a matter of manpower.If your platform is not represented here,you may still find that the compiler runs perfectly on your system.GCC ExecutionGCC编译流程GCC的编译流程分为的编译流程分为4个步骤,分别为:个步骤,分别为:(1)预处理()预处理(Pre-Pro
14、cessing););在该阶段,编译器分析处理源代码文件中在该阶段,编译器分析处理源代码文件中的各种宏指令,如的各种宏指令,如include,if等。等。(2)编译()编译(Compiling););在该阶段,在该阶段,GCC首先要检查代码的规范性、首先要检查代码的规范性、是否有语法错误等,在检查无误后,是否有语法错误等,在检查无误后,GCC把代码翻译为汇编语言。把代码翻译为汇编语言。GCC编译流程(3)汇编()汇编(Assembling););在该阶段,编译器把编译生成的汇编代码转成二在该阶段,编译器把编译生成的汇编代码转成二进制目标代码。进制目标代码。(4)链接()链接(Linking)。
15、)。在该阶段,编译器把汇编阶段生成的二进制代码、在该阶段,编译器把汇编阶段生成的二进制代码、程序中用到的库文件链接起来,生成可执行文件。程序中用到的库文件链接起来,生成可执行文件。函数库分为静态库和动态库。函数库分为静态库和动态库。静态库静态库:在链接时,静态库的文件代码会被拷贝到:在链接时,静态库的文件代码会被拷贝到可执行文件中。可执行文件中。动态库动态库:链接时,动态库的代码不会被加入可执行:链接时,动态库的代码不会被加入可执行文件中,而是在程序被执行的时候加载。文件中,而是在程序被执行的时候加载。GCC Option(开关开关)Gcc最基本的用法是最基本的用法是 gcc options
16、filenames 其中其中options就是编译器所需要的参数就是编译器所需要的参数(开关开关),filenames给出相关的文件名称。给出相关的文件名称。-c,只编译,不连接成为可执行文件,编译器只,只编译,不连接成为可执行文件,编译器只是由输入的是由输入的.c等源代码文件生成等源代码文件生成.o为后缀的目标为后缀的目标文件文件-o output_filename,确定输出文件的名称为,确定输出文件的名称为output_filename,同时这个名称不能和源文件,同时这个名称不能和源文件同名。如果不给出这个选项,同名。如果不给出这个选项,gcc就给出预设的就给出预设的可执行文件可执行文件a
17、.out。-g,产生符号调试工具,产生符号调试工具(GNU的的gdb)所必要的符所必要的符号信息,要想对源代码进行调试,我们就必须加号信息,要想对源代码进行调试,我们就必须加入这个选项。入这个选项。GCC Option(开关开关)-O,对程序进行优化编译、连接,采用这个选项,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。是,编译、连接的速度就相应地要慢一些。-O2,比,比-O更好的优化编译、连
18、接,当然整个编更好的优化编译、连接,当然整个编译、连接过程会更慢。译、连接过程会更慢。-lname,在连接时,装载名字为,在连接时,装载名字为“libname.a”的的函数库,该函数库位于系统预设的目录或者由函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下。例如,选项确定的目录下。例如,-lm表示连接名为表示连接名为“libm.a”的数学函数库。的数学函数库。整个源代码程序由两个文件整个源代码程序由两个文件testmain.c 和和testsub.c组成,程序中使用了系统提供的组成,程序中使用了系统提供的数学库,同时希望给出的可执行文件为数学库,同时希望给出的可执行文件为test,
19、这时的编译命令可以是这时的编译命令可以是 gcc testmain.c testsub.c lm o test A Hello WorldHello World!#include int main(void)printf(“Hello world!n”);Hello World,again#include void print_my_string(char str);char hello=“Hello world!”;int main(void)print_my_string(hello);return(0);void print_my_string(char str)printf(“%sn”
20、,str);C Program Structurez preprocessor commandsz type definitionsz function prototypesz global variablesz functionsheader fileBasics on C compilingCompile and run program file.c gcc hello.c o hello./helloCompile multiple sources gcc file1.c c Wall g gcc file2.c c Wall-g gcc file1.o file2.o o file./
21、fileUse Makefile to compileMakefileAll:fileAll:filefile1.o:file1.cfile1.o:file1.c gcc file1.c-c gcc file1.c-cfile2.o:file2.cfile2.o:file2.c gcc file2.c-c gcc file2.c-cfile:file1.o file2.ofile:file1.o file2.o gcc file1.o file2.o-o file gcc file1.o file2.o-o fileClean:Clean:rm-f rm-f*.o;rm-f file.o;rm
22、-f fileMake,make cleanMakefileAll:filefile1.o:file1.cfile2.o:file2.cfile:file1.o file2.oClean:rm-f*.o;rm-f fileAdvanced TopicGDB调试器Gdb是一款是一款GNU开发组织并发布的开发组织并发布的UNIX/Linux下的程序调试工具。它使你能下的程序调试工具。它使你能在程序运行时观察程序的内部结构和内存在程序运行时观察程序的内部结构和内存的使用情况的使用情况.以下是以下是 gdb 所提供的一些功所提供的一些功能能:它使你能监视你程序中变量的值它使你能监视你程序中变量的值.它
23、使你能设置断点以使程序在指定的代码行上它使你能设置断点以使程序在指定的代码行上停止执行停止执行.它使你能一行行的执行你的代码它使你能一行行的执行你的代码.GDB调试器(cont.)Gdb的使用方法:的使用方法:Gdb option executable-filecore-file or process-idgdb基本命令基本命令.file装入想要调试的可执行文件装入想要调试的可执行文件.kill终止正在调试的程序终止正在调试的程序list列出产生执行文件的源代码的一部分列出产生执行文件的源代码的一部分.next执行一行源代码但不进入函数内部执行一行源代码但不进入函数内部.GDB调试器(cont
24、.)step 执行一行源代码而且进入函数内部执行一行源代码而且进入函数内部.run 执行当前被调试的程序执行当前被调试的程序quit 终止终止gdbwatch 使你能监视一个变量的值而不管它使你能监视一个变量的值而不管它何时被改变何时被改变.break 在代码里设置断点在代码里设置断点,这将使程序执行到这将使程序执行到这里时被挂起这里时被挂起.make 使你能不退出使你能不退出 gdb 就可以重新产生可执就可以重新产生可执行文件行文件.shell 使你能不离开使你能不离开 gdb 就执行就执行 UNIX shell 命命令令.工程管理器 Make Make 是用于自动编译、链接程序的实用工是用
25、于自动编译、链接程序的实用工具。在开发一个项目时,通常是将项目分具。在开发一个项目时,通常是将项目分成许多功能模块,每个功能模块又可能被成许多功能模块,每个功能模块又可能被分成许多子模块,而这些子模块一般就是分成许多子模块,而这些子模块一般就是一个程序文件。小的项目通常都有十几个一个程序文件。小的项目通常都有十几个或者几十个文件,而大的项目则会有上百或者几十个文件,而大的项目则会有上百个甚至上千个文件。如果要一个一个的编个甚至上千个文件。如果要一个一个的编译每个文件,这个工作是非常繁琐的,使译每个文件,这个工作是非常繁琐的,使用用make 后就不需要手工的编译每个程序文后就不需要手工的编译每个
26、程序文件。除了要写一个件。除了要写一个makefile 文件外,通常文件外,通常所需要做的事情就是在命令行敲入所需要做的事情就是在命令行敲入“make”,然后所有的事情都由,然后所有的事情都由make 来完来完成。成。工程管理器 Make(cont.)makefile的宗旨就是让编译器知道要编译一的宗旨就是让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相最终的生成文件已经过时,而重新编译相应的模块。应的模块。默认情况下,默认情况下,GNU ma
27、ke 工具在当前工作工具在当前工作目录中按如下顺序搜索目录中按如下顺序搜索 makefile:*GNUmakefile *makefile *MakefileMAKEFILEMakefile:makefile描述了整个工程的编描述了整个工程的编译规则译规则,通过通过make命令自动化编译命令自动化编译.Make:是一个解释:是一个解释makefile 中指令的命令中指令的命令工具,大多数的工具,大多数的IDE都有这个命令,比如:都有这个命令,比如:Delphi的make,Visual C+的nmakeLinux下GNU的makeFormat(格式)目标目标(target):依赖依赖(prere
28、quiries)命令命令(command)makefile最为核心的内容最为核心的内容说明了一个文件的倚赖关系:说明了一个文件的倚赖关系:target 这一个或这一个或多个目标文件依赖于多个目标文件依赖于rerequisites中的文件,中的文件,其生成规则定义在其生成规则定义在command中中一般,一般,Makefile中只应该有一个最终可执行目中只应该有一个最终可执行目标标target:是一个目标文件,可以是:是一个目标文件,可以是 Object File,也可以是可执行文件,还可以是一个,也可以是可执行文件,还可以是一个标签(标签(Label)prerequisites:要生成那个:要
29、生成那个 target 所需要所需要的文件,一个目标经常有几个依赖的文件,一个目标经常有几个依赖Command:make 需要执行的命令。一个需要执行的命令。一个规则可以含有几个命令,每个命令占一行。规则可以含有几个命令,每个命令占一行。注意注意注意:每个命令行前面必须是一个:每个命令行前面必须是一个Tab字符,字符,即命令行第一个字符是即命令行第一个字符是Tab。不可使用不可使用8 8个个“spacespace”键替代,否则键替代,否则makemake会显示出错信息会显示出错信息 一个一个 makefile 文件中可定义多个目标,利文件中可定义多个目标,利用用 make target 命令可
30、指定要编译的目标,命令可指定要编译的目标,如果不指定目标,则使用第一个目标。如果不指定目标,则使用第一个目标。make处理Makefile的过程缺省情况下,缺省情况下,make开始于第一个目标(假想开始于第一个目标(假想目标的名称前带目标的名称前带.)。这个目标称为缺省最)。这个目标称为缺省最终目标(即终目标(即make最终更新的目标)。最终更新的目标)。在前面的例子中,缺省最终目标是更新可执行在前面的例子中,缺省最终目标是更新可执行文件文件edit,所以我们将该规则设为第一规则。,所以我们将该规则设为第一规则。这样,一旦您给出命令:这样,一旦您给出命令:makemake就会读当前目录下的就会
31、读当前目录下的makefile文件,并文件,并开始处理第一条规则。开始处理第一条规则。Make的工作过程1、读入、读入Makefile2、读入被、读入被include的其它的其它Makefile3、初始化文件中的变量、初始化文件中的变量4、推导隐晦规则,并分析所有规则、推导隐晦规则,并分析所有规则5、为所有的目标文件创建依赖关系链、为所有的目标文件创建依赖关系链6、根据依赖关系,决定哪些目标要重新生成、根据依赖关系,决定哪些目标要重新生成7、执行生成命令、执行生成命令示例(3个头文件和个头文件和8个个C文件文件)edit:main.o kbd.o command.o display.o ins
32、ert.o search.o files.o utils.occ-o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.omain.o:main.c defs.hcc-c main.ckbd.o:kbd.c defs.h command.hcc-c kbd.ccommand.o:command.c defs.h command.hcc-c command.cdisplay.o:display.c defs.h buffer.hcc-c display.cinsert.o:insert.c defs.h b
33、uffer.hcc-c insert.csearch.o:search.c defs.h buffer.hcc-c search.cfiles.o:files.c defs.h buffer.h command.hcc-c files.cutils.o:utils.c defs.hcc-c utils.cclean:rm edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o make示例(cont.)在本例中,第一条规则是连接生成在本例中,第一条规则是连接生成edit,但在,但在make全部完成本规则工作
34、之前,必须先处理全部完成本规则工作之前,必须先处理edit所依靠的所依靠的OBJ文件。这些文件。这些OBJ文件按照各文件按照各自的规则被处理更新,每个自的规则被处理更新,每个OBJ文件的更新规则文件的更新规则是编译其源文件。重新编译根据其依靠的源文件是编译其源文件。重新编译根据其依靠的源文件或头文件是否比现存的或头文件是否比现存的OBJ文件更文件更新新,或者,或者OBJ文件是否存在来判断。文件是否存在来判断。其它规则的处理根据它们的目标是否和缺省最终其它规则的处理根据它们的目标是否和缺省最终目标的依赖相关联来判断。如果一些规则和缺省目标的依赖相关联来判断。如果一些规则和缺省最终目标无任何关联则
35、这些规则不会被执行,除最终目标无任何关联则这些规则不会被执行,除非告诉非告诉Make强制执行(如输入执行强制执行(如输入执行make clean命令)。命令)。示例(cont.)在在OBJ文件重新编译之前,文件重新编译之前,Make首先检查首先检查它的依赖它的依赖C语言源文件和语言源文件和C语言头文件是否语言头文件是否需要更新。如果这些需要更新。如果这些C语言源文件和语言源文件和C语言语言头文件不是任何规则的目标,头文件不是任何规则的目标,make将不会将不会对它们做任何事情。对它们做任何事情。在在OBJ文件重新编译(如果需要的话)之文件重新编译(如果需要的话)之后,后,make决定是否重新连
36、接生成决定是否重新连接生成edit可执可执行文件。如果行文件。如果edit可执行文件不存在或任何可执行文件不存在或任何一个一个OBJ文件比存在的文件比存在的edit可执行文件可执行文件新新,则,则make重新连接生成重新连接生成edit可执行可执行文件。文件。示例(cont.)如果我们修改了如果我们修改了insert.c文件,然后运行文件,然后运行make,make将会编译将会编译insert.c文件更文件更新新insert.o文件,然后重新连接生成文件,然后重新连接生成edit可执行文件。可执行文件。如果我们修改了如果我们修改了command.h文件,然后文件,然后运行运行make,make
37、将会重新编译将会重新编译kbd.o和和command.o文件,然后重新连接生成文件,然后重新连接生成edit可执行文件。可执行文件。常用makefile目标名Clean一般用来清除编译过程中的中间文件。一般用来清除编译过程中的中间文件。Install目标名常会把最终的二进制文件、所支持目标名常会把最终的二进制文件、所支持的库文件和的库文件和shell脚本以及相关文档移到文件系统脚本以及相关文档移到文件系统中与它对应的位置,同时设置文件的权限和所有中与它对应的位置,同时设置文件的权限和所有者。者。Uninstall用来删除用来删除install目标安装的文件。目标安装的文件。Dist常常用于删除
38、编译工作目录中旧的二进制文常常用于删除编译工作目录中旧的二进制文件和目标文件并且创建归档文件。件和目标文件并且创建归档文件。Depend用来设置用来设置makefile文件中各个目标所需文件中各个目标所需要的依赖文件列表。要的依赖文件列表。Installtest和和installcheck一般用于验证一般用于验证install目目标的安装过程。标的安装过程。Rules(规则)显式规则显式规则变量定义变量定义隐晦规则隐晦规则文件指示文件指示注释注释变 量前面例子中重复使用前面例子中重复使用2次次 edit:main.o kbd.o command.o display.o insert.o sea
39、rch.o files.o utils.occ-o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o Makefile的变量可以理解为的变量可以理解为C语言中的宏语言中的宏,可以定义变量,可以定义变量objects:objects=main.o kbd.o command.o display.o insert.o search.o files.o utils.o 隐讳规则:自动推导Make具有自动推导具有自动推导文件文件以及文件依赖关以及文件依赖关系后面的系后面的命令命令,没必,没必要在每一个要在每一
40、个.o文件后文件后写同名的写同名的.c文件,以文件,以及编译命令及编译命令此既是此既是make的的“隐隐晦规则晦规则”文件指示包括三个部分:包括三个部分:在一个在一个Makefile中引用另一个中引用另一个Makefile根据某些情况指定根据某些情况指定Makefile中的有效部分,中的有效部分,就像就像C语言中的预编译语言中的预编译#if一样一样定义一个多行的命令定义一个多行的命令 文件引用includeMakefile:a.mk、b.mk、c.mk,还有一个文件,还有一个文件叫叫foo.make,以及一个变量,以及一个变量$(bar),其包含了,其包含了e.mk和和f.mk,那么,下面的语
41、句:,那么,下面的语句:include foo.make*.mk$(bar)等价于:等价于:include foo.make a.mk b.mk c.mk e.mk f.mk注 释Makefile中只有行注释:中只有行注释:#就像就像C/C+中的中的“/”一样一样如果你要在你的如果你要在你的Makefile中使用中使用“#”字符,字符,可以用反斜杠进行转义,如:可以用反斜杠进行转义,如:“#”清空目标文件的规则.PHONY的意思表示的意思表示clean是一个是一个“伪目标伪目标”在在rm命令前面加了一命令前面加了一个小减号的意思就是,个小减号的意思就是,也许某些文件出现问也许某些文件出现问题,
42、但不要管,继续题,但不要管,继续做后面的事做后面的事 一般的风格都是:一般的风格都是:clean:rm edit$(objects)更为稳健的做法是:更为稳健的做法是:.PHONY:cleanclean:-rm edit$(objects)Makefile简单化:另一种风格这种类型简单,但是这种类型简单,但是作为初学者,依赖关作为初学者,依赖关系不能够清楚。复杂系不能够清楚。复杂一点的话,就很难搞一点的话,就很难搞明白明白Makefile的文件名make 命令会在当前目录下按顺序找寻文件命令会在当前目录下按顺序找寻文件“GNUmakefile”、“makefile”、“Makefile”可以是
43、其他名称,如:可以是其他名称,如:Make.Linuxmake-f Make.Linux 建议使用建议使用Makefile或或makefile显示命令 echoecho 正在编译正在编译XXX模块模块.,make将输出:echo 正在编译XXX模块.加在命令行前,则此命令不被加在命令行前,则此命令不被make显示出显示出来来“正在编译正在编译XXX模块模块.”字串,不输出命字串,不输出命令令Reference1.Makefile中文教程中文教程.pdf(74)2.手把手教你如何写手把手教你如何写Makefile.pdf(9)3.gnu.org/software/make/manual/make
44、.htmlOutlineBasic CommandVi编辑器的使用编辑器的使用gcc与与makefile Linux文件系统简介文件系统简介嵌入式交叉编译环境嵌入式交叉编译环境文件系统结构Linux 的文件系统的文件系统:安装系统时,linux 所使用的分割区形式为 linux native swap 虚拟存储器使用部分使用的分割区,为 linux swap 目前一般使用的文件系统为 ext2fs(extend second filesystem)目前有其他厂商研发的文件系统,比方:XFS、JFS、ReiserFS、Ext3FS(ext2下一代的文件系统)可以參閱 linuxgazette/i
45、ssue55/florido.htmlLinux 的的 ext2 文件系统文件系统:该分割区最大为 2TB(2048GB)单一文件大小最大可为 2GB 文件名称最长可以到 255 字元文件系统实体结构ext2 文件系统最基本储存文件为文件系统最基本储存文件为 blockblock 大小可以为大小可以为 1024、2048、4096 等等。等等。预设的预设的 block 大小为大小为 4096 byte实际管理为数个实际管理为数个 block 组成组成 block group,每个每个 block group 分配一定的分配一定的 i-node系统预设系统预设 4096byte 分配一个分配一个
46、 i-node文件系统的文件以文件系统的文件以 i-nodes(index node)区分区分系统目录结构树系统目录结构系统目录结构(1)/:系统的根目录,由该目录开始延伸系统的根目录,由该目录开始延伸/bin:放置必备的一些基本指令放置必备的一些基本指令/boot:用来放置用来放置 boot image 的目录位置的目录位置/dev:外围设备文件的存放位置外围设备文件的存放位置/etc:用来存放系统的相关配置文件目录位置用来存放系统的相关配置文件目录位置/home:用来放置使用者家目录的位置用来放置使用者家目录的位置/lib:用来放置系统的相关程序库与共享程序库的位置用来放置系统的相关程序库
47、与共享程序库的位置/lost+found:每一个新建立格式化好的分割区都有每一个新建立格式化好的分割区都有该目录。给该目录。给 fsck 等程序检查修复用来存放遗失链接等程序检查修复用来存放遗失链接系统目录结构(2)/mnt:提供暂时文件系统的挂接点位置提供暂时文件系统的挂接点位置/opt:相关附属的程序套件安装位置相关附属的程序套件安装位置/proc:虚拟文件系统,实际内容是存放在存储器内,虚拟文件系统,实际内容是存放在存储器内,里面存放著系统程序执行程序的资料状态里面存放著系统程序执行程序的资料状态/root:root 超级管理员的家目录超级管理员的家目录/sbin:用来存放专门给系统管理
48、员使用的相关执行文用来存放专门给系统管理员使用的相关执行文件件/usr:存放系统相关程序与文件位置,该目录内还有存放系统相关程序与文件位置,该目录内还有 其他的目录规划使用其他的目录规划使用系统目录结构(3)/usr 里面目录的划分里面目录的划分:X11R6/:X Window System 的目录位置的目录位置bin/:一般使用者执行工具程序位置一般使用者执行工具程序位置doc/:安装的相关软件程序提供的文件安装的相关软件程序提供的文件etc/:与与/etc 类似,存放相关配置文件类似,存放相关配置文件man/:存放存放 manual 文件资信文件资信(man xxx)sbin/:次要系统管
49、理员所用到的相关程序次要系统管理员所用到的相关程序share/:共享的相关文件,比方字型、图示等等文件共享的相关文件,比方字型、图示等等文件include/:存放编译器的相关引入文件存放编译器的相关引入文件src/:存放存放 kernel 等相关原始码目录等相关原始码目录local/:存放一般使用者自己编译安装使用的目录存放一般使用者自己编译安装使用的目录系统目录结构(4)/var:存放系统变动的相关文件目录存放系统变动的相关文件目录:/log:存放系统相关程序的存放系统相关程序的 log 紀紀录录/spool:存放待处理的相关资信目录存放待处理的相关资信目录:/mail:使用者使用者 mai
50、lbox 目录位置目录位置/mqueue:处理待寄的信件文件处理待寄的信件文件/lpd:存放列印中的工作文件存放列印中的工作文件/tmp:提供给一般使用者与程序存放暂时的文件提供给一般使用者与程序存放暂时的文件在在/var/tmp 与与/usr/tmp 許許多目录都是连向该目多目录都是连向该目OutlineBasic CommandVi编辑器的使用编辑器的使用gcc与与makefile Linux文件系统简介文件系统简介嵌入式交叉编译环境嵌入式交叉编译环境交叉编译环境交叉编译是交叉编译是嵌入式嵌入式开发过程中的一项重要技术,它的主要开发过程中的一项重要技术,它的主要特征是某机器中执行的程序代码
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。