lv12 linux内核的安装与加载

目录

1 tftp加载Linux内核及rootfs

1.1 uboot内核启动命令 

1.2 uboot自启动参数环境变量 

1.3 实验

2 EMMC加载Linux 内核及rootfs 

​编辑

 2.1 emmc中写入uimage

​编辑

 2.2 emmc中写入dtb

 2.3 emmc中写入根文件系统

2.4 设置环境变量 

3 tftp加载Linux内核nfs挂载rootfs

3.1 复制rootfs压缩包到nfs服务器目录 

3.2 设置环境变量

3.3 启动检测 

4 最后EMMC加载boot

4.1 复制uboot到tftp服务器目录

4.2 写入emmc​编辑

4.3 重新上电 

5 练习


1 tftp加载Linux内核及rootfs

tftp即通过网络把远端服务器中的的linux内核、设备树、根文件系统辅助到内存中运行。

1.1 uboot内核启动命令 

bootm启动指定内存地址上的Linux内核并为内核传递参数bootm kernel-addr ramdisk-addr dtb-addr注:kernel-addr:	内核的下载地址  ramdisk-addr:	根文件系统的下载地址  	dtb-addr:		设备树的下载地址若不使用相应的地址,对应的位置写“-”eg: bootm 0x41000000 - 0x42000000	

 

1.2 uboot自启动参数环境变量 

bootargseg:setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs     rw console=ttySAC2,115200 init=/linuxrc ip=***.***.***.***注:root		根文件系统类型(nfs)nfsroot		网络文件系统路径(xxx.xxx.xxx.xxx:/opt/4412/rootfs)rw      	操作网络文件系统的权限(rw)console		控制台(使用串口2,波特率115200)init        	init进程的位置(/linuxrc)ip          	linux启动后自身的IP(***.***.***.***)

1.3 实验

详细信息参考实验手册

将资料中“ Linux 内核镜像”目录下的“ uImage ”和“ exynos4412-fs4412.dtb ”拷贝到 ubuntu 中 tftp 工作目录下
将资料中“根文件系统镜像”目录下的“ramdisk ”也拷贝到 ubuntu tftp 工作目录下

步骤一:建立tftp服务器目录,/home/linux/tftpboot(具体如何搭建参考手册)

步骤二:修改uboot内核启动命令,保存环境变量

setenv ipaddr [本机ip]setenv serverip ]tftp服务器ip]setenv gatewayip [网关]setenv bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;tftp 0x43000000 ramdisk.img\;bootm 0x41000000 0x43000000 0x42000000saveenv

 步骤三:重启开发板

 

2 EMMC加载Linux 内核及rootfs 

通过上述方式我们虽然可以加载 Linux 内核和根文件系统并正常运行,但上述方式我们是把
内核镜像、设备树、根文件系统镜像都放到了 tftp 服务器上,然后开发板上电之后再通过
tftp 去下载这些文件到开发板的内存中运行;但在实际做一个产品的时候我们不可能每次开
机都通过网络去服务器上下载这些镜像,所以以下步骤我们就将这些镜像安装到开发板上
的 EMMC 中,然后从 EMMC 启动内核

 2.1 emmc中写入uimage

查看uimage大小,计算需要占用多少个扇区,我们从0x800开始,前面以后留个uboot。后面需要1708个扇区,所以给了2000个扇区存放。

  

 2.2 emmc中写入dtb

直接从0x2800开始刷,主要比43大就行,实验中分了800

 2.3 emmc中写入根文件系统

0x2800+0x800=0x3000,大小计算同上

2.4 设置环境变量 

setenv bootcmd 'mmc read 0 0x41000000 0x800 0x2000\;mmc read 0 0x42000000 0x2800 0x800\;mmc read 0 0x43000000 0x3000 0x2000\;bootm 0x41000000 0x43000000 0x42000000'
saveenv

3 tftp加载Linux内核nfs挂载rootfs

这种方式,开发效率较高。

在后续的课程中我们会经常修改内核和设备数的源码,也会经常向根文件系统中添加一些
驱动或应用程序,这样每次修改之后我们都要重新将内核或根文件系统安装到 EMMC 中,
步骤会比较繁琐,开发效率也比较低,所以在 开发阶段 我们经常使用的方式是通过 tftp
载内核和设备树再通过 nfs 挂载根文件系统(后续课程都是使用这种方式),这样步骤
简单,效率也比较高,待产品定型之后在安装到 EMMC

3.1 复制rootfs压缩包到nfs服务器目录 

 

3.2 设置环境变量

3.3 启动检测 

  

 

4 最后EMMC加载boot

系统脱离SD卡的启动方式

sd默认是第1块启动,第0块是分区表,但是emmc不一样,默认是第0块启动

4.1 复制uboot到tftp服务器目录

4.2 写入emmc

4.3 重新上电 

5 练习

1.简述uboot中bootargs环境变量的功能?

