Linux驱动(2)---Linux内核的组成

1.Linux内核源码目录

arch包含和硬件体系相关结构相关源码,每个平台占用一个目录

block:块设备驱动程序I/O调度

crypto:常用加密和三列算法,还有一些压缩和CRC校验算法。

documentation:内核个部分的通用解释和注释.。

drivers:设备驱动程序,每个不同的驱动占用一个子目录,如char,block,net,mtd.

fs:所支持各类文件系统,如EXT,FAT,NTFS,JFFS2等。

include:头文件,与系统相关的头文件放置在include/linux自目录下。

init:内核初始化代码。

ipc:进程间通讯代码。

Kernel:内核最核心的部分,包裹进程调度,定时器,和平台相关的一部分代码放置在里面。

lib:库文件代码。

mn:内存管理代码。

net:网络相关代码,实现各种常见的网络协议。

scripts:用于配制内核的脚本文件。

security:主要是一个SELinux的模块。

sound:ALSA,OSS音频设备的驱动核心代码和常用设备驱动。

USR:实现用于大宝和压缩的CPIO等。

2.Linux内核的组成部分

Linux内核主要有进程调度(SCHED),内存管理(MM),虚拟文件系统(VFS),网络接口(NET)和进程间通信(IPC)5个子系统组成

2.1 进程调度

绝大多数进程都是由用户空间的应用创建的,当他们存在底层资源和硬件访问的需求,就会通过系统调用进入内核空寂那。有时候,如果需要几个并法执行执行的任务,可以启动内核县城,这些现成没有用户空间。启动内和线程的函数为:

pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);

2.2内存管理

内存管理主要作用是控制多个进程安全地共享主内存区域。当CPU提供内存管理单元MMU时,LInux的内存管理由于每个进程完成虚拟内存到物理内存的转换。

一般32为处理器的Linux的每个进程享有4GB内存空间,0~3G

属于用户空间,3~4G属于内核空间。

当然内和空间和和用户空间的具体界限可以调整的,在内核配置选项 Processor type and features/kernel features-> Memory Split下,可以设置界限为2G或者3G。

2.3.虚拟文件系统

Linux虚拟文件系统隐藏了各种硬件的具体细节,为所有设备提供统一的接口

2.4.网络接口 

网络接口提供了对各种网络标准的存储和各种网络硬件的支持。

Linux中网络接口可以分为网络协议和 网络驱动程序,网络协议部分负责实现每种可能的网络协议,网络设备驱动负责与硬件设备通信。

2.5.进程间通信

Linux支持进程间的多种通讯机制,包括信号量,共享内存,消息队列,管道,Unix域套接字等,

 

3.Linux内核空间与用户空间。

ARM处理器分为7种工作模式。

用户模式(usr)大多数应用程序运行在用户模式下,当处理器运行在用户模式下,某些被保护的系统资源是不能访问的
快速中断模式(frq)用于高速数据传输或者通道处理
外部中断模式(irq)用于处理通用的中断
管理模式(SVC)操作系统使用的保护模式
数据访问的中止模式(abt)当数据或者指令预取中止时进入该模式,可以用于虚拟存储及存储保护
系统模式(sys)运行具有特权的操作系统的人物
为定义指令中止模式(und)党委定义的指令执行时进入该模式,可用于支持硬件协处理器的仿真

ARM linux的系统调用实现原理是采用swi软件中从户用(usr)模式陷入管理模式(svc)。

x86处理器包含 ring0~3,在ring0下,可以执行特权指令,对任何I/O设备都有权访问,而Ring3被限制很多操作。

Linux系统充分利用CPU硬件特性,它只是使用了两级。在Linux系统中,内核可进行任何操作,而应用程序则被进行对硬件直接访问和对内存的未授权访问。

内核空间和用户空间用来去区分程序执行两种不同状态,使用不同的地址。Linux只能通过系统调用和硬件中断完成用户空间到内核空间的控制转移。 

3.Linux内核的引导。

一般SOC内迁bootrom,上电时bootm运行,对CPU0而言,bootrom会引导bootloader。

init是用户空间init程序,init再派生其他进程。

bootrom是各个厂家根据自身情况编写的,一般具有SD,EMMC,NAND,USB等介质启动的能力。

用古init程序常有以下:busybox init,Sysvinit,systemd。把整个系统启动,最后成为一个进程树。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/643069.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

访存优化实践之一 : CPU、GPU、DDR与访存路径介绍

一、CPU的访存路径 上图是目前主流的CPU架构介绍。可以看到,CPU的访存路径:先经过MMU,然后经过Cache,最后到达DRAM。这其中涉及到的关键内容为基于MMU的内存管理以及缓存机制。 1.1、基于MMU的内存管理 众所周知,在计算机设计之处是没有虚拟地址的概念的,CPU发出的地址即…

cocosCreator动态生成二维码

cocosCreator 版本:3.7.2 开发语言:typeScript 我们在游戏开发中,经常会生成一个专属于玩家个人的二维码,比如说推广、充值等功能。 接到这个任务,在网上找了下,还是有很多教程的。但是这些教程大部分都是用…

【全网最全】2024电工杯数学建模B题53页成品论文+完整matlab代码+完整python代码+数据预处理+可视化结果等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片链接,那是获取资料的入口! 【全网最全】2024电工杯数学建模B题53页成品论文完整matlab、py代码19建模过程代码数据等(后续会更新)「首先来看看目前已有的资…

未来十年,IT行业的无限可能!

未来十年,IT行业的无限可能! 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学…

docker- 镜像 导出导入

文章目录 前言docker- 镜像 导出导入1. 导出2. 删除镜像3. 导入镜像 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话&…

