重头开始嵌入式第四十八天(Linux内核驱动 linux启动流程)

news2024/12/23 9:10:39

目录

什么是操作系统?

一、管理硬件资源

二、提供用户接口

三、管理软件资源

什么是操作系统内核?

一、主要功能

 1. 进程管理:

2. 内存管理:

3. 设备管理:

4. 文件系统管理:

二、特点

什么是驱动?

Linux启动流程

norflash与nandflash的区别

1. 接口与寻址方式:

2. 存储容量与成本:

3. 读写性能:

4. 数据存储的可靠性:

5. 应用场景:

bootloader程序工作过程:

一、硬件初始化

二、引导加载模式选择

三、内核加载

四、内核启动

操作步骤

uboot命令:

环境参数:

中途错误处理:


什么是操作系统?

操作系统是管理计算机硬件与软件资源的计算机程序。它主要有以下几个重要作用:

一、管理硬件资源

 1. 处理器管理:合理分配处理器的时间,使多个程序能够并发执行,提高处理器的利用率。例如,当你同时打开多个应用程序时,操作系统会调度处理器在不同程序之间快速切换,让每个程序都有机会运行。

2. 内存管理:负责内存的分配和回收,确保各个程序能够安全地使用内存空间。它会将内存划分成不同的区域,分配给不同的程序,同时防止程序之间的内存冲突。

3. 设备管理:对计算机的各种外部设备(如打印机、键盘、鼠标、硬盘等)进行管理和控制。操作系统会为设备驱动程序提供统一的接口,使得不同的设备能够在系统中协同工作。

二、提供用户接口

 1. 命令行界面:用户可以通过输入特定的命令来与操作系统进行交互,执行各种操作。这种方式对于专业用户来说比较高效,可以快速执行复杂的任务。

2. 图形用户界面:以直观的图形图标和窗口形式呈现,用户可以通过鼠标点击、拖拽等操作来完成各种任务。例如在 Windows 系统中,你可以通过点击图标打开应用程序、调整窗口大小、进行文件管理等操作。

三、管理软件资源

 1. 文件管理:负责文件的存储、检索、更新和保护。操作系统会将文件存储在磁盘等存储设备上,并提供文件系统来组织和管理文件。你可以通过操作系统提供的文件管理器来创建、删除、复制、移动文件等操作。

2. 程序管理:包括程序的安装、卸载、运行和监控。操作系统会确保程序在正确的环境下运行,并处理程序运行过程中出现的错误。例如,当一个程序出现崩溃时,操作系统会尝试恢复并通知用户。 常见的操作系统有 Windows、macOS、Linux 等。不同的操作系统在功能、性能、用户界面等方面可能会有所不同,但它们的核心目标都是为了有效地管理计算机资源,为用户和应用程序提供一个稳定、高效的运行环境。

什么是操作系统内核?

操作系统内核是操作系统的核心部分,它负责管理系统的最基本功能和资源,直接与硬件交互,并为上层软件提供基础服务。

一、主要功能

 1. 进程管理:

- 负责创建、调度和终止进程。当你打开一个应用程序时,内核会为这个程序创建一个进程,并分配相应的资源。例如,在多任务操作系统中,内核会根据一定的算法在不同的进程之间切换处理器的使用权,以保证每个进程都能得到执行的机会。

- 实现进程间的通信和同步机制,确保不同进程之间能够协调工作。比如,多个进程可能需要同时访问一个共享资源,内核需要提供机制来防止资源冲突和数据不一致。

2. 内存管理:

- 负责分配和回收内存空间。内核会根据程序的需求,为其分配适当大小的内存区域,并在程序不再需要时回收这些内存。例如,当你打开一个大型软件时,内核会为其分配足够的内存来存储程序的数据和代码。

- 提供内存保护机制,防止一个程序访问其他程序的内存空间,从而提高系统的安全性和稳定性。

3. 设备管理:

- 管理计算机的各种硬件设备,包括输入输出设备、存储设备等。内核会为设备驱动程序提供接口,使得设备能够与操作系统进行交互。例如,当你插入一个 USB 存储设备时,内核会检测到这个设备,并加载相应的驱动程序,使你能够访问这个设备上的文件。

