驱动(RK3588S)第二课时:引导程序和内核

news2024/11/15 1:28:32

目录

  • 一、引导程序(uboot)
    • 1、uboot介绍
    • 2、A 系列通用芯片启动流程
    • 3、uboot的配置与使用
  • 二、内核(kernel)
    • 1、内核的介绍
    • 2、内核的配置、裁剪和编译
  • 三、其他知识点

一、引导程序(uboot)

1、uboot介绍

uboot 其实就是一个引导程序,他是咱们嵌入式通用第一个引导程序,也就是在你的操作系统开机之前运行的一个程序,用来初始化一些环境变了,最终你的 uboot 会去引导你的 kernel,然后 uboot 的使命就结束了,uboot 他也开源免费的,目前我使用的 uboot 是瑞芯微自己裁剪之后的 uboot,你如果直接从网站去下的 uboot 是不能够直接放到你的开发板上运行的,你需要适配,目前你去买点的开发板几乎都会给你裁剪适配好的 uboot 以及内
核,甚至有的直接一个完整的镜像文件。
U-boot,他是常用的嵌入式操作系统启动程序。著名的开源bootloader 程序。可以启动linux、android 等系统。
在这里插入图片描述
bootlaoder 概念(重点)
简单地说,bootloader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
我们选择U-Boot 的理由:
①开放源码;
②支持多种嵌入式操作系统内核,如Linux VxWorks,
③支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;
④较高的可靠性和稳定性;
⑤高度灵活的功能设置,适合U-Boot 调试、操作系统不同引导要求、产品
发布等;
⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
⑦较为丰富的开发调试文档与强大的网络技术支持
在你开发板上电之后他会在串口上打印很多关于uboot和内核的信息。
在这里插入图片描述
uboot的下载网站
官方地址
SDK 中附带的Uboot
在这里插入图片描述

2、A 系列通用芯片启动流程

几乎所有的 A 系统的开发板他们的启动流程几乎都是一样的,不管你是 A9 A7 等他们的启动流程几乎都是一样的,就是上电之后怎么去运行,你们要明白一个东西,就是你的任何开发板上电之后,并不是直接就来到你写的代码里,也就是我们所说的 main.c。在运行你的程序之前他做了很多的事情,初始化一些芯片的核心内容,设置时钟,初始你的 DDR 内存。
在这里插入图片描述
uboot—他是引导程序、kernel—操作系统的核心。ROM 指的是掉电不丢失的存储RAM是指掉电丢 失的存储运存。
开发板上电之后运行的详细的过程
A系列芯片在出厂的时候就已经在芯片的内部植入了一段代码,这段代码是不能修改的,也是没有源码,这段代码的作用就是初始化大量芯片内部的功能,CPU的速率以及关于时钟的一些内容,就是CPU运行的一些基本的内容,最后他会判断你的开发板启动的模式,SD卡启动还是EMMC启动,EMMC指的就是开发板自动的内存就是硬盘。他会到你的启动设备里去加载你的uboot,然后跳转到uboot去运行,uboot就是咱们自己写的代码的,不过一般是厂商修改的。如瑞芯微等公司。uboot他会去初始化本阶段所使用的一些环境,比如输出DDR内存,然后uboot他也会判断你的启动方式,就对应的启动方式里去加载内核,最后他去引导kernel到DDR运行内存里运行,然后kernel会大量的初始化你的硬件系统,比如LCD led BEEP IIC SPI 以及你自己编写的驱动,最后内核回去找文件系统,一旦文件系统运行起来了那么就来到你的桌面,那么你就可以运行各种APP了。

3、uboot的配置与使用

uboot他是一个通用的引导程序,他可以引导很多不同的开发板,所以你要使用uboot去引导你的开发板,那么你就要做适配。编译uboot之前要选型,选型的意思就是,等一会你编译出来的uboot.img是在哪一个开发板上运行的。
uboot 所有的版本:
一键适配的配置文件都在存放在uboot/configs。
所有的配置文件均是以配置名_defconfig 结尾的。
在这里插入图片描述
uboot 的配置:
make + 配置文件即可快速的配置uboot
比如我使用的是make rk3588_defconfig去配置的。
uboot 的编译:
make ARCH=arm64 CROSS_COMPILE=/home/stephen/RK3588S/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-

