Linux应用开发基础知识
第一章 GCC编译器的使用
1.1 GCC编译过程
-
.c文件的编译经过
注:语法错误是在编译过程发现的
1.2 常用编译选项
-
常用的编译选项
-
当编译多个文件时
注:编译多个文件,且需要修改某一个文件时,推荐第二种方式。
-
头文件、库文件、运行时找头文件的路径
注:要么系统指定的目录,要么自己指定目录。找不到头文件时,解决方案:将头文件移入指定目录或者指定目录。
-
其它好用选项
第二章 Makefile 的使用
2.1 核心规则
-
规则
注:根据文件时间去判断是否新。
-
实例
注:
- 先执行第一条语句,如果没有目标文件,执行二三条创建文件,然后建立连接
- 当依赖文件有变动时,重新执行第一条语句,假设a.c发生变化,执行第二条语句,发现依赖文件a.c比a.o新,重新执行该语句,生成新的a.o文件,b.c未发生变化,不执行。
2.2 语法
-
语法
注:#代表注释。
-
通配符,假想目标举例
注:假想目标,防止目录中有文件和命令clean重名。
-
变量举例
注:该例中可以在命令行中传入D的值,这样 ?= 就不起作用。
2.3 Makefile函数
-
函数
注:第一个函数,对于list中的每一个变量执行text公式(使用$引用函数)。
-
格式
2.4 通用Makefile的使用
-
使用规则
-
演绎过程
注:./ 点表示当前目录,/表示当前目录下的这个文件。
第三章 Linux系统编程
3.1 文件从哪来
-
where
注:Linux内核提供的虚拟文件也许先挂载才能访问。
-
驱动程序种类
注:两类驱动程序:char(字符)类驱动,block(块)类驱动程序,第一个数字是主设备号,表示哪一个驱动,第二个数字是次设备号,表示驱动当中的哪一个硬件。
3.2 怎么访问文件
- 通用的IO模型:open/read/write/lseek/close
- 不是通用的函数:ioctl/mmap
3.3 怎么知道这些函数的用法
-
Linux下有三大帮助方法查看函数用法:help/man/info
-
help
ls --help //用于查看某个命令的用法
-
man:既可以查看某个命令的用法,还可以查看函数的详细介绍。
man 2 open //数字表示有好几个man手册
注:快捷键:f 往前翻一页;b 往后翻一页;q 退出。
3.4 系统调用函数怎么进入内核
-
应用层怎么进入内核
注:swi(ARMcpu32位),svc(ARMcpu64位),glibc会通过触发CPU异常(3种方式)进入内核,触发异常时传入不同参数给内核,内核就知道要调用open/read函数。
-
系统open/read会做什么事情
注:对于字符设备,操作的是驱动程序,会通过主设备号来寻找驱动;普通文件,以FAT/EXT4等格式保存在块设备上。
open:首先分辨文件类型,对于普通文件,会通过FAT32/EXT4等其他格式的文件系统的驱动代码,来寻找打开文件,这个文件是最终保存在某个块设备的,FAT32/EXT4等这些代码最终会调用到块设备驱动程序;如果是字符设备,会通过主设备号在内核里面找到驱动,然后以驱动来操作硬件。
AT32/EXT4等其他格式的文件系统的驱动代码,来寻找打开文件,这个文件是最终保存在某个块设备的,FAT32/EXT4等这些代码最终会调用到块设备驱动程序;如果是字符设备,会通过主设备号在内核里面找到驱动,然后以驱动来操作硬件。
read:如果是普通文件,涉及到文件系统,使用文件系统的代码来读块设备;如果是字符设备,会调用驱动程序提供的读函数来访会设备的信息。