- 实现设备的调度和缓冲管理,提高设备的利用率和性能。比如,对于硬盘等存储设备,内核会采用缓冲技术,将经常访问的数据缓存在内存中,以减少对硬盘的访问次数,提高系统的性能。

4. 文件系统管理:

- 提供文件系统的支持,负责文件的存储、检索和更新。内核会将文件存储在磁盘等存储设备上,并提供文件系统的结构和操作接口,使得用户和应用程序能够方便地管理文件。例如,你可以通过操作系统的文件管理器创建、删除、复制和移动文件,这些操作都是由内核中的文件系统管理模块来实现的。

- 实现文件的权限管理和安全机制,保护文件的安全性和完整性。内核会根据用户的权限设置,限制对文件的访问和操作,防止未经授权的用户访问敏感文件。

二、特点

 1. 高效性:内核需要高效地管理系统资源,以确保系统的性能和响应速度。它通常采用优化的算法和数据结构,以最小的开销完成各种管理任务。

2. 稳定性:作为操作系统的核心部分,内核的稳定性至关重要。一旦内核出现故障,可能会导致整个系统崩溃。因此,内核通常经过严格的测试和验证,以确保其稳定性和可靠性。

3. 可扩展性:随着计算机技术的不断发展,新的硬件设备和软件功能不断涌现。内核需要具备良好的可扩展性,以便能够轻松地适应新的环境和需求。

4. 安全性:内核负责管理系统的资源和安全机制,因此需要具备高度的安全性。它需要防止恶意软件的攻击和非法访问,保护系统的安全和稳定。 总之,操作系统内核是操作系统的核心组成部分,它负责管理系统的最基本功能和资源,为上层软件提供基础服务。了解内核的功能和特点,有助于更好地理解操作系统的工作原理和性能优化。

什么是驱动?

驱动,全称为设备驱动程序,是一种特殊的软件,它在计算机系统中起着至关重要的作用。

主要作用:

  1. 连接硬件与操作系统:驱动程序充当了硬件设备和操作系统之间的桥梁。不同的硬件设备有着各自独特的工作方式和指令集,而操作系统需要一种统一的方法来与这些设备进行交互。驱动程序将硬件设备的特定功能和操作转化为操作系统能够理解的指令和数据格式,使得操作系统可以控制和管理硬件设备。例如,当你插入一个打印机到计算机上时,操作系统需要通过打印机驱动程序来识别这个设备,并与它进行通信,以实现打印功能。
  2. 实现设备的特定功能:硬件设备通常具有多种功能和特性,驱动程序负责实现这些功能并将其暴露给操作系统和应用程序。例如,显卡驱动程序不仅要使显卡能够在屏幕上显示图像,还要支持各种图形特效、分辨率设置和多显示器配置等功能。
  3. 优化设备性能:驱动程序可以针对特定的硬件设备进行优化,以提高设备的性能和效率。例如,硬盘驱动程序可以采用缓存技术和优化的磁盘访问算法,以加快数据的读写速度;显卡驱动程序可以对图形处理进行优化,提高游戏和图形应用的帧率。

Linux启动流程

Linux启动过程:
1. 先启动bootloader—一段裸机程序,为内核启动准备环境
2. 启动内核 --- 操作系统
3. 加载(挂载)根文件系统

norflash与nandflash的区别

NorFlash与NandFlash有诸多区别,主要体现在以下方面:

1. 接口与寻址方式:

- NorFlash:带有SRAM接口,有足够的地址引脚来寻址,可以像普通内存一样随机访问,能够很容易地存取其内部的每一个字节,这使得它支持片上执行(XIP,Execute In Place),即应用程序可以直接在NorFlash闪存内运行,不必先把代码读到系统RAM中。

- NandFlash:使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。它的地址线和数据线是复用的,不能像NorFlash那样直接随机访问,只能以页(Page)为单位进行读取,以块(Block)为单位进行擦除和写入操作。

2. 存储容量与成本:

- 存储容量:NorFlash的存储容量相对较小,一般在1MB-16MB之间比较常见,虽然也有更高容量的产品,但整体上容量提升的难度较大且成本较高。NandFlash则能够提供更高的存储容量,常见的有几百MB甚至几十GB的容量,更适合大容量数据存储的需求。

