笔记整理—内核!启动!—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

相关文章

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo