Linux应用开发基础知识笔记

本文介绍了Linux应用开发的基础知识,包括GCC编译器的使用,如编译过程和常用选项;Makefile的运用,讲解了其核心规则、语法、变量和函数;还探讨了Linux系统编程,涉及文件来源、访问方式、系统调用如何进入内核以及文件系统的工作原理。
摘要由CSDN通过智能技术生成

Linux应用开发基础知识

第一章 GCC编译器的使用

1.1 GCC编译过程

  • .c文件的编译经过

    注:语法错误是在编译过程发现的

1.2 常用编译选项

  • 常用的编译选项

  • 当编译多个文件时

    注:编译多个文件,且需要修改某一个文件时,推荐第二种方式。

  • 头文件、库文件、运行时找头文件的路径

    注:要么系统指定的目录,要么自己指定目录。找不到头文件时,解决方案:将头文件移入指定目录或者指定目录。

  • 其它好用选项

第二章 Makefile 的使用

2.1 核心规则

  • 规则

    注:根据文件时间去判断是否新。

  • 实例

    注:

    1. 先执行第一条语句,如果没有目标文件,执行二三条创建文件,然后建立连接
    2. 当依赖文件有变动时,重新执行第一条语句,假设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:如果是普通文件,涉及到文件系统,使用文件系统的代码来读块设备;如果是字符设备,会调用驱动程序提供的读函数来访会设备的信息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值