- 成本:在相同容量的情况下,NorFlash的成本更高。因为NorFlash的生产工艺相对复杂,且每个存储单元的电路结构相对更复杂,导致其成本较高。而NandFlash由于生产过程相对简单,在大容量存储时具有明显的成本优势。

3. 读写性能:

- 读取速度:NorFlash的读取速度较快,与NandFlash相比具有一定优势,特别是在小容量数据读取时,速度差异较为明显。

- 写入速度:NandFlash的写入速度比NorFlash快很多。NorFlash的写入操作相对较慢,这是其一个较大的缺点。

- 擦除速度:NandFlash的擦除速度也远远快于NorFlash。NorFlash擦除一个块的时间可能需要5s左右,而NandFlash擦除一个块通常不超过4ms。

4. 数据存储的可靠性:

- 寿命(耐用性):NorFlash的擦写次数一般为十万次左右,而NandFlash每个块的最大擦写次数可达一百万次,NandFlash在寿命方面更具优势。

- 位交换现象:两种闪存都受位交换现象的困扰,但NandFlash发生的次数相对更多。位交换是指一个比特位会发生反转或被报告反转,对于存储关键文件可能会导致系统故障。在使用NandFlash时,通常需要使用错误探测/错误更正(EDC/ECC)算法来确保数据的可靠性。

- 坏块处理:NorFlash的坏块相对较少,并且在出厂时基本已经被标记出来,使用过程中遇到坏块的概率较低。NandFlash的坏块是随机分布的,需要在使用前对介质进行初始化扫描以发现坏块,并将坏块标记为不可用,否则可能会导致数据存储错误。

5. 应用场景:

- NorFlash:适用于对代码执行速度要求较高、存储容量需求不大且需要直接在闪存上运行代码的场景,如嵌入式系统中的BIOS、路由器的固件等。

- NandFlash:常用于大容量数据存储的设备,如固态硬盘(SSD)、U盘、存储卡、智能手机、平板电脑等。

bootloader程序工作过程:

初始化 CPU( 工作模式 )
初始化堆栈
初始化异常向量表
初始化时钟
初始化内存
关看门狗
Cache
MMU
初始化相关的硬件设备 ( 调试串口、网口、 led)
集成相关的通信协议
搬移内核到内存
向内核传参 -- 根文件系统位置,调试端口
Linux 启动过程:
1. 先启动 bootloader —一段裸机程序,为内核启动准备环境
2. 启动内核 --- 操作系统
3. 加载 ( 挂载 ) 根文件系统
引导内核启动
------CPU 的控制权彻底移交给内核, bootloader 不再
控制 CPU
Bootloader 是在操作系统内核运行之前运行的一段小程序,其主要工作过程如下:

一、硬件初始化

 1. 上电复位:当系统上电或复位时,处理器会从一个固定的地址开始执行指令,这个地址通常指向 Bootloader 的存储位置。
2. 处理器初始化:Bootloader 首先对处理器进行初始化,包括设置处理器的工作模式、时钟频率、中断向量表等。这确保处理器处于一个已知的、稳定的状态,以便后续的操作能够正确执行。 3. 内存初始化:Bootloader 接着初始化系统内存,包括检测内存的大小和类型、设置内存控制器的参数等。这为后续的代码加载和执行提供了必要的内存空间。
4. 其他硬件初始化:根据具体的系统需求,Bootloader 还可能对其他硬件设备进行初始化,如串口、网络接口、存储设备等。这些设备可能在后续的启动过程中被用于调试、下载操作系统内核或其他数据。

二、引导加载模式选择

 1. 自动引导:在大多数情况下,Bootloader 会自动尝试从预设的存储设备中加载操作系统内核。例如,它可能会从硬盘、闪存、网络等设备中查找内核映像文件,并将其加载到内存中准备执行。 2. 手动引导:有些 Bootloader 还提供了手动引导模式,允许用户通过特定的按键组合或命令行界面来选择引导设备、内核映像文件或其他启动参数。这在系统出现故障或需要进行特殊的启动配置时非常有用。

三、内核加载

 1. 查找内核映像:Bootloader 根据预设的搜索顺序和规则,在存储设备中查找操作系统内核的映像文件。这个映像文件通常包含了内核的代码和数据,以及一些启动参数和配置信息。