这里你也可以使用官方给你提供脚本去编译
./make.sh rk3588 即去编译rk3588_defconfig
如果编译的时候报找不到这个交叉编译工具那么你就去配置一下环境
sudo ged /etc/profile
export PATH=$PATH:/home/stephen/RK3588S/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin

每个厂商移植的uboot 生成的文件名字都不一样具体看厂商帮助文档为准,我的是uboot.img。
之后单独烧写 uboot.img
在这里插入图片描述

二、内核(kernel)

1、内核的介绍

内核他是一个操作系统的核心,内核几乎是管理着操作系统的所有的功能,内核他是有五大功能:
管理硬件:显卡声卡网卡键盘鼠标等
管理软件:计算机的所有的进程,都是有内核来进行管理的
管理内存:每当你运行一个进程后或者是安装一个软件的时候,需要给他分配多少空间,也是有内核来管理的。
管理文件系统:你计算机里的各种文件,都是有内核来管理的。
管理网络:你的每一个进程他们需要多少的网速都是有内核管理,以及通过网口发生数据和接受数据也都是有内核来管理的。
内核他也是开源免费的,内核他也是有不同的版本的内核运行的时候,会打印大量数据信息
在这里插入图片描述
SDK包中的kernel
在这里插入图片描述
咱们目前使用的内核也是有瑞芯微修改过之后的。目前官网最新版本已经到了6.10.6
内核官网
在这里插入图片描述
内核重要文件夹以及文件
**arch:**他里边存储的主要是和架构相关的
我是用的arm64的
在这里插入图片描述
include:他里边主要存放的是和头文件相关的
Kconfig:他是内核的藏宝图—因为内核的文件是居多的几万个文件,怎么去管理
的,这里内核是通过图形化界面的方式去管理的,图形化界面工具里的所有的选项都
是来自于每一个目录下的每一个Kconfig
ipc:进程调度相关代码
mm:内存管理
Documentation:帮助文档
net:网络协议
lib:存放的是和库相关的
scripts::编译相关脚本工具
tools:编译相关工具
drivers:设备驱动
drivers/char 他里边主要是存放咱们编写的字符设备驱动的代码。
在这里插入图片描述
fs:管理文件系统的内容
COPYING:版本模块的一些介绍
CREDITS:光荣板信息(也就是哪些对内核做过贡献)
MAINTAINERS:记录了内核的每一个部分有哪些人员在维护

2、内核的配置、裁剪和编译

对于内核来说你必须掌握怎么裁剪和添加内核,因为内核的工程比较大,怎么对这么大的工程进行裁剪和添加呢?这里内核给你提供了一个工具,图形化界面工具,就是你可以利用这个图形化界面工具对内核进行裁剪。
[] — 二值选项
y — 选中参与内核的编译 — 一般是编译到内核镜像里边了
n — 就是不选择 ---- 不参与编译
<>
y — 选中参与内核的编译 — 一般是编译到内核镜像里边了
n — 就是不选择 ---- 不参与编译
M:代表动态编译这个功能,就是这个功能代码会单独的生成一个可执行文件,这个文件不会集成到内核镜像里,需要你自己收到的把这个二进制文件给加载到内核里去运行。
裁剪:就是把你所需不要的功能给从内核里删除掉
添加:就是把自己写的一些驱动代码或者是内核里原本带的一些选择给选中

进入图形化的指令是
make menuconfig ARCH=arm64

在这里插入图片描述
内核的编译是和uboot的编译是一样的,需要你先选型配置。
make 配置文件ARCH=arm64
我的是:make rockchip_linux_defconfigARCH=arm64

编译方式:
make ARCH=arm64
CROSS_COMPILE=/home/stephen/RK3588S/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后生成boot.img
在这里插入图片描述
内核生成的镜像文件和单独烧写你需要进入loader 模式
make distclean清空编译内容还原内核最原始状态
make distclean ARCH=arm

三、其他知识点

所有版本的内核都可以通过make menuconfig ARCH=arm64
即可进入内核配置界面

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

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

