day01(Linux底层)基础知识

目录

导学

基础知识

1、Bootloader是什么

2、Bootloader的基本作用

3、入式中常见的Bootloader有哪些

4、Linux系统移植为什么要使用bootloader

5、uboot和Bootloader之间的关系

6.Uboot的获取

7、uboot版本命名

8、uboot版本选择

9、uboot的特点

10.Uboot使用


导学

移植内核层让产品上有系统

产品相关


基础知识

如何装系统

Linux产品启动流程

Linux产品启动流程

1. 开机自检(POST)

- 当开发板通电后,首先会进行硬件设备的自检,以确保各部件正常工作。

2. 引导加载程序(Boot Loader)执行

- 在自检完成后,引导加载程序(如U-Boot)开始执行。

- U-Boot会进行硬件初始化,如内存、串口、网络等设备的初始化。

- U-Boot会检查环境变量(如启动参数、网络配置等)并进行相应设置。

3. 加载Linux内核

- U-Boot会从指定的存储介质(如Flash存储器、SD卡等)中加载Linux内核镜像到内存中。

- 加载完成后,U-Boot会将控制权交给Linux内核。

4. Linux内核启动

- Linux内核开始执行,进行更详细的硬件初始化和驱动加载。

- 内核会解析启动参数(如从U-Boot传递过来的参数),并据此进行配置。

- 内核会启动第一个用户空间程序(通常是init进程),这标志着Linux操作系统的正式启动。

5. 挂载根文件系统

- init进程会读取/etc/inittab或/etc/systemd/system/default.target等配置文件,确定系统的运行级别或目标。

- 接着,init进程会挂载根文件系统(root filesystem),这是Linux系统中存放各种文件和目录的地方。

- 挂载完成后,系统就可以访问根文件系统中的各种资源了。

6. 启动系统服务和应用程序

- 根据运行级别或目标,init进程会启动相应的系统服务和应用程序。

- 这些服务和应用程序会提供Linux系统的各种功能和特性。

1、Bootloader是什么

bootloader是一个引导加载程序,它的主要作用是初始化硬件设备、设置硬件参数,并加载操作系统内核。在嵌入式系统中,bootloader是硬件启动后第一个被执行的程序,它位于操作系统和硬件之间,起到桥梁的作用。

2、Bootloader的基本作用

硬件初始化:

在操作系统启动之前,Bootloader会执行一系列的硬件初始化操作,如设置CPU的时钟频率、内存控制器、总线控制器等,以确保硬件平台处于正常的工作状态。

操作系统加载:

Bootloader会负责从指定的存储介质(如硬盘、闪存、网络等)中加载操作系统内核,并将其加载到内存中,然后跳转到操作系统内核的入口点执行。

提供用户接口:

有些Bootloader会提供一个简单的用户接口,允许用户进行一些基本的操作,如选择启动的操作系统、设置启动参数等。

3、入式中常见的Bootloader有哪些

U-Boot:

U-Boot是一个开源的Bootloader,支持多种处理器架构和操作系统。它提供了丰富的硬件初始化功能,并且具有高度的可配置性和可扩展性。U-Boot广泛应用于各种嵌入式设备和系统中,如路由器、交换机、智能手机等。

RedBoot:

RedBoot也是一个开源的Bootloader,主要用于嵌入式系统和网络设备。它支持多种处理器架构和网络协议,并且具有强大的网络功能,可以实现远程启动和更新。RedBoot常用于需要网络功能的嵌入式设备中。

GRUB:

GRUB(Grand Unified Bootloader)是一个多操作系统引导加载程序,最初是为GNU/Linux开发的。但现在也支持其他操作系统,如BSD、Windows等。GRUB具有灵活的配置和强大的功能,可以引导位于不同存储介质上的操作系统。

Android Bootloader:

- Android系统也有其自己的Bootloader,通常被称为Android Bootloader或Android Boot Image。

- 它负责在Android设备启动时加载并验证系统分区,然后启动Android操作系统。

- Android Bootloader通常与设备的硬件紧密相关,并由设备制造商定制。

ARM Trusted Bootloader (ATF):

- ATF是ARM提供的一个开源Bootloader,用于支持ARM TrustZone技术的设备。

- TrustZone是ARM架构中的一个安全特性,它允许在硬件级别上隔离安全和非安全代码的执行。

- ATF的主要任务是在启动时加载和验证安全引导加载程序(Secure Bootloader),然后将其传递给操作系统。

OpenSBI (Open Source Secure Boot Image):

- OpenSBI是一个开源的Secure Boot Image,主要用于RISC-V架构的服务器和数据中心设备。

- 它提供了一个安全的启动环境,可以加载和验证操作系统内核和其他关键组件。

- OpenSBI支持多种RISC-V处理器和平台,并且具有高度的可配置性和可扩展性。