2. 加载内核到内存:一旦找到内核映像文件,Bootloader 将其加载到内存中的特定位置。这个位置通常是由内核的设计和启动要求决定的,一般是在内存的高地址区域,以避免与 Bootloader 本身和其他低地址的系统资源发生冲突。
3. 传递启动参数:Bootloader 还可能需要将一些启动参数传递给内核,这些参数可以包括内存大小、根文件系统的位置、设备驱动程序的配置等。这些参数通常通过特定的寄存器或内存区域传递给内核,以便内核在启动时能够正确地配置和初始化系统。

四、内核启动

 1. 跳转执行:当内核映像文件被成功加载到内存并传递了必要的启动参数后,Bootloader 最后一步是跳转到内核的入口点开始执行内核代码。这个入口点通常是一个特定的函数或地址,由内核的设计和编译过程决定。
2. 内核初始化:内核在开始执行后,会进行一系列的初始化操作,包括设置处理器的特权级别、初始化内存管理单元、建立进程调度器、加载设备驱动程序等。这些操作将使系统进入一个可运行的状态,准备为用户提供各种服务和应用程序。 总之,Bootloader 在系统启动过程中起着至关重要的作用,它负责初始化硬件、加载操作系统内核并传递启动参数,为系统的正常运行奠定了基础。不同的系统和 Bootloader 实现可能会有所不同,但基本的工作过程大致相似。

操作步骤

uboot命令:

环境参数:

中途错误处理:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebGoat JAVA反序列化漏洞源码分析

目录 InsecureDeserializationTask.java 代码分析 反序列化漏洞知识补充 VulnerableTaskHolder类分析 poc 编写 WebGoat 靶场地址:GitHub - WebGoat/WebGoat: WebGoat is a deliberately insecure application 这里就不介绍怎么搭建了,可以参考其他…

yq 工具

文章目录 yq命令快速 Recipes查找数组中的项目查找并更新数组中的项目深度修剪一棵树对数组中的项目进行多次或复杂的更新按字段对数组进行排序 OperatorsOmitOmit keys from mapOmit indices from array DeleteDelete entry in mapDelete nested entry in mapDelete entry in …

【重学 MySQL】六十三、唯一约束的使用

【重学 MySQL】六十三、唯一约束的使用 创建表时定义唯一约束示例 在已存在的表上添加唯一约束示例 删除唯一约束示例 复合唯一约束案例背景创建表并添加复合唯一约束插入数据测试总结 特点注意事项 在 MySQL 中,唯一约束(UNIQUE Constraint)…

butterfly主题留言板 报错记录 未解决

新建留言板,在博客根目录执行下面的命令 hexo new page messageboard 在博客/source/messageboard的文件夹下找到index.md文件并修改 --- title: 留言板 date: 2018-01-05 00:00:00 type: messageboard ---找到butterfly主题下的_config.yml文件 把留言板的注释…

