笔记整理—内核!启动!—kernel部分(1)驱动与内核的关系

2024-09-07 22:44

本文主要是介绍笔记整理—内核!启动!—kernel部分(1)驱动与内核的关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        首先,恭喜完成了uboot部分的内容整理,其次补充一点,uboot第一部分和第二部分的工作不是一定的,在不同的版本中,可能这个初始化早一点,那个的又放在了第二部分,版本不同,造成的工作顺序不同,但终归是要完成基本内容初始化并传参给kernel的。

        那么至于驱动与内核的关系,用一张图来说明最适合不过:

        驱动位于OS层的中下层与硬件相接。驱动是内核中的硬件设备管理模块,驱动工作在内核态,驱动程序故障可能会导致整个内存崩溃(与内存有很大的关系)。驱动程序漏洞也会造成内核不安全,(依靠驱动的漏洞入侵)本质原因也是因为驱动运行在内核态。

        内核态是对于cpu而言的,还被分为用户态,取决于跑关于什么的代码,单核的cpu只能在同一时间存在一种状态。内核态访问内存不受限制,用户态访问不能访问的区域会引发段错误。内核版本更新的速度,意味着驱动设备发展的速度之快。

        应用程序不属于内核态,如vim等。应用程序工作在用户态。

        

        应用程序的崩溃一般不会影响到内核。内核是田,田上的1、2、3、4、5.....是菜,菜会被养死,但田还在那,因为内存映射的存在,隔壁的菜也不一定会死,如果内核崩溃,应用会全部崩溃。应用程序调用的是内核的API进行工作。

         根文件系统:为系统提供根目录。进程1存放在根文件系统中:是内核与用户态的边界,也是第一个应用程序。内核启动在后半的时候就会进行根文件的装载。

        紧耦合:文件直接的变量,可以相互调用,机器调用明白,但人就不一定能明白了。

        模块化:各功能代码之间彼此独立,函数间的相互调用极少,遵循一个接口规范,实现松耦合。高模块化体现在裁剪性、低耦合性。

        Linux在配置时进行功能裁剪,灵活但复杂——静态升级。

        动态升级:不用重启,不用重新烧录,依靠模块化设计实现。

        动态安装与卸载:如U盘。

        模块化设计的优点:动态可裁剪、灵活;可拓展(动态装卸、新硬件支持等);利于分工协作。

        kbuild:kernel build 内核的编译文件,内核编译体系要用到的文件。

        mk文件:板卡移植厂商自己写的编译文件,针对该厂的出厂板卡进行细节调整。

        linux本身的复杂度决定了其配置方式不能像是uboot一样进行配置,所以linux将依赖于kbuild和kconfig进行内核的配置。

        内核文件目录:

        arch目录:architecture——架构,就cpu而言。

        block目录:块设备,与各种存储设备相关的管理代码。

        crypto目录:加密算法相关,crc32.....等相关校验算法之类的加密算法。

        documentation目录:文档相关。

        drivers目录:驱动目录,存放所有支持的硬件目录。

        firmware目录:固件,是一种软件,但是被固化到了IC中运行,如s5pv210的IROM代码。

        fs目录:file system文件系统支持项。

        include目录:公用的,(各cpu架构)共用的头文件,特有的头文件在arch里面。

        init目录:初始化目录,内核初始化时需要使用的代码。

        ipc目录:inter process commuication 进程间通信。

        kernel目录:linux内核。

        lib目录:库,公用的一些库函数,linux内核编译不能使用c标准库,因为标准库是针对应用层的,用不了标准c语言库函数,但所用的方法几乎一样。printf:应用层。printk:内核打印使用。

        mm目录:memory management 内存管理相关。

        net目录:网络相关目录,如tcp/ip协议栈。

        samples目录:示例。

        scripts目录:脚本文件,linux内核配置编译、生产所用,是一个辅助工具。

        security目录:安全相关。

        sound目录:音频处理相关。

        tools目录:linux中使用的工具。

        usr目录:initramfs与内核启动相关。

        virt目录:内核虚拟机。

        本章先写到这吧,后面将继续对内核进行相应的介绍。        

这篇关于笔记整理—内核!启动!—kernel部分(1)驱动与内核的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146372

相关文章

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl