导图社区 linux嵌入式方向
linux是一套开源和自由传播基于unix操作系统是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。简单的来说就是和windows、Mac OS比较像的一种多任务、多用户的操作系统!,
编辑于2023-04-17 19:03:27 辽宁linux嵌入式方向
linux是什么
linux是一套开源和自由传播基于unix操作系统是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。简单的来说就是和windows、Mac OS比较像的一种多任务、多用户的操作系统!,
Unix和linux有什么区别
开源性
Linux是一款开源操作系统,不需要付费,即可使用;Unix是一款对源码实行知识产权保护的传统商业软件,使用需要付费授权使用。
跨平台性
Linux操作系统具有良好的跨平台性能,可运行在多种硬件平台上;Unix操作系统跨平台性能较弱,大多需与硬件配套使用。
可视化性
Linux除了进行命令行操作,还有窗体管理系统;Unix只是命令行下的系统。
硬件环境
Linux操作系统对硬件的要求较低,安装方法更易掌握;Unix对硬件要求比较苛刻,安装难度较大。
用户群体
Linux的用户群体很广泛,个人和企业均可使用;Unix的用户群体比较窄,多是安全性要求高的大型企业使用,如银行、电信部门等,或者Unix硬件厂商使用,如Sun等。
Linux系统的组成部分
boot loader
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序
Linux kernel// linux 内核
操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。
Linux Shell
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
Linux应用程序
子主题
Linux内核的组成部分
第一类分类
内存管理子系统
进程管理子系统
文件管理子系统
I/O管理子系统
第二类分类
进程调度(SCHED)
进程间通信(IPC)
内存管理(MMU)
虚拟文件系统(VFS)
网络接口(NET)
内存管理单元MMU有什么作用
内存映射、内存分配和回收、内存保护、内存扩充
常见的操作系统进程调度策略有哪些
先来先服务、短进程优先、高响应比优先、时间片轮转、多级反馈队列、最高优先权优先
I/O子系统层次结构
从上至下依次是用户层I/O软件,设备独立性软件,设备驱动程序,中断处理程序
逻辑地址、线性地址、物理地址、总线地址、虚拟地址的区别?
逻辑地址:与内存段相关的偏移地址部分。例如,在C语言获取指针变量的值,就是逻辑地址,不和绝对的物理地址相关
线性地址:线性地址=逻辑地址+基地址
物理地址:如果启动了分页机制,那么线性地址使用页表项变换后就是物理地址。如果没有启用分页机制,那么线性地址就是物理地址。
总线地址 :x86下的I/O地址,ARM下的物理地址。
虚拟地址:MMU虚拟出来的地址
操作系统的内存一般有哪几种方式,各有什么优缺点
分页存储管理
:优点是不需要连续的内存空间,且内存利用率高(只有很小的页内碎片);缺点是 不易于实现内存共享与保护。
分段存储管理
优点是易于实现段内存共享和保护;缺点是每段都需要连续的内存空间,且内存利 用率较低(会产生外部碎片)。
段页式存储管理
优点是不需要连续的内存空间,内存利用率高(只有很小的页内碎片),且易于 实现段内存共享和保护;缺点是管理软件复杂性较高,需要的硬件以及占用的内存也有所增加,使得执 行速度下降。
用户空间和内核通信的方式有哪些
系统调用API
用户空间进程通过系统调用进入内核空间,访问指定的内核空间数据
驱动程序
用户空间进程可以使用封装后的系统调用接口访问驱动设备节点,和运行在内核空间的驱动程序通信
copy_to_user()、copy_from_user()
在驱动程序中调用的接口,实现用户空间和内核空间的数据拷贝操作,应用于实时性要求不太高的项目中
procfs
是一种特殊的文件系统,是Linux内核信息的抽象文件接口,大量内核中的信息以及可调用的参数都被作为常规文件映射到这个目录树中,用户可以直接通过echo或cat这样的命令对系统信息进行修改和查询。
共享内存mmap
在代码调用接口,实现内核空间与用户空间的地址映射,在实时性要求很高的项目中为首选
netlink
用户进程使用标准的socket API就可以使用netlink提供的强大功能
调用API read()/write()时,内核具体做了那些事情
用户进程调用read()/write()后进入内核空间-> 调用内核的sys_read()/sys_write()函数 -> 内核函数进一步调用fop.read()/fop.write()指向的函数,也就是驱动程序里具体的读写函数。
Boot loader、Linux内核、根文件系统三者之间的关系?
系统上电,就执行Bootloader来初始化处理器及其外设,将系统的软硬件环境带到一个合适的状态 Boot loader传递给Linux 内核 bootcmd和boot targs这两个比较重要的参数,让Linux内核知道从内存中那个地方读取相关的设备树,系统镜等文件,然后执行Linux内核。 Linux内核完成初始化之后就挂载某个文件系统作为根文件系统。
Bootloader的启动过程分为那两个阶段
第一个阶段是汇编阶段,完成一些依赖于CPU体系结构的初始化,并执行第二阶段的代码。 第二阶段是C语言的,进一步完成硬件的初始化,并建立内存映射,并将内存和根文件系统读取到内存中,然后启动内核
linux问题
IIC
IIC设备有两条接口线:串行数据 SDA 线和串行时钟 SCL 线。 连接到IIC总线上的设备通过这两根线互相传递信息,SDA 和 SCL 都是双向线,可以互相之间进行信息的交互,但是是一种同步半双工的通信方式,同一时刻只能有一个方向进行数据的操作,不能同时进行。
发送启动信号时,时钟线SCL需要稳定的保持在高电位,SDA由高电位变化为低电位。启动信号发送完成之后就可以进行数据的发送了。 如果在一次通信过程中,有两台以上的设备同时发出了起始信号,都希望获得总线控制权的话,那么第一个发出起始信号的设备将获得总线控制权,作为主设备开始传输数据。
停止信号是在时钟线SCL为高电位的时候,数据线SDA由低电平变化为高电平。停止信号一般是在通信完成之后或者通信失败退出之后发送的。
主题
主题