4、Linux系统移植为什么要使用bootloader

硬件初始化:

Bootloader能够完成系统硬件的初始化和配置。这包括CPU的初始设置、内存控制器的配置、设备驱动程序的加载等。由于不同的硬件平台有不同的特性和要求,因此使用Bootloader可以确保Linux系统能够正确地与底层硬件进行交互。

内核加载:

Bootloader负责将Linux内核从存储介质(如硬盘、闪存等)加载到内存中,并设置合适的启动参数。这些参数包括内存布局、设备驱动程序的路径等,它们对于Linux内核的正确运行至关重要。

系统稳定性:

Bootloader通常包含了一些错误检测和恢复机制,以确保系统的稳定性和可靠性。例如,它可以检查硬件的完整性,并在发现问题时启动备用设备或采取其他恢复措施。这有助于提高Linux系统的整体可用性和容错性。

灵活性:

通过使用Bootloader,用户可以灵活地选择加载哪个Linux内核版本、使用哪个文件系统类型等。这为用户提供了更多的选择和灵活性,以适应不同的应用场景和需求。

5、uboot和Bootloader之间的关系

U-Boot是Bootloader的一种实现,它专门用于嵌入式系统,特别是那些基于ARM、MIPS等处理器的系统。U-Boot提供了丰富的硬件支持和功能,使得开发者能够轻松地初始化硬件、加载操作系统内核,并进行一些基本的系统配置。

简单来说就是Uboot属于Bootloader中的一种,bootloader就相当于类,uboot就相当于对象。嵌入式领域常用的bootloader就是uboot

6.Uboot的获取

1. uboot官网获取

ftp://ftp.denx.de/pub/u-boot/

2. 芯片厂家获取

3. 开发板厂家 ---》目前市面上的6818的开发板,开发板厂家只提供u-boot.bin

4. 同事

本次移植课程使用:u-boot-2014.07-netok.tar.bz2

7、uboot版本命名

前期:u-boot-1.3.2

现在:u-boot-2024.01

08年以前uboot是1.1.几1.3.几这样命名08年开始以年份和月份命名。

8、uboot版本选择

支持对应的硬件平台

相对成熟的版本(资料多)

每当发布新的芯片后uboot就会增加对应芯片的版本。一般和处理器同一时期发布的uboot版本对处理器的支持较好。

9、uboot的特点

1. u-boot是一个开源的软件

2. u-boot支持多种架构的平台(ARM powerPC MIPS x86)

3. u-boot的源码短小精悍

4. u-boot就是一个裸机代码

5. u-boot引导加载内核,启动内核,并给内核传递参数

6. u-boot可以完成部分硬件的初始化:uart,内存,emmc,网卡

7.u-boot生命周期短,启动完内核,给内核传递完参数(告诉内核从什么地方去挂载根文件系统),u-boot的生命周期结束。

10.Uboot使用

  • 将板子上电,串口插到电脑上,打开串口工具

  • 选择串口功能

  • 配置自己的串口信息

  • 配置名字

  • 双击打开

  • 连接串口

  • 如果连接不上,使用以下步骤与解决(波特率调低->连接->改回波特率115200)

使用SD卡启动

  • 重新上电,打印出文字内容就对了

  • Uboot 的模式

倒计时结束之前,按键盘任意键(按关机键的是棒槌),进入交互模式

倒计时结束之后进入自启动模式

  • 使用Uboot命令

1. printenv

- 功能:打印当前设置的环境变量列表。

- 样例:直接在U-Boot命令行输入`printenv`,然后按回车键,即可看到所有环境变量的列表及其值。

2. setenv

- 功能:设置或修改环境变量的值。

- 样例:假设我们要设置一个名为`my_variable`的环境变量,其值为`hello_world`,可以输入`setenv my_variable hello_world`,然后按回车键。

3. saveenv

- 功能:将当前的环境变量设置保存到非易失性存储器中,以便在下次启动U-Boot时使用。

- 样例:在修改完环境变量后,为了确保这些更改在下次启动时仍然有效,可以输入`saveenv`,然后按回车键。

4. boot

- 功能:根据环境变量中的配置来启动操作系统。这通常涉及到加载内核镜像和根文件系统。

- 样例:直接输入`boot`,然后按回车键,U-Boot会根据`bootcmd`环境变量中指定的命令来启动操作系统。

5. bootm

- 功能:从指定的内存地址直接启动内核镜像。这通常用于手动指定内核镜像的位置。

- 样例:`bootm [addr [initrd[:size]] [fdt]]`。假设内核镜像位于内存地址`0x80000000`,可以输入`bootm 0x80000000`(注意,这里可能还需要指定其他参数,如initrd和fdt的地址,具体取决于你的系统配置)。

