当前位置: 首页 > news >正文

ARM——驱动——Linux启动流程和Linux启动

一、flash存储器

lash存储器,全称为Flash EEPROM Memory,又名闪存,是一种长寿命的非易失性存储器。它能够在断电情况下保持所存储的数据信息,因此非常适合用于存储需要持久保存的数据。Flash存储器的数据删除不是以单个的字节为单位,而是以固定的区块为单位,区块大小一般为256KB到20MB。

在ARM系统中,Flash存储器主要分为两种类型:NOR Flash和NAND Flash。

  1. NOR Flash(可线性访问与内存访问方式相同)
    • 特点:地址线和数据线分开,可以像内存一样进行随机访问。支持XIP(Execute In Place,片内执行),即代码可以直接在NOR Flash上执行,无需复制到内存中。
    • 应用:由于其快速读取速度和数据不易失的特点,NOR Flash常被用作启动存储介质,存储操作系统的引导程序、内核映像等关键文件。
  2. NAND Flash(不可线性访问必须配个专门的程序访问)
    • 特点:地址线和数据线共用,需要通过特定的命令和地址控制来读取数据。写入和擦除速度比NOR Flash快,但读取速度相对较慢。不支持XIP,需要通过软件控制读取时序。
    • 应用:由于其高容量和低成本的特点,NAND Flash常被用作大容量数据存储介质,如存储设备中的文件系统和数据分区。

二、Linux操作系统启动

Linux启动是一个复杂但有序的过程,它涉及从系统加电到用户登录界面的多个步骤。以下是Linux启动过程的详细解析:

 一、启动准备阶段

1. **固件初始化**:
   - 在x86系统中,通常是通过BIOS(基本输入输出系统)或UEFI(统一可扩展固件接口)进行初始化。BIOS/UEFI负责硬件初始化、自检以及加载固件驱动程序等。
   - 在ARM架构中,情况可能有所不同。ARM处理器通常不直接包含BIOS的概念,而是可能使用如OpenSBI(开源的RISC-V虚拟化二进制接口)或其他类似机制进行启动前的准备工作。

2. **启动设备选择**:
   - BIOS/UEFI会检测并识别可启动的设备,如硬盘、光盘、USB设备等,并根据预设的启动顺序或用户设置的启动选项,选择一个可启动的设备作为启动介质。

二、加载引导程序(Boot Loader)

1. **Boot Loader的作用**:
   - Boot Loader是引导加载程序,负责加载内核文件到内存中,并传递一些参数给内核。常见的       Boot Loader有GRUB(GRand Unified Bootloader)、LILO等。
   - 在ARM架构中,u-boot是另一种常见的Boot Loader,它主要用于嵌入式系统。2. **加载过程**:
   - 当BIOS/UEFI找到启动设备后,它会读取该设备上的主引导记录(MBR)或UEFI应用程序(如GRUB的.efi文件)。
   - Boot Loader被加载到内存中并执行,它会进一步加载操作系统内核。

 三、加载内核(kernel)

1. **内核的作用**:
   - 内核是Linux系统的核心,负责管理系统资源、提供系统服务、驱动硬件设备等。

2. **加载过程**:
   - Boot Loader将内核映像文件加载到内存中,并设置必要的参数。
   - 内核被加载后,会进行解压缩、初始化各种模块和组件等操作。

1、引导程序bootloader----为内核启动准备环境

初始化CPU(工作模式)

初始化异常线性表

初始化栈

关看门狗

初始化内存

关闭Cache

关闭MMU

初始化相关的硬件(串口调试,网口)

集成相关的协议

搬移内核内核到内存

向内核传参(根文件系统类型/位置,控制台,init进程,IP(如果需要))

启动内核(PC向内核所在的内存地址)

————boot loader不再控制CPU,CPU的控制权彻底交给内核

2、内核(一个大的程序并未用户提供操作接口)

进程管理 内存管理 网络管理 文件管理 设备管理

内核最后的阶段时:加载根文件系统(以挂载的形式)

启动init进程-》shell-》userapp
3、加载根文件系统

可执行程序(系统的命令,普通程序)

配置文件

库 (静态/动态)

普通文本(文本/MP3/jpg)                                                                                                                         

四、运行init进程

1. **init进程的作用**:
   - init是Linux系统的第一个用户空间进程(通常称为1号进程),负责启动和管理其他进程。

2. **运行过程**:
   - init进程会读取配置文件(如/etc/inittab、/etc/systemd/system等),确定运行级别(runlevel)并执行相应的初始化脚本。
   - 不同的Linux发行版可能使用不同的init系统(如SysVinit、Upstart、Systemd等),但基本流程和目的相似。