相关文章

PDF转CAD必备工具:四款转换神器对比推荐

随着数字办公的普及&#xff0c;我们常常需要处理不同格式的文档。在工程和设计领域&#xff0c;PDF转CAD的转换工具更是必备之选。本文将为大家介绍四款高效、便捷的PDF转CAD工具&#xff1a; 一、福昕PDF在线转换器 直通车&#xff08;粘贴到浏览器打开&#xff09;&#x…

软件测试 - 性能测试 (概念)(并发数、吞吐量、响应时间、TPS、QPS、基准测试、并发测试、负载测试、压力测试、稳定性测试)

一、性能测试 目标&#xff1a;能够对个人编写的项目进行接口的性能测试。 一般是功能测试完成之后&#xff0c;最后做性能测试。性能测试是一个很大的范围&#xff0c;在学习过程中很难直观感受到性能。 以购物软件为例&#xff1a; 1&#xff09;购物过程中⻚⾯突然⽆法打开…

PCB设计中” 铺铜的方式“导致电焊机设计失败

发现这个问题的背景 在看到网上视频设计一个小电池的点焊机很容易&#xff0c;在一些需要电力的小设计少不了点焊&#xff0c;就想尝试一下。当然其中遇到很多坑&#xff0c;后面会一起总结。这里遇到的一个小坑&#xff0c;但让人有点苦笑不得。 首先&#xff0c;点焊需要大…

【SQL】统一字符格式

目录 语法 需求 示例 分析 代码 语法 substring(column_name, start, length)用于从一个字符串中提取子字符串 column_name&#xff08;或任何字符串表达式&#xff09;&#xff1a;这是要从中提取子字符串的列名或字符串表达式。start&#xff1a;这是子字符串开始的位置…

用Python实现时间序列模型实战——Day 3: 时间序列数据预处理

一、学习内容 1. 时间序列的差分运算 差分运算&#xff1a; 差分运算是时间序列平稳化的一种方法&#xff0c;通过计算相邻时间点的差值来消除序列中的趋势和季节性成分。 一阶差分用于去除线性趋势&#xff0c;公式为&#xff1a; 其中&#xff1a; 是时间 的原始值&…

【网络安全】服务基础第一阶段——第三节:Windows系统管理基础----服务器远程管理与安全权限

服务器远程管理是一种技术&#xff0c;服务器远程管理是指通过远程连接来监控、配置和维护服务器的过程&#xff0c;而无需直接在物理服务器前操作。它允许IT管理员在不同的地点对服务器进行配置、监控和维护&#xff0c;无需物理上接触到服务器本身。这种能力对于管理分布在多…

LLaVA-MoLE:解决多模态大型语言模型指令微调中的数据冲突问题

人工智能咨询培训老师叶梓 转载标明出处 多模态大模型&#xff08;MLLMs&#xff09;通过指令微调&#xff08;instruction finetuning&#xff09;&#xff0c;能够执行各种任务&#xff0c;如理解图表、处理文档和回答基于图像的问题。但是&#xff0c;当从不同领域混合指令…

算法——K-means算法和算法改进

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一、什么是K-means算法&#xff1f; K-means算法是一种无监督的聚类算法&#xff0c;用于将一组数据点分为K个簇&#xff08;cluster&#xff09;。其核心目标是将数据点划分到K个不同的簇中&…

CAS单点登录安装文档

CAS单点登录安装文档 目录 1、 下载CAS 2、 下载xmlsectool 3、 安装xmlsectool 4、 打包CAS 5、 部署CAS 6、 访问CAS 1.下载CAS 在CAS官方Github下载&#xff1a;https://codeload.github.com/apereo/cas/zip/v5.3.0 2.下载xmlsectool 在MVNREPOSITORY下载xm…

JavaWeb JavaScript ⑨ 正则表达式

生命的价值在于你能够镇静而又激动的欣赏这过程的美丽与悲壮 —— 24.8.31 一、正则表达式简介 正则表达式是描述字符模式的对象。正则表达式用简单的API对字符串模式匹配及检索替换&#xff0c;是对字符串执行模式匹配的强大工具。 1.语法 var pattnew RegExp(pattern,modi…