6. help

- 功能:显示U-Boot的帮助信息,列出所有可用的命令及其简短描述。

- 样例:在U-Boot命令行输入`help`,然后按回车键,即可看到所有可用命令的列表。

7、IP地址相关命令

- `ipaddr`:显示或设置U-Boot的IP地址。

- `serverip`:显示或设置服务器的IP地址(例如Ubuntu的IP)。

8. 启动延时

- `bootdelay`:设置进入自启动模式之前的倒计时的秒数。例如,如果设置为5,则U-Boot会在5秒后自动启动操作系统,除非用户在此期间按下某个键来中断启动过程。

9、网络传输命令

- `loadb`:通过Kermit协议从远程主机下载文件到U-Boot指定的内存地址。 样例:`loadb <内存地址>`,之后根据Kermit协议的提示进行文件传输。

- `tftp`:通过TFTP协议从TFTP服务器下载文件到U-Boot指定的内存地址。 样例:`tftp <内存地址> <文件名>`,该命令将尝试从TFTP服务器上下载指定文件,并将其存储在指定的内存地址中。

10. 存储器访问命令

-`mmc read`:从EMMC存储器中读取数据到内存。 样例:`mmc read <内存地址> <扇区编号> <扇区数>`,这将从EMMC中的指定扇区开始,读取指定数量的扇区,并将数据存储在指定的内存地址中。

- `mmc write`:将内存中的数据写入到EMMC存储器中。 样例:`mmc write <内存地址> <扇区编号> <扇区数>`,这将从指定的内存地址开始,读取指定数量的数据,并将其写入到EMMC中的指定扇区。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenFeign 服务调用

1.简介 微服务架构中使用 OpenFeign 进行服务调用&#xff0c; OpenFeign 提供了一种简洁的方式来定义和处理服 务间的调用。 OpenFeign 作为一个声明式的、模块化的 HTTP 客户端&#xff0c;通过 「接口」 的定义和 「注解」 的使用&#xff0c;简化了微服务之间的通信调用。…

superset load_examples加载失败解决方法

如果在执行load_examples命令后,出现上方图片情况,或是相似报错(url error\connection error),大概率原因是python程序请求github数据,无法访问. 因此我们可以将数据下载在本地来解决. 1.下载zip压缩文件,存放到本地 官方示例地址:GitHub - apache-superset/examples-data …

k8s集成skywalking

如果能科学上网的话&#xff0c;安装应该不难&#xff0c;如果有问题可以给我留言 本篇文章我将给大家介绍“分布式链路追踪”的内容&#xff0c;对于目前大部分采用微服务架构的公司来说&#xff0c;分布式链路追踪都是必备的&#xff0c;无论它是传统微服务体系亦或是新一代…

深度学习Python基础(2)

二 数据处理 一般来说PyTorch中深度学习训练的流程是这样的&#xff1a; 1. 创建Dateset 2. Dataset传递给DataLoader 3. DataLoader迭代产生训练数据提供给模型 对应的一般都会有这三部分代码 # 创建Dateset(可以自定义) dataset face_dataset # Dataset部分自定义过的…

【Git教程 之 安装】

Git教程 之 安装 Git教程 之 安装Windows系统安装gitLinux安装gitmacOS安装Git Git教程 之 安装 Windows系统安装git 首先从官网上直接下载安装 选择对应的操作系统&#xff0c;我电脑是Windows&#xff0c;所以我演示以Windows为主 点进去 点击Click here to download 下…

ElasticSearch学习记录

服务器操作系统版本&#xff1a;Ubuntu 24.04 Java版本&#xff1a;21 Spring Boot版本&#xff1a;3.3.5 如果打算用GUI&#xff0c;虚拟机安装Ubuntu 24.04&#xff0c;见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次&#xff0…

【AI】数据,算力,算法和应用(3)

三、算法 算法这个词&#xff0c;我们都不陌生。 从接触计算机&#xff0c;就知道有“算法”这样一个神秘的名词存在。象征着专业、权威、神秘、高难等等。 算法是一组有序的解决问题的规则和指令&#xff0c;用于解决特定问题的一系列步骤。算法可以被看作是解决问题的方法…

Java代码操作Zookeeper(使用 Apache Curator 库)

1. Zookeeper原生客户端库存在的缺点 复杂性高&#xff1a;原生客户端库提供了底层的 API&#xff0c;需要开发者手动处理很多细节&#xff0c;如连接管理、会话管理、异常处理等。这增加了开发的复杂性&#xff0c;容易出错。连接管理繁琐&#xff1a;使用原生客户端库时&…

SAP SD学习笔记17 - 投诉处理3 - Credit/Debit Memo依赖,Credit/Debit Memo