五、启动服务

1. **服务的作用**:
   - 服务是Linux系统提供的各种功能和应用,如网络、图形界面、数据库等。

2. **启动过程**:
   - 根据运行级别的设置,init系统会启动相应的服务。这些服务通常由/etc/rc.d目录下的脚本来管理。

 六、建立终端和用户登录

1. **建立终端**:
   - 终端是Linux系统与用户交互的界面,可以是文本模式或图形模式。
   - 终端由init系统或桌面环境根据配置来创建和管理。

2. **用户登录**:
   - 用户登录是Linux系统验证用户身份和权限的过程。用户可以通过用户名和密码、公钥和私钥等方式进行登录。
   - 登录后,用户可以执行各种命令和操作。

七、Linux运行级别

Linux系统有七个运行级别(从0到6),每个级别代表不同的系统状态和功能:

- **0**:系统停机状态,不能正常启动,只能关闭电源。
- **1**:单用户工作状态,只有root权限,用于系统维护和修复,禁止远程登录。
- **2**:多用户状态,没有网络文件系统(NFS)支持。
- **3**:完全的多用户状态,有NFS支持,适合服务器和命令行模式的用户。
- **4**:系统未使用,保留给用户自定义。
- **5**:图形用户界面(GUI)状态,有NFS支持,适合桌面和图形界面的用户。
- **6**:系统重启状态,不能正常启动,只能重新启动系统。

三、启动。

1、下载一个bootloader到norflash的0地址处()

查看和设置环境变量

删除后记得保存才能达到修改环境变量的效果。

U-Boot(Universal Boot Loader)是一种广泛使用的开源引导加载程序,它允许用户从各种设备(如硬盘、USB设备、网络等)加载操作系统。U-Boot提供了丰富的命令行接口(CLI),允许用户执行各种硬件级别的操作,比如配置硬件、加载和启动操作系统等。

下面是一些常用的U-Boot命令及其基本用途:

  1. printenv / setenv
    • printenv:打印当前环境变量。
    • setenv VAR value:设置环境变量VAR的值为value。
  2. bootm
    • 用于从内存地址处直接启动内核,通常需要知道内核映像的内存地址。
  3. bootz
    • 从内存地址处启动压缩的内核映像,需要指定内核映像、DTB(设备树)和内核解压后的存放地址。
  4. boot
    • 根据环境变量中配置的启动命令来启动系统。
  5. tftpboot
    • 通过TFTP协议从服务器下载文件到内存中。常用于从TFTP服务器加载内核映像或设备树。
  6. loadb / loads / loady / loadx
    • 从串行端口、USB、以太网等不同接口加载数据到内存中。
  7. nfs
    • 从NFS服务器加载文件。
  8. fatload / ext2load / ext4load
    • 从FAT、ext2或ext4文件系统中加载文件到内存中。
  9. mm / nm / md
    • mm:内存修改命令,允许修改内存中的值。
    • nm:内存显示命令,显示内存中的值(但不允许修改)。
    • md:内存显示命令,以十六进制格式显示内存内容。
  10. cp
    • 复制内存中的数据。
  11. ping
    • 测试网络连接。
  12. reset
    • 重启系统。
  13. saveenv
    • 将当前的环境变量保存到非易失性存储器中(如EEPROM、闪存等)。
  14. version
    • 显示U-Boot的版本信息。
  15. help
    • 显示帮助信息,或指定命令后加?来获取该命令的详细帮助。                        

综上所示:          

Uboot命令:

reset 重启uboot
setenv  abc 123 设置环境变量
savenv   保存环境变量到nand
setenv abc 删除环境变量 

ping 目标 iP

tftp 030008000 ulmage

bootm 0x30008000(启动内核)

(go 0x30008000 运行程序)

          

下载tftpd到内核中

挂载

遇到这这种情况:
1、内核已经启动完毕,2、根目录有错误

相关文章:

ARM——驱动——Linux启动流程和Linux启动

一、flash存储器 lash存储器,全称为Flash EEPROM Memory,又名闪存,是一种长寿命的非易失性存储器。它能够在断电情况下保持所存储的数据信息,因此非常适合用于存储需要持久保存的数据。Flash存储器的数据删除不是以单个的字节为单…...

Docker和虚拟机的区别详细讲解

Docker 和虚拟机(VM)是现代 IT 基础设施中常见的技术,它们都用于在单一硬件上运行多个操作环境,但它们的工作原理、性能、资源利用和使用场景存在显著差异。以下是对 Docker 和虚拟机区别的详细讲解。 一、基础概念 1. Docker …...

leetcode_68. 文本左右对齐