【软考】IO软件

目录 1. 说明2. 读硬盘文件3. IO 系统的层次结构与每层的主要功能4. 例题4.1 例题1 1. 说明 1.设备管理软件的设计水平决定了设备管理的效率。2.从事I0 设备管理软件的结构&#xff0c;其基本思想是分层构造&#xff0c;也就是说把设备管理软件组织成为一系列的层次。3.低层与…

【机器学习】任务二:波士顿房价的数据与鸢尾花数据分析及可视化

目录 1.实验知识准备 1.1 NumPy 1.2 Matplotlib 库 1.3 scikit-learn 库&#xff1a; 1.4 TensorFlow 1.5 Keras 2.波士顿房价的数据分析及可视化 2.1波士顿房价的数据分析 2.1.1 步骤一&#xff1a;导入所需的模块和包 2.1.2 步骤二&#xff1a;从 Keras 库中加载波…

Linux驱动开发基础(DS18B20温度模块)

所学来自百问网 目录 1.DS18B20 简介 2.硬件设计 3.软件设计 3.1 存储器介绍 3.2 通信时序 3.2.1 初始化时序 3.2.2 写时序 3.2.3 读时序 3.3 常用命令 4. 示例代码 4.1 驱动代码 4.2 应用代码 4.3 Makefile 4.4 实验效果 1.DS18B20 简介 DS18B20 温度传感器具…

[线程]阻塞队列

文章目录 阻塞队列生产者消费者模型通过BlockingQueue理解阻塞队列自己实现阻塞队列 阻塞队列 我们之前学的队列, 其实是最基础的队列, 实际开发中, 针对队列还有很多种变种 普通队列优先级队列阻塞队列 先进先出, 线程安全, 并且带有阻塞功能 阻塞功能指: 如果队列为空, 尝试…

23种设计模式之模板模式

一.什么是模板模式 ‌‌模板模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;而将一些步骤留给子类实现。‌这种模式允许子类在不改变算法结构的基础上&#xff0c;重新定义算法的某些步骤。模板模式属于行为型设计模式&#xff0c;主要用于处理那些需…

excel透视图、看板案例(超详细)

一、简介 Excel透视图&#xff08;Pivot Table&#xff09; 功能&#xff1a;透视图是一种强大的数据分析工具&#xff0c;用于汇总、分析和展示数据。它允许用户对数据进行重新排列和分类&#xff0c;从而更容易发现数据中的模式和趋势。用途&#xff1a;可以用来生成动态报表…

python07-单元测试框架unittest1-3

当测试用例数量增加&#xff0c;一个一个执行效率低下&#xff0c;需要将工程下的&#xff0c;case收集并按顺序执行将对应的代码放入run_tests.py run_tests.py&#xff1a;运行程序目的 收集所有的测试用例执行生成测试报告 运用测试用例的收集器或测试用例的加载器 7 Tes…

2.4梯度下降与量化策略优化

1. 梯度下降法的基本原理 欢迎来到“梯度下降”的世界&#xff01;听上去有点像在爬山对吧&#xff1f;其实&#xff0c;这个算法的灵感确实来自爬山。想象你在一个山谷中迷路了&#xff0c;周围雾蒙蒙的&#xff0c;看不清楚路&#xff0c;只能摸着石头一步一步往下走。每走一…

短效ip—互联网利器

《瞬息万变&#xff1a;短效IP在网络世界的奇幻之旅》 在浩瀚无垠的数字宇宙中&#xff0c;互联网如同一条奔腾不息的河流&#xff0c;携带着无数创新与技术的浪花。在这片日新月异的疆域里&#xff0c;短效IP以其独有的魅力&#xff0c;悄然成为网络探险家们手中的魔法钥匙。它…

编译原理概述

编译原理概述 编译原理是计算机科学的重要领域&#xff0c;主要研究编译器如何将高级编程语言转换为机器可执行代码。编译器的工作流程可以分为多个阶段&#xff0c;每个阶段都有特定的功能和目标。理解编译原理对于编写高效的代码、优化程序性能以及开发新语言或编译器非常重…