linux驱动学习:从上电到启动 一

news/2024/11/24 1:37:56/

1 从上电到bootloader

rom boot:

        初始化硬件:cpu上电后,首先从片内rom中执行指令,即片内boot程序

        加载引导程序:ROM Bootloader 从可访问的存储介质(如闪存、SD卡等)中读取引导程序,并将其加载到正确的内存位置。引导程序负责进一步的系统初始化和加载操作系统。

(读取外部固件到片内ram,最后跳转到片内ram执行新的用户boot程序)

        

2 bootloader分类及其作用

  1. GRUB(GRand Unified Bootloader):GRUB 是一个功能强大且广泛使用的引导加载程序,支持多种操作系统,包括 Linux、Windows 和 macOS。它可以从多个存储介质(如硬盘、CD/DVD、USB 等)中加载操作系统,提供了灵活的配置选项和图形界面。

  2. LILO(LInux LOader):LILO 是最早出现的 Linux 引导加载程序之一。它支持从硬盘的主引导记录(MBR)加载 Linux 内核,并提供了简单的文本界面进行配置。然而,由于其较为限制的功能和配置选项,LILO 在现代系统中被其他引导加载程序所取代。

  3. systemd-boot:systemd-boot 是由 systemd 项目提供的引导加载程序,用于启动基于 Systemd 的 Linux 发行版(如 Arch Linux)。它具有快速启动时间和简单的配置,支持 GPT 分区表和 EFI 标准,并提供了命令行界面进行调整。

  4. rEFInd:rEFInd 是一个图形化的引导管理器,特别设计用于 EFI 或 UEFI 固件的电脑。它支持多个操作系统的启动,具有可定制的主题和用户界面,以及自动检测和配置引导项的功能。

  5. Das U-Boot(Denx U-Boot):Das U-Boot 是 U-Boot 的一个派生版本,提供了一种开源的引导加载程序解决方案。它被广泛应用于嵌入式系统中,支持多种处理器架构和平台,并具有丰富的功能和可扩展性。

作用:

1 由于cpu固化代码不会兼容所有外设内存,所以需要外部程序引导初始化外部内存,flash,硬件等。

2 加载内核,设置启动参数,内核跳转

3 bootloader与kernel的区别

1 bootloader是裸机程序,目的是引导内核,在跳转到内核之后,生命周期结束

2 kernel运行的是操作系统程序,主要负责:

  1. 硬件管理:内核负责管理和控制计算机系统中的硬件资源,例如处理器、内存、设备等。它与硬件交互,分配和管理资源的使用,确保不同的进程或任务能够公平地访问和利用硬件资源。

  2. 进程管理:内核管理计算机系统中的进程(或线程),负责创建、删除、调度和切换它们。它分配CPU时间给不同的进程,并确保它们按照一定的调度策略得到执行,以实现系统的多任务处理能力。

  3. 内存管理:内核负责管理系统的内存资源,包括内存的分配、回收和地址映射。它维护进程的虚拟地址空间,并将其映射到物理内存。内核还处理内存的分页(paging)、内存保护(protection)、页面置换(page swapping)等操作。

  4. 文件系统:内核提供文件系统接口,用于管理文件和目录。它负责文件的读取、写入、打开、关闭等操作,以及目录的创建、重命名、删除等操作。内核还处理文件权限、访问控制和磁盘空间管理等问题。

  5. 设备驱动程序:内核提供设备驱动程序接口,用于与硬件设备进行通信和控制。它管理设备的初始化、配置和操作,允许用户程序通过系统调用与设备进行交互。驱动程序可以处理各种设备,如硬盘、网络接口、图形显示等。

  6. 系统调用:内核提供系统调用接口,允许应用程序请求核心服务。通过系统调用,应用程序可以请求创建进程、分配内存、进行文件操作等。内核会验证请求的合法性,并执行相应的操作。

  7. 安全和权限管理:内核负责管理系统的安全和权限,确保不同的用户或进程之间的隔离和保护。它控制资源的访问权限,防止未经授权的访问和恶意行为。


http://www.ppmy.cn/news/988228.html

相关文章

《零基础入门学习Python》第071讲:GUI的终极选择:Tkinter8

虽然我们能用 tkinter 设计不少东西了,但是不少同学还是感觉对这个界面编程掌控得还不够多,说白了,就是我们现在还没办法随心所欲的去绘制我们想要的界面,但是不瞒你说,今天的这一节课将会给你的人生乃至人生观带来翻天…

Redis Sentinel 及 Redis Cluster

Redis Sentinel Redis-Sentinel(哨兵模式)是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是…

微信小程序开发每日一写--5

按钮的使用和底层逻辑的实现&#xff08;暂未成功&#xff09; WXML&#xff1a; <button class"bth1"type"primary" >按钮</button>JS&#xff1a; // index.js // 获取应用实例 //const app getApp() Page({/*bthTapHandler(e){//按钮的…

飞行动力学 - 第15节-part 1-操纵力与铰链力矩 之 基础点摘要

飞行动力学 - 第15节-part 1-操纵力与铰链力矩 之 基础点摘要 1. HOTAS全拼2. 操纵杆力&铰链力矩3. 铰链力矩4. 气动补偿&#xff08;Aerodynamic Balancing&#xff09;5. 参考资料 1. HOTAS全拼 Hands On Throttle And Stick 2. 操纵杆力&铰链力矩 操纵杆力&#…

代码随想录算法训练营第二十五天 | 读PDF复习环节3

读PDF复习环节3 本博客的内容只是做一个大概的记录&#xff0c;整个PDF看下来&#xff0c;内容上是不如代码随想录网站上的文章全面的&#xff0c;并且PDF中有些地方的描述&#xff0c;是很让我疑惑的&#xff0c;在困扰我很久后&#xff0c;无意间发现&#xff0c;其网站上的讲…

【打点】pv, uv

一、pv, uv是什么&#xff1f; 1、PV(访问量)&#xff1a;即Page View, 具体是指网站的是页面浏览量或者点击量&#xff1b; 2、UV(独立访客)&#xff1a;即Unique Visitor&#xff0c;访问您网站的一台电脑客户端为一个访客。 二、使用步骤 1.定义方法 代码如下&#xff0…

NodeJs后端项目使用docker打包部署

docker安装看之前的文章 默认已经安装好docker并且配置没有问题 拉取项目 https://gitee.com/coder-msc/docker-node 本地跑一个看看 pnpm install pnpm start 本地访问 http://localhost:1301/getname?name%E5%93%88%E5%88%A9%E6%B3%A2%E7%89%B9项目整个上传服务器 查看…

Simulink仿真模块 - Data Type Conversion

Data Type Conversion将输入信号转换为指定的数据类型 在仿真库中的位置为:Simulink / 常用模块 Simulink / Signal Attributes 模型为: 说明 Data Type Conversion 模块可将任何 Simulink 数据类型的输入信号转换为您指定的数据类型。 注意 要通过指定模块参数来控…