Linux 基础概念

POSIX

可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼(RMS)应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统接口)的缩写,而X则表明其对Unix API的传承

动态库和静态库

在Windows下静态库的后缀为:.lib、动态库后缀为:.dll;而在Linux下静态库的后缀为:.a、动态库的后缀为:.so。

那么什么是静态库呢?

首先我们来看看程序编译的大体流程:预处理——编译——汇编——链接

在我们的项目开发中,有些代码会被反复使用,那么这时我们便可将这些代码编译成库的形式来调用,像静态库就是在可执行文件中包含库代码的一份完整拷贝,但这种方式有个很严重的缺点就是会造成多份冗余拷贝。静态库会在程序的链接阶段被复制到程序中,所以程序在运行后是不会调用静态库的。

那动态库又是什么呢?

动态库不像静态库那样,在链接阶段并没有被复制到程序中,反而是程序运行的时候由系统动态的加载到内存中供程序调用,所以这里解决了静态库早晨多份冗余拷贝的缺点,系统只需要载入一次动态库,不同的程序可以得到内存中相同的动态库副本,因此可以节省大量的内存
————————————————
版权声明:本文为CSDN博主「Mr.Zhang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34199383/java/article/details/80308782

ioctl

ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:

int ioctl(int fd, ind cmd, …);

其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,这个参数的有无和cmd的意义相关。

例如:看门狗操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFNso4Dl-1627429085143)(evernotecid://839B6D53-8AF0-4841-860D-8C26913944D1/appyinxiangcom/28638961/ENResource/p81)]

MCU

架构

RISC与CISC

  • CISC(Complex Instruction SetComputer,复杂指令集计算机)

    复杂指令集(CISC,Complex Instruction Set Computer)是一种微处理器指令集架构(ISA),每个指令可执行若干低阶操作,诸如从内存读取、储存、和计算操作,全部集于单一指令之中。
    CISC特点:
    1.指令系统庞大,指令功能复杂,指令格式、寻址方式多;
    2.绝大多数指令需多个机器周期完成;
    3.各种指令都可访问存储器;
    4.采用微程序控制;
    5.有专用寄存器,少量;
    6.难以用优化编译技术生成高效的目标代码程序;
    在CISC指令集的各种指令中,大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的80%的指令却不经常使用,在程序设计中只占20%

  • RISC(reduced instruction setcomputer,精简指令集计算机)
    精简指令集这种设计思路对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。它能够以更快的速度执行操作。
    RISC特点:
    1.统一指令编码(例如,所有指令中的op-code永远位于同样的位元位置、等长指令),可快速解译;
    2.泛用的暂存器,所有暂存器可用于所有内容,以及编译器设计的单纯化(不过暂存器中区分了整数和浮点数);
    3.单纯的寻址模式(复杂寻址模式以简单计算指令序列取代);
    4.硬件中支援少数资料型别(例如,一些CISC电脑中存有处理字节字串的指令。这在RISC电脑中不太可能出现)。

x86、ARM、MIPS架构

  • X86
    PC主架构,64位为x86-64或x64
  • ARM
    手机主架构
  • MIPS
    英语:MIPSarchitecture,为无内部互锁流水级的微处理器

U-boot

Bootloader 两种模式

  • Boot loading 模式
    用于产品发布,无用户介入,将操作系统从 flash 加载到 RAM
  • Downloading 模式
    把代码下到 flash 中

主机和板子的传输方式

  • 有线:串口协议
  • 无线:tftp、nfs
  • USB

启动顺序

  1. 固件的Boot(可能)和bootloader
  2. 内核
  3. 文件系统
  4. 用户程序

bootloader两个阶段

  • 第一阶段:汇编
    • 硬件初始化:关闭看门狗、关中断、设置cpu速度、时钟频率、RAM初始化等等
    • 为第二阶段代码准备RAM
    • 复制第二段代码
    • 设置栈
    • 跳转
  • 第二阶段:C
    • 初始化内存设备
    • 检测 menory map
    • 复制内核和根文件系统到RAM
    • 为内核设置启动参数:将参数放到指定位置,等待内核启动后去指定位置调用
    • 调用内核

U-Boot 移植

  • 修改 SDRAM 配置
  • 增加 SOC 支持
  • 选择 NOR Flash 型号
  • 支持串口协议
  • 支持网卡芯片
  • 支持 NAND Flash
  • 支持烧写 yaffs 文件系统映像
  • 修改默认配置参数

分区

Linux swap分区及作用详解

我们在安装系统的时候已经建立了 swap 分区。swap 分区通常被称为交换分区,这是一块特殊的硬盘空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。

也就是说,当内存不够用时,我们使用 swap 分区来临时顶替。这种“拆东墙,补西墙”的方式应用于几乎所有的操作系统中。

使用 swap 交换分区,显著的优点是,通过操作系统的调度,应用程序实际可以使用的内存空间将远远超过系统的物理内存。由于硬盘空间的价格远比 RAM 要低,因此这种方式无疑是经济实惠的。当然,频繁地读写硬盘,会显著降低操作系统的运行速率,这也是使用 swap 交换分区最大的限制。

语法

缺页异常

给定一个线性地址,MMU 通过页目录表、页表的转换,找到对应的物理地址。在这个过程中,如果因某种原因导致无法访问到最终的物理内存单元,CPU 会产生一次缺页异常,从而进入缺页异常处理程序。

总结一下,缺页异常的原因有以下几种:

1、导致缺页异常的线性地址根本不在进程的“虚存区间”中,段错误。(栈扩展是一种例外情况)

2、地址在“虚存区间”中,但“虚存区间”的访问权限不够;例如“区间”是只读的,而你想写,段错误

3、权限也够了,但是映射关系没建立;先建立映射关系再说

4、映射关系也建立了,但是页面不在内存中。肯定是换出到交换分区中了,换进来再说

5、页面也在内存中。但页面的访问权限不够。例如页面是只读的,而你想写。这通常就是 “写时拷贝COW” 的情况。

6、缺页异常发生在“内核动态映射空间”。这是由于进程进入内核后,访问一个通过 vmalloc() 获得线性地址而引起的异常。对这种情况,需要将内核页目录表、页表中对应的映射关系拷贝到进程的页目录表和页表中。

段错误

段错误表示,该程序(方法、函数)访问的内存超出了系统给这个程序所设定的内存空间。
原因:

  • 访问不存在的内存地址
  • 访问系统保护的内存地址
  • 访问只读的内存地址
  • 栈溢出

定位

epc :exception program counter 异常程序计数器
ra : return address 返回地址

文件

权限

文件和文件夹操作权限

压缩

SquashFS是一套基于Linux内核使用的压缩只读文件系统。该文件系统能够压缩系统内的文档,inode以及目录,文件最大支持2^64字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值