基于springboot+小程序的智慧物流管理系统(物流1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于springboot小程序的智慧物流管理系统实现了管理员、司机及用户。 1、管理员实现了司机管理、用户管理、车辆管理、商品管理、物流信息管理、基础数据管理、论坛管理、公告信息管理等。…

帮助自闭症孩子融入社会,寄宿学校是明智选择

在广州这座充满活力与温情的城市,有一群特殊的孩子,他们被称为“星星的孩子”——自闭症儿童。自闭症,这个让人既陌生又熟悉的名词,背后承载的是无数家庭的辛酸与希望。对于自闭症儿童来说,融入社会、与人交流、理解世…

【Linux第一弹】- 基本指令

🌈 个人主页:白子寰 🔥 分类专栏:重生之我在学Linux,C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持…

blender 记一下lattice

这个工具能够辅助你捏形状 这里演示如何操作BOX shift A分别创建俩对象一个BOX 一个就是lattice对象 然后在BOX的修改器内 创建一个叫做lattice的修改器 然后指定object为刚刚创建的lattice对象 这样就算绑定好了 接下来 进入lattice的编辑模式下 你选取一个点进行运动&#…

量化交易与基础投资工具介绍

🌟作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~🍊个人主页:小高要坚强的博客🍓当前专栏:Python之机器学习《Python之量化交易》Python之机器学习🍎本文内容…

谈谈留学生毕业论文如何分析问卷采访数据

留学生毕业论文在设计好采访问题并且顺利进行了采访之后,我们便需要将得到的采访答案进行必要的分析,从而得出一些结论。我们可以通过这些结论回答研究问题,或者提出进一步的思考等等。那么我们应当如何分析采访数据呢?以下有若干…

python3开头如何设置utf-8

编码格式1&#xff1a; 在源文件第一行或者第二行定义&#xff1a; # coding<encoding name> 例如&#xff1a; # codingutf-8 编码格式2&#xff1a;&#xff08;这种最流行&#xff09; 格式如下&#xff1a; #!/usr/bin/python # -*- coding: <encoding name>…

信息安全工程师(43)入侵检测概述

一、定义与目的 入侵检测&#xff08;Intrusion Detection&#xff09;是指通过对行为、安全日志、审计数据或其他网络上可以获得的信息进行操作&#xff0c;检测到对系统的闯入或闯入的企图。其主要目的是确保网络安全和信息安全&#xff0c;保护个人和机构的敏感数据免受未经…

论文阅读:Split-Aperture 2-in-1 Computational Cameras (二)

Split-Aperture 2-in-1 Computational Cameras (一) Coded Optics for High Dynamic Range Imaging 接下来&#xff0c;文章介绍了二合一相机在几种场景下的应用&#xff0c;首先是高动态范围成像&#xff0c;现有的快照高动态范围&#xff08;HDR&#xff09;成像工作已经证…

FreeRTOS——任务创建(静态、动态创建)、任务删除以及内部实现剖析

任务创建和删除的API函数 任务的创建和删除本质就是调用FreeRTOS的API函数 API函数描述xTaskCreate()动态方式创建任务xTaskCreateStatic()静态方式创建任务vTaskDelete()删除任务 动态创建任务&#xff1a;任务的任务控制块以及任务的栈空间所需的内存&#xff0c;均有FreeR…

考研代码题:10.10 汉诺塔 爬楼梯 取球 猴子吃桃

汉诺塔 C语言 - 汉诺塔详解&#xff08;最简单的方法&#xff0c;进来看看就懂&#xff09;_汉诺塔c语言程序详解-CSDN博客 #include <stdio.h>void move(char begin,char end){printf("%c->%c\n",begin,end); } //begin开始杆&#xff0c;help辅助杆&am…

BUU刷题-Pwn-axb_2019_mips(MIPS跳转bss段执行shellcode)

解题所涉知识点&#xff1a; 泄露或修改内存数据&#xff1a; 堆地址&#xff1a;栈地址&#xff1a;libc地址&#xff1a;BSS段地址&#xff1a; 劫持程序执行流程&#xff1a;MIPS_ROP 获得shell或flag&#xff1a;[[MIPS_Shellcode]] && [[MIPS劫持RA寄存器]] 题…

开源文件管理工具File Browser本地部署并一键发布公网远程传输文件

文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 File Browser是一个开源的文件管理器和文件共享工具&#xff0c;它可以帮助用户轻…

波轮洗衣机、滚筒洗衣机的清理方法

洗衣机主要分为波轮式、滚筒式这2种&#xff0c;波轮式是水平旋转的&#xff0c;滚筒式是竖直旋转的。波轮式洗衣机一般比较小&#xff0c;用于2至3个人的衣服清理&#xff1b;而滚筒式洗衣机则比较大&#xff0c;用于5至6人的衣服清理。 图(1) 波轮洗衣机 图(2) 滚筒洗衣机 不…

龋齿牙齿病变图像分割系统源码&数据集分享

龋齿牙齿病变图像分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV3&#xff06;yolov8-seg-RepHGNetV2等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glo…

发送邮件和随机码的生成

类视图和方法视图区别&#xff1a; 不需要装饰器&#xff0c;只需要继承MethodView,需要使用什么方式就写对应的方法名称&#xff0c;它就能自动匹配 app.route("/delete/",methods["DELETE"])这些就不用写了 但是不写装饰器并不意味着不写路由了&#xff…