Linux驱动开发(一)之了解Linux

223次阅读

Linux驱动开发(一)之了解Linux

[toc] 到目前位置,Linux内核是最大的,也是最成功的开源项目之一。Linux内核、GNU软件与许多其他的开源组件一起提供了一个完整的免费操作系统:GNU/Linux。而嵌入式Linux是Linux内核和多个开源组件在嵌入式系统中的运用实例。


引导加载器、内核、系统调用接口、C运行时库、系统共享库和根文件系统,以上列出的时嵌入式Linux的主要部件。


引导加载器

简介

在Linux启动之前,需要一小段代码来初始化程序,这段代码与所使用机器设备有很大的相关性,Linux只要求引导加载器执行少量的工作

  • 配置系统内存
  • 在正确的内存地址加载内核映像和设备树
  • 在正确的内存地址加载内存磁盘设备
  • 设置内核的命令行和其他参数(例如设备树、机器类型)
  • 此外,另一个基本功能是在启动内核之前初始化一个串口控制台

在目前主流的引导加载器中,U-Boot是ARM Linux的标准引导加载器

U-Boot

主要特性:

  • 尺寸小
  • 启动快
  • 可移植
  • 可配置
  • 可调试

Linux内核

Linux内核是Linux系统的底层软件,它负责管理硬件,运行用户态软件,并且负责系统的整体安全性和完整性。

历程

当内核从主线版本转入稳定版本之后会发生两件事:1,在修复了一些错误后,他们可能结束其生命周期,内核维护人员将不再对该内核版本进行维护;2,这个版本被划归到长期维护类别里,在相当长的时间里,维护者都会继续维护这个内核版本。

发行版类别
  • 预发行版(Prepatch)
  • 主线(Mainline)
  • 稳定分支(Stable)
  • 长期维护(Longterm)

除非是使用的从Kernel.org下载、编译并安装的内核版本,否则你运行的都是某个发行版本的内核。

使用以下命令来确定你使用的内核版本

uname -r

系统调用接口和C运行时库

系统调用时应用程序和Linux内核之间的基本接口,也是用户态应用程序与内核交互的唯一途径。

C运行时库(标准C库)定义了宏、类型、字符串处理函数、数学运算函数、输入/输出处理、内存分配和一些与操作系统服务相关的其他功能。

目前有许多种C运行时库:gilbc,uClibc,eglibc,dietlibc,newlib

必须在交叉编译生成工具链时选择使用哪个C库,因为GCC编译器在编译时要依据特定的C库

就完善程度而言推荐使用glibc库

系统共享库

系统共享库时程序启动时预加载的库。

根文件系统

根文件系统是所有文件(包括设备节点)存储的地方,这些文件以一定的文件层次结构组织在一起。通常根文件系统挂载到“/”下,不同于Windows常见的分盘。根文件系统包含所有的二进制文件、应用程序和数据。

嵌入式Linux系统的根文件系统通常包含以下内容

  • /bin:系统启动时需要的命令
  • /sbin:与/bin目录基本一致,通常不适合普通用户使用
  • etc:针对当前机器的配置文件
  • /home:“我的文档”
  • /root:系统中超级用户的主文件夹
  • /dev:设备文件,用户与系统的各种设备进行交互
  • /tmp:临时文件
  • /boot:存放引导加载程序使用的文件
  • /mnt:临时挂载文件系统的挂载点
  • /opt:附加的应用程序软件包
  • /usr:用户目录
  • /var:存放数据值内容
  • /sys:把内核模块的设备信息和驱动信息导出到用户态,同时也可以通过用户态对设备进行配置
  • /proc:表示内核的当前状态信息

liubobo
版权声明:本站原创文章,由 liubobo2021-12-24发表,共计1359字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。