二叉树基于队列实现的操作详解

一、队列知识补充 有关队列的知识请详见博主的另一篇博客:http://t.csdnimg.cn/3PwO4 本文仅仅附上需要的队列操作供读者参考 //结构体定义 typedef struct BinaryTreeNode* QDataType;typedef struct QueueNode {struct QueueNode* next;QDataType val; }QNode;…

使用VirtualBox+vagrant创建CentOS7虚拟机

1.VirtualBox 1.1.什么是VirtualBox VirtualBox 是一款开源虚拟机软件。VirtualBox 是由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件,使用Qt编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。 1.2.下载Virtual…

国产信创数据库:使用MySQL等开源产品能做信创替换吗?

随着信创关键行业替代加速推进,多数企业习惯原来标配即:centosmysql等开源产品,而大家讨论核心焦点在于“什么是信创数据库”,使用 MySQL 能做信创替换吗?基于开源二开的数据库算信创库吗?等等。想来这个问…

第十一届蓝桥杯物联网试题(国赛)

国赛题目看着简单其实还是挺复杂的,所以说不能掉以轻心,目前遇到的问日主要有以下几点: 本次题主要注重的是信息交互,与A板通信的有电脑主机和B板,所以处理好这里面的交互过程很重要 国赛中避免不了会收到其他选手的…

H3CNE-6-ICMP数据包分析

ICMP:Internet Control Message Protocol ICMP用来传递差错、控制、查询等信息 Wireshark抓包 Wireshark下载国内镜像 ICMP数据包格式 Type:表示ICMP消息类型 Code:表示同一消息类型中的不同信息 ICMP消息类型和编码类型 ICMP应用 &…

Ollydbg动态分析MessageBoxA输出hellow world

一、目的 找到main函数找到调用的MessageBoxA函数 测试源码 #include <iostream> #include <windows.h>int main() {MessageBoxA(NULL, "Hellow World", "Title", MB_OK);return 1; }二、快捷键 指令快捷键说明RestartCtrlF2重新开始调试S…

【Qt】Qt多元素控件深入解析与实战应用:列表(QListWidget)、表格(QTableWidget)与树形(QTreeWidget)结构

文章目录 前言&#xff1a;Qt中多元素控件&#xff1a;1. List Widget1.1. 代码示例: 使用 ListWidget 2.Table Widget2.1. 代码示例: 使用 QTableWidget 3. Tree Widget3.1. 代码示例: 使用 QTreeWidget 总结&#xff1a; 前言&#xff1a; 在Qt框架中&#xff0c;用户界面的…

mac下安装airflow

背景&#xff1a;因为用的是Mac的M芯片的电脑&#xff0c;安装很多东西都经常报错&#xff0c;最近在研究怎么把大数据集群上的crontab下的任务都配置到一个可视化工具中&#xff0c;发现airflow好像是个不错的选择&#xff0c;然后就研究怎么先安装使用起来&#xff0c;后面再…

Django5+React18前后端分离开发实战05 序列化

Django REST Framework We will use the Django REST Framework to help build our API. 我们会使用 Django REST Framework 框架来构建我们的API。 You can build APIs on your own in Django but it will take a lot of work. 你可以使用Django自己构建API&#xff0c;但是…

【C++进阶】AVL树

0.前言 前面我们已经学习过二叉搜索树了&#xff0c;但如果我们是用二叉搜索树来封装map和set等关联式容器是有缺陷的&#xff0c;很可能会退化为单分支的情况&#xff0c;那样效率就极低了&#xff0c;那么有没有方法来弥补二叉搜索树的缺陷呢&#xff1f; 那么AVL树就出现了&…

nuxt: generate打包后访问资源404问题

现象 使用Nuxt.js开发的个人页面&#xff0c;部署到nginx服务器中&#xff0c;/_nuxt/*.js、/_nuxt/*.css等静态问题不能访问&#xff0c;提示404错误。 而我们的这些资源文件是存在的。 解决方法 加上此处代码进行上下文配置 baseURL: /nuxt/ 此时在nginx配置 /nuxt 代理 lo…

QAnything 1.4.1 中的文档解析

2024年初我们开源了QAnything&#xff0c;一个基于检索增强生成式应用&#xff08;RAG&#xff09;的本地知识库问答系统。对于本地知识库&#xff0c;QAnything支持多种格式的文档输入&#xff0c;允许用户上传包括PDF、图片、Word、PowerPoint、Excel、TXT&#xff0c;甚至音…

m1系列芯片aarch64架构使用docker-compose安装rocketmq5.0以及运维控制台

之前看到 DockerHub 上有大佬制作了 m1 芯片, aarch64架构的 rocketmq 镜像, 所以就尝试的安装了下, 亲测可用: 一. docker-compose.yml 文件命令 volumes 挂载目录需要换成自己的目录 注意 depends_on 标签, broker 和 console 的 启动要晚于 namesrv, 因为 broker 需要注册…

SpringBoot 集成 ChatGPT(附实战源码)

建项目 项目结构 application.properties openai.chatgtp.modelgpt-3.5-turbo openai.chatgtp.api.keyREPLACE_WITH_YOUR_API_KEY openai.chatgtp.api.urlhttps://api.openai.com/v1/chat/completionsopenai.chatgtp.max-completions1 openai.chatgtp.temperature0 openai.cha…

VSCode配置Lua5.4安装

参考&#xff1a;VSCode 配置 Lua 开发环境(清晰明了)_lua vscode-CSDN博客 1.下载 Lua Binaries Download (sourceforge.net) 2.配置环境变量 解压放到某文件夹&#xff1a; 环境变量&#xff1a; 3.VSCode安装插件 4.配置 5.测试