linux *** 作系统架构概念

linux  *** 作系统架构概念,第1张

linux *** 作系统架构概念

1 Linux 分层概念

   

1)内核:Linux 启动首先启动内核,管理硬件,使能CPU,内存空间,硬盘接口,USB接口,网络接口等,应用所有的指令都需要通过内核传送给外设硬件,实现功能。

2)系统调用:Linux将内核功能接口设计为系统调用(system call),应用程序可以进行调用,这种系统调用大概200多个。

3) 用户空间:用户应用程序。

4)Linux定义库函数将系统调用组合某些常用的功能。

5)Shell:充当用户界面,可以通过系统调用,和内存通讯。

 

区分内核和用户空间原因:

 1) 应用程序的移植性。

 2) 保护内核,

 3) 两个空间的切换条件:系统调用和硬件中断。

2 内核部分详解

 

内核是 *** 作系统的核心,主要负责管理系统的进程,内存,设备驱动,虚拟系统文件,网络系统,决定着系统的性能和稳定性。

 1 进程调度;2 进程间通信;3 内存管理;4 虚拟文件系统;5 网络接口。

Linux 系统移植组成部分:

1) 搭建交叉开发环境

  在PC机开发出能够在目标机(开发板)上运行的程序。

原因是1 嵌入式系统的硬件资源不是很丰富,入CPU的主频低内存容量小,PC机的CPU快,硬件资源多,开发效率高;2 嵌入式系统的MCU体系结构和指令集不同。

2) BootLoader的选择和移植‘

   BootLoader在 *** 作系统运行之前运行的程序,初始化硬件设备,建立内存空间的映射图,将系统的软件和硬件准备好,为最终的调用 *** 作系统内核做准备好正确的环境。

SRAM上电可以运行,内存(SDRAM)需要初始化才能够工作,所以BootLoader需要对内存进行初始化,并且把内核搬到内存中。

 BootLoader分类:

以Uboot为列,介绍如下:

 1) 源码开放

 2) 支持多种 *** 作系统,如linux,QNX,NetBSD,VxWorks,RTEMS,ARTOS,LynxOS

 3) 支持多种处理器架构,如PowerPC,ARM,X86,MIPS,XScale

 4) 高度灵活的功能设置

 5) 丰富的设备驱动源码

 6) 较高的可靠性和稳定性

 Uboot的启动过程:

 BootLoader分为stage1 和stage2 两部分,Stage1部分主要是依赖于CPU体系结构的代码,可以用汇编实现;Stage2 部分用C语言实现,实现复杂的功能,具有更好的可读性和移植性。

Stage1 代码通常放在start.s文件中。

  1. 定义入口,由于一个可执行的image文件必须有一个入口点,只能有一个全局入口,通常是ROM的0x0地址,编译器必须知道该入口,可以通过修改连接器的脚本完成。
  2. 设置异常向量。
  3. 设置CPU的速度,时钟频率,中断控制寄存器。
  4. 初始化内存控制器。
  5. 将rom中的代码复制到ram中。
  6. 初始化堆栈。
  7. 转到ram中执行,可以用指令ldrpc实现。

Stage2 ib_arm/board.c中的start armboot是C语言开始的函数,也是整个启动代码中C语言的主函数。

  1. 调用一系列的初始化函数。
  2. 初始化flash设备。
  3. 初始化系统内存分配函数。
  4. 初始化nand设备,显示设备,网络设备。
  5. 进入命令循环(整个boot的工作循环),接受用户输入的命令,执行对应的工作。

3 Kernel的配置,编译,移植

  1. 下载内核并拷贝到指定目录
  2. 修改顶层的Makefile文件,主要修改平台的体系架构和交叉编译器
  3. 拷贝标准版的配置文件,目的是得到我们开发板的配置信息,就是把相应平台的——deconfig直接拷贝到顶层的config文件中,config文件中记录了移植平台的平台信息,系统会选择对应的相关代码和模块,然后保存配置信息,系统会把所以的配置信息保存在顶层的config文件中。
  4. 配置内核,在Kconfig和Makefile 的文件进行配置。
  5. 编译内核,编译是静态编译,会根据config文件选择源代码进行编译。
  6. 通过tftp网络服务下载测试内核。

4 文件系统概念

  1)文件系统是内核一部分,主要实现系统的存储介质和其他的资源交互,嵌入式 *** 作系统分为uboot,kernel,文件系统。BootLoader的加载了内核,内核启动,加载文件系统,表示整个linux系统启动。Linux 启动时,第一个挂载必须是根文件系统,成功之后才能手动或自动的挂在其他的文件系统,挂在文件系统时,需要有文件系统的类型,文件系统本身以及挂载点。

  2)根文件系统目录:

  1. bin目录:存放用户基本命令,必须和根文件系统在一个分区,在挂在其他的文件系统之前已经可以使用。
  2. sbin目录:存放系统命令,主要用于存放基本的系统命令,用于启动和修复系统等,必须和根文件系统相同分区,在挂在其他文件系统之前已经可以使用。
  3. dev目录:存放设备文件,以文件的形式访问各种设备,读写 *** 作,类似于外设驱动。
  4. etc目录:存放各种配置文件,目录文件是可选的,依赖于系统中所拥有的应用程序是否需要配置文件,这部分可以裁剪。
  5. lib目录:存放共享库和可加载驱动程序,共享库用于启动系统。
  6. home目录:用户目录,可选,存放用户的相关配置文件。
  7. root目录:根用户目录。
  8. usr目录:该目录内容可以存放在另外一个分区,系统启动之后可以再挂接到该目录下。里面存放的是共享,只读的程序和数据。
  9. var目录:与usr目录相反,存放可变的数据,如spool目录,log文件,临时文件。
  10. Proc目录:空目录,可作为proc文件系统的挂接点,proc文件系统是虚拟的文件系统,没有实际的存储设备,里面的目录,文件都是由内核临时生成的,表示系统的状态,也可以 *** 作其中的文件控制系统。
  11. Mnt目录:用于临时挂在某个文件系统的挂接点,一般是空目录,也可创建子目录,临时挂在光盘或硬盘。
  12. Tmp目录:存放临时文件,并且可以访问。

可以使用Busybox制作文件系统,创建上面的目录以及目录下面的文件。

主流的文件系统格式:Ext2,Ext3,JFS,XFS,VFAT等。

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5714611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存