上一章讲了 请求书&#xff08;发票&#xff09;的取消。 SAP SD学习笔记16 - 请求书的取消 - VF11-CSDN博客 再往上几章&#xff0c;讲了下图里面的返品传票&#xff1a; SAP SD学习笔记14 - 投诉处理1 - 返品处理&#xff08;退货处理&#xff09;的流程以及系统实操&#…

Flink--API 之Transformation-转换算子的使用解析

目录 一、常用转换算子详解 &#xff08;一&#xff09;map 算子 &#xff08;二&#xff09;flatMap 算子 &#xff08;三&#xff09;filter 算子 &#xff08;四&#xff09;keyBy 算子 元组类型 POJO &#xff08;五&#xff09;reduce 算子 二、合并与连接操作 …

qt QToolBox详解

1、概述 QToolBox是Qt框架中的一个控件&#xff0c;它提供了一个带标签页的容器&#xff0c;用户可以通过点击标签页标题来切换不同的页面。QToolBox类似于一个带有多页选项卡的控件&#xff0c;但每个“选项卡”都是一个完整的页面&#xff0c;而不仅仅是标签。这使得QToolBo…

MySQL 复合查询

实际开发中往往数据来自不同的表&#xff0c;所以需要多表查询。本节我们用一个简单的公司管理系统&#xff0c;有三张表EMP,DEPT,SALGRADE 来演示如何进行多表查询。表结构的代码以及插入的数据如下&#xff1a; DROP database IF EXISTS scott; CREATE database IF NOT EXIST…

分布式系统中的Dapper与Twitter Zipkin:链路追踪技术的实现与应用

目录 一、什么是链路追踪&#xff1f; 二、核心思想Dapper &#xff08;一&#xff09;Dapper链路追踪基本概念概要 &#xff08;二&#xff09;Trace、Span、Annotations Trace Span Annotation 案例说明 &#xff08;三&#xff09;带内数据与带外数据 带外数据 带…

RealESRGAN技术详解(附代码)

一、背景与动机 1.研究背景 1.1 图像超分辨率的挑战 图像超分辨率是一个长期存在的计算机视觉问题&#xff0c;它旨在从低分辨率&#xff08;LR&#xff09;图像中恢复出高分辨率&#xff08;HR&#xff09;图像。由于成像系统的局限性、传输过程中的压缩、存储空间的限制以及…

零拷贝相关知识点(一)

前言 大家好&#xff0c;我是程序员田螺。 零拷贝是老生常谈的问题啦&#xff0c;大厂非常喜欢问。比如Kafka为什么快&#xff0c;RocketMQ为什么快等&#xff0c;都涉及到零拷贝知识点。最近技术讨论群几个伙伴分享了阿里、虾皮的面试真题&#xff0c;也都涉及到零拷贝。因此…

Warcraft Logs [Classic] [WCL] exe download, set up, setting upload data

Warcraft Logs [Classic] [WCL] exe download, set up, setting & upload data WCL客户端下载&#xff0c;安装&#xff0c;配置和如何上传数据 Warcraft Logs - Combat Analysis for Warcraft 漫长的22分钟下载真的够慢的 到此为止&#xff0c;WCL客户端才安装完成 双击…

DIY搭建网站(学术个人介绍主页)

本教程介绍了如何创建并管理一个基于GitHub Pages的个人网站。首先&#xff0c;需要在GitHub上创建一个遵循特定命名规则的新仓库&#xff0c;例如用户名.github.io&#xff0c;以便建立个人站点。接着&#xff0c;通过Fork一个开源模板代码仓库并添加index.html文件来构建主页…

Java设计模式 —— 【创建型模式】原型模式(浅拷贝、深拷贝)详解

文章目录 前言原型模式一、浅拷贝1、案例2、引用数据类型 二、深拷贝1、重写clone()方法2、序列化 总结 前言 先看一下传统的对象克隆方式&#xff1a; 原型类&#xff1a; public class Student {private String name;public Student(String name) {this.name name;}publi…

Python 自动化办公的 10 大脚本

大家好&#xff0c;我是你们的 Python 讲师&#xff01;今天我们将讨论 10 个实用的 Python 自动化办公脚本。这些脚本可以帮助你简化日常工作&#xff0c;提高效率。无论是处理 Excel 文件、发送邮件&#xff0c;还是自动化网页操作&#xff0c;Python 都能派上用场。 1. 批量…

设计模式学习[10]---迪米特法则+外观模式

文章目录 前言1. 迪米特法则2. 外观模式2.1 原理阐述2.2 举例说明 总结 前言 之前有写到过 依赖倒置原则&#xff0c;这篇博客中涉及到的迪米特法则和外观模式更像是这个依赖倒置原则的一个拓展。 设计模式的原则嘛&#xff0c;总归还是高内聚低耦合&#xff0c;下面就来阐述…