1 bootargs 是一个环境变量,用于指定 Linux 内核启动时的参数。它是 U-Boot 启动 Linux 内核时传递给内核的第一个参数,也是内核启动时使用的命令行参数。U-Boot 在启动 Linux 内核前,将 bootargs 环境变量的值拼接成一个字符串,并传递给内核。这个字符串包含了启动内核所需的所有参数和信息,内核启动后会解析这个字符串并按照其中的参数和信息进行配置和初始化.它直接影响到内核启动后的配置和运行。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tekton 克隆 git 仓库

Tekton 克隆 git仓库 介绍如何使用 Tektonhub 官方 git-clone task 克隆 github 上的源码到本地。 git-clone task yaml文件下载地址:https://hub.tekton.dev/tekton/task/git-clone 查看git-clone task yaml内容: 点击Install,选择一种…

5G工业网关视频传输应用

随着科技的不断进步,5G网络技术已经成为了当前最热门的话题之一。而其中一个引人注目的领域就是5G视频传输和5G工业网关应用。在传统网络通信中,由于带宽和延迟的限制,视频传输常常受到限制,而工业网关应用也存在着链路不稳定、数…

HTML基础标签

但实际上无论声明为中文还是英文都可以写&#xff0c;中文/英文 主要是浏览器在进行调用翻译功能的时候&#xff0c;会按照声明的语言来进行翻译。 标签语义&#xff1a; 标签的属性一般都是在第一个标签中定义该标签效果所拥有的属性。 即标签的作用是什么 <>标签功能…

十四、YARN核心架构

1、目标 &#xff08;1&#xff09;掌握YARN的运行角色和角色之间的关系 &#xff08;2&#xff09;理解使用容器做资源分配和隔离 2、核心架构 &#xff08;1&#xff09;和HDFS架构的对比 HDFS架构&#xff1a; YARN架构&#xff1a;&#xff08;主从模式&#xff09; &…

随机森林1(了解整体知识架构)

很多人想学习或者了解随机森林&#xff0c;查到的资料都是先讲熵&#xff0c;再讲决策树&#xff0c;然后再讲随机森林&#xff0c;前面坚持不下来或者一个地方没理解透彻&#xff0c;导致无法向下学习&#xff0c;而且公式讲解不够清晰&#xff0c;例子不够详细&#xff0c;很…

Python多态原理及实现

对于弱类型的语言来说&#xff0c;变量并没有声明类型&#xff0c;因此同一个变量完全可以在不同的时间引用不同的对象。当同一个变量在调用同一个方法时&#xff0c;完全可能呈现出多种行为&#xff08;具体呈现出哪种行为由该变量所引用的对象来决定&#xff09;&#xff0c;…

持续集成交付CICD:Jenkins使用基于SaltStack的CD流水线部署前后端应用

目录 一、实验 1.Jenkins使用基于SaltStack的CD流水线部署后端应用 2.Jenkins使用基于SaltStack的CD流水线部署前端应用 一、实验 1.Jenkins使用基于SaltStack的CD流水线部署后端应用 &#xff08;1&#xff09;GitLab添加Token (2)Jenkins添加凭据 &#xff08;3&#xf…

c++面经总结

C基础语法 C和c的区别 c中new和delete是对内存分配的运算符&#xff0c;取代了c中的malloc和free 标准c中的字符串类取代了标准c函数库头文件中的字符数组处理函数(c中没有字符串类型). 在c中&#xff0c;允许有相同的函数名&#xff0c;不过他们的参数类型不能完全相同&…

如何连接到 Azure SQL 数据库(下)

在《如何连接到 Azure SQL 数据库&#xff08;上&#xff09;》中&#xff0c;我们已经了解到了以下内容↓↓↓ 开始之前&#xff1a;Azure 连接凭据和防火墙 如何检索 Azure 连接凭据如何配置服务器防火墙使用 SQL Server Management Studio 连接到 Azure使用 dbForge Studio…

(1)(1.8) MSP(MultiWii 串行协议)(4.1 版)

文章目录 前言 1 协议概述 2 配置 3 参数说明 前言 ArduPilot 支持 MSP 协议&#xff0c;可通过任何串行端口进行遥测和传感器。这允许 ArduPilot 将其遥测数据发送到 MSP 兼容设备&#xff08;如大疆护目镜&#xff09;&#xff0c;用于屏幕显示&#xff08;OSD&#xff…

HarmonyOS 应用开发 —— ArkTS 可复用代码块梳理

目录 ArkTS 复用代码块弹窗提醒网络请求消息通知如何给任意组件添加 multiState&#xff1f;如何给 ListItem 添加删除按钮&#xff0c; ArkTS 复用代码块 记录一下自己这几天学习成果&#xff0c;我发官方文档很全&#xff0c;都是有时候查找起来不是很容易&#xff0c;因此总…

Go delve调试工具的简单应用

Delve是个啥 Delve is a debugger for the Go programming language. The goal of the project is to provide a simple, full featured debugging tool for Go. Delve should be easy to invoke and easy to use. Chances are if you’re using a debugger, things aren’t go…