68. 文本左右对齐 题目描述:给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说&#xff0c…...

python探索分形和混沌

简单产生复杂,混沌孕育秩序 0. 引言 a. 分形 fractal 【也叫碎形】 分形是一种具有自相似性和复杂结构的几何图形。在分形结构中,无论放大多少次,局部的结构特征都与整体结构相似。这种特性在自然界中广泛存在,比如树木枝干、山…...

LeetCode77 组合

前言 题目: 77. 组合 文档: 代码随想录——组合 编程语言: C 解题状态: 没尝试出来 思路 经典的组合问题,可以考虑使用回溯法。使用回溯法时可以根据回溯法的模板来考虑如何解决。 代码 回溯法 class Solution { p…...

C#:Bitmap类使用方法—第1讲

首先看一下Bitmap定义:封装 GDI 位图,此位图由图形图像及其属性的像素数据组成。 Bitmap 是用于处理由像素数据定义的图像的对象。 下面介绍一下使用的例子: Bitmap image1; private void Button1_Click(System.Object sender, System.Eve…...

PaddleNLP 3.0 支持大语言模型开发

huggingface不支持模型并行。张量并行,不满足大规模预训练的需求。 1、组网部分 2、数据流 3、训练器 4、异步高效的模型存储...

32次8.21(学习playbook-roles,脚本创建数据库和表,mycat读写分离)

1.roles目录介绍 files:⽤来存放由copy模块或script模块调⽤的⽂件。 tasks:⾄少有⼀个main.yml⽂件,定义各tasks。 handlers:有⼀个main.yml⽂件,定义各handlers。 templates:⽤来存放jinjia2模板。 vars&#xff1a…...

I2C通信协议(软件I2C和硬件I2C)

相比于之前学的异步全双工且需要两条通信线的串口通信,I2C则为同步半双工,仅需要一条通信线,全双工与半双工区别如下: 全双工(Full Duplex)半双工(Half Duplex)数据传输方式同时双向…...

Linux入门——08 进程间通讯——管道

1.进程间通讯 1.1什么是通讯 进程具有独立性(每个进程都有自己的PCB,独立地址空间,页表)但是要进行进程的通信,通信的成本一定不低,打破了独立性 进程间通信目的 数据传输:一个进程需要将它的数据发送给…...

深入探讨SD NAND的SD模式与SPI模式初始化

在嵌入式系统和存储解决方案中,SD NAND的广泛应用是显而易见的。CS创世推出的SD NAND支持SD模式和SPI模式,这两种模式在功能和实现上各有优劣。在本文中,我们将深入探讨这两种模式的初始化过程,并比较它们在不同应用场景下的优劣&…...

【jvm】栈和堆的区别

目录 1. 用途2. 线程共享性3. 内存分配和回收4. 生命周期5. 性能特点 1. 用途 1.堆:主要用于存储对象实例和数组。在Java中,所有通过new关键字创建的对象都会被分配到堆上。堆是一个大的内存池,用于存储所有的Java对象,包括实例变…...

智能的意义是降低世界的不确定性

世界充满着不确定性,而智能天生就追求一定的确定性,因为不确定性会危及智能的生存。智能本身是一种有序、相对确定的结构产生的,虽然也有一定的不确定性,而且这些不确定性有利于智能的进化,但是,相对而言&a…...

python实现指数平滑法进行时间序列预测

python实现指数平滑法进行时间序列预测 一、指数平滑法定义 1、指数平滑法是一种常用的时间序列预测算法,有一次、二次和三次平滑,通过加权系数来调整历史数据权重; 2、主要思想是:预测值是以前观测值的加权和,且对不同的数据给予不同的权数,新数据给予较大的权数,旧数…...

linux文件——用户缓冲区——概念深度探索、IO模拟实现

前言:本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题, 然后通过分析问题, 将缓冲区的概念与原理一步一步地讲解。同时, 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf, fprintf接口&#xff0c…...

Hive3:常用查询语句整理

一、数据准备 建库 CREATE DATABASE itheima; USE itheima;订单表元数据 1 1000000 100058 6 -1 509.52 0.00 28155.40 499.33 0 0 lisi shanghai 157 2019-06-22 17:28:15 2019-06-22 17:28:15 1 2 5000000 100061 72 -1 503.86 0.00 38548.00 503.86 1 0 zhangsan shangha…...

Ubuntu下载安装教程|Ubuntu最新长期支持(LTS)版本24.04 LTS下载安装

安装Ubuntu Ubuntu最新长期支持(LTS)版本24.04 LTS Ubuntu 24.04 LTS | 概览 Ubuntu长期支持(LTS)版本,LTS意为“长期支持”,一般为5年。LTS版本将提供免费安全和维护更新至 2029年4月。 Ubuntu 24.04 LTS(代号“Noble Numbat”,…...

通知:《自然语言及语音处理设计开发工程师》即将开课!

自然语言及语音处理设计开发工程师:未来职业的黄金选择 下面我们来看看证书颁发的背景:​ 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求,深入实…...

Vim youcompleteme Windows 安装保姆级教程

不说废话。 准备 检查 Vim 的 Python 配置 安装好 vim 和 python 后(python 必须 ≥ \ge ≥ 3.6),在 cmd 下运行 vim --version会弹出以下窗口。 如果发现 python/dyn 和 python3/dyn 都是 - (我不知道只有前者是 能不能运行…...

港迪技术IPO提交注册,拟募资6.56亿元

武汉港迪技术股份有限公司(下称“港迪技术”)拟在创业板IPO上市,并于近期在深交所提交招股书(注册稿),进入提交注册阶段。 港迪技术IPO招股书(注册稿)显示,公司是一家专…...

retinaface在ubuntu20.04(wsl2)下使用tensorrt(c++)部署

1. 参考博客: 1. Retinaface Tensorrt Python/C部署:https://blog.csdn.net/weixin_45747759/article/details/124534079 2. B站视频教程:https://www.bilibili.com/video/BV1Nv4y1K727/ 3. Retinaface_…...

vue打包设置 自定义的NODE_ENV

默认NODE_ENV 自定义process.env.NODE_ENV的值_process.node.env的值-CSDN博客 ‌NODE_ENV开发环境下:NODE_ENVdevelopment(默认) 生产环境下:NODE_ENVproduction(默认) NODE_ENV 除了默认的 development 和 production 以外,确实可以自定义…...

python爬虫521

爬虫521 记录 记录 最近想学爬虫,尝试爬取自己账号下的文章标题做个词云 csdn有反爬机制 原理我就不说啦 大家都写了 看到大家结果是加cookie 但是我加了还是521报错 尝试再加了referer 就成功了(╹▽╹) import matplotlib import requests from wordcloud impor…...

CSS中flex:1是什么属性

flex: 1 是 CSS 中的一个简写属性,用于设置 Flex 项目的灵活伸缩比例(flex-grow)、收缩比例(flex-shrink)以及基础大小(flex-basis)。具体来说,flex: 1 实际上是以下三个属性的简写&…...

网络硬件升级指南:提升性能的策略与实践

随着企业对网络依赖程度的增加,网络性能的提升已成为信息技术部门的首要任务。本文将探讨如何通过升级网络硬件来提高网络性能,包括选择正确的硬件、实施升级策略和考虑未来网络的可扩展性。 一、网络性能的重要性 在数字化时代,网络是企业…...

XSS-过滤特殊符号的正则绕过

目录 靶场练习地址:https://xss.pwnfunction.com/ 题目源码: 代码分析: 方法一:匿名函数 方法二:使用eval函数绕过限制 示例: 方法三:利用hash绕过 靶场练习地址:https://xs…...

CocosCreator3.8 IOS 构建插屏无法去除的解决方案

CocosCreator3.8 IOS 构建插屏无法去除的解决方案 在实际项目开发过程中,我们通常无需CocosCreator 自带的插屏,一般采用自定义加载页面。 然后在构建IOS 项目时,启用(禁用)插屏无法操作,如下图所示&#…...

Linux软件编程---数据库

目录 一、数据库 1.1.概念 1.2.类型 1.关系型数据库 2.非关系型数据库 1.3.SQL语言 1.4.如何在Linux安装sqlite数据库 1.确保虚拟机可以上网 2.配置apt-get工具集合 3.安装sqlite数据库 1.5.sqlite3 1.创建数据库 2.查看数据表 3.退出数据库 4.SQL语句 二、数…...

Spring 源码解读专栏:从零到一深度掌握 Spring 框架

前言 Spring 是 Java 世界中无可争议的王者框架,它以其灵活、轻量、强大而著称,成为企业级开发的首选工具。然而,很多开发者在使用 Spring 时,往往只停留在会用的层面,对于其内部实现和设计原理知之甚少。本专栏旨在通…...

帆软-秋招提前批-笔试

单选 1. 有四个同学,每个人得到的桃子数量不同,4个到7个之间。然后,4个人都吃掉了1个或2个桃,结果每个人剩下的桃数量还是各不相同。4个人吃过桃后,说了如下的话。其中,吃了2个桃的人撒谎了,吃了1个桃的人说了实话。 安娜:"我吃过红色的桃。" …...