实验五 Linux 内核的安装与加载

news2024/10/5 18:29:11

【实验目的】

掌握 uboot 的使用方法,能够使用 uboot 安装和加载内核

【实验环境】

  1. ubuntu 14.04 发行版
  2. FS4412 实验平台

【注意事项】

  1. 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行,以“#”开头的命令表
    示在开发板下执行

【实验步骤】

一、通过 tftp 加载内核和根文件系统

  1. 将资料中“Linux 内核镜像”目录下的“uImage”和“exynos4412-fs4412.dtb”拷贝到ubuntu 中 tftp 工作目录下
    将资料中“根文件系统镜像”目录下的“ramdisk”也拷贝到 ubuntu 中 tftp 工作目录下
    在这里插入图片描述
    修改这些文件的权限

    $ sudo chmod 777 /tftpboot/*
    
  2. 重启 tftp 服务器

    $ sudo service tftpd-hpa restart
    
  3. 连接开发板与电脑,在 uboot 交互模式下,设置 uboot 的启动参数
    # setenv ipaddr ...
    # setenv serverip xxx.xxx.xxx.xxx
    # setenv bootcmd tftp 0x41000000 uImage;tftp 0x42000000 exynos4412-fs4412.dtb;tftp 0x43000000 ramdisk.img;bootm 0x41000000 0x43000000 0x42000000
    # setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs/ rw console=ttySAC2,115200 init=/linuxrc ip=...

注 1:xxx.xxx.xxx.xxx 为 ubuntu 主机的 ip,..***.***为开发板的 ip,必须和 ubuntu主机的 ip 在同一个网段(根据自己电脑情况进行设置)
注 2 :以上设置手动输入,命令粘贴可能会有中文符号
设置完成后保存这些参数

	# saveenv
  1. 检查网络设置是否正确,使用网线连接开发板与电脑,然后给开发板重新上电,上电之后观察 uboot 是否能通过 tftp 加载和启动内核,启动时是否能挂载根文件系统(ext2),启动完成后在终端上输入 linux 下的 shell 命令测试是否正常

在这里插入图片描述

二、通过 EMMC 加载内核和根文件系统

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

  1. 给开发板重新上电,在 uboot 交互模式下,去下载并安装这些镜像
    下载内核镜像到内存中

    # tftp 0x41000000 uImage
    

将内核镜像写入到 EMMC 中指定的扇区

	# mmc write 0 0x41000000 0x800 0x2000

显示如下信息表示安装成功
在这里插入图片描述

下载设备树到内存中

	# tftp 0x41000000 exynos4412-fs4412.dtb

将设备树写入到 EMMC 中指定的扇区

	# mmc write 0 0x41000000 0x2800 0x800

显示如下信息表示安装成功
下载根文件系统镜像到内存中

	# tftp 0x41000000 ramdisk.img

将根文件系统镜像写入到 EMMC 中指定的扇区

	# mmc write 0 0x41000000 0x3000 0x2000

显示如下信息表示安装成功
在这里插入图片描述

  1. 因为要从 EMMC 驱动,所以还要修改 uboot 的启动参数

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

若设置无法保存可尝试如下格式

	# 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
  1. 给开发板重新上电,上电之后观察内核是否能通过 EMMC 加载和启动内核,启动完成后是否能挂载根文件系统(ext2),在终端上输入 linux 下的 shell 命令测试是否正常
    在这里插入图片描述

三、通过 tftp 加载内核通过 nfs 挂载根文件系统

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

  1. 将资料中“根文件系统镜像”目录下的“rootfs.tar”拷贝到 ubuntu 中 nfs 工作目录下
    在这里插入图片描述

解压跟文件系统到 nfs 工作目录

	$ sudo tar xvf rootfs.tar.xz

解压完成后删除原有压缩包

	$ sudo rm rootfs.tar.xz
  1. 修改 uboot 的启动参数

    # setenv bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;bootm 0x41000000 - 0x42000000
    

设置完成后保存这些参数

	# saveenv
  1. 重启 nfs 服务器

    $ sudo service nfs-kernel-server restart
    
  2. 给开发板重新上电,上电之后观察内核是否能通过 tftp 加载和启动内核,启动完成后是否能挂载根文件系统(nfs),在终端上输入 linux 下的 shell 命令测试是否正常,若启动正常我们向 nfs 的工作目录中添加了新的文件之后可以在开发板直接看到
    在这里插入图片描述

四、将 uboot 安装到 EMMC

以上的几种方式中我们既可以通过网络启动内核也可以将内核安装到 EMMC 中从本地启动,但是对于 uboot 我们一直使用的是从 SD 卡启动,所以我们也可以将 uboot 安装到 EMMC 中然后从 EMMC 启动 uboot,这样就可以不使用 SD 卡了

  1. 将资料中“u-boot 镜像”目录下的“u-boot-fs4412.bin”拷贝到 ubuntu 中 tftp 工作目录
    在这里插入图片描述

  2. 给开发板重新上电,在 uboot 交互模式下,去下载并安装 uboot

    # tftp 0x41000000 u-boot-fs4412.bin
    

将内核镜像安装到 EMMC 中指定的扇区

	# emmc open 0
	# mmc write 0 0x41000000 0x0 0x800
	# emmc close 0
	emmc 命令打开引导分区,这样就可以在EMMC中写入u-boot引导程序了,注意写入完毕要关闭引导分区
	fs4412开发板SD卡启动方式是从第一块内存开始搬移运行程序,EMMC启动方式是从第0块内存开始搬移运行程序

显示如下信息表示安装成功
在这里插入图片描述

  1. 关闭开发板电源,调整拨码开关位置为 EMMC 启动
    在这里插入图片描述

  2. 给开发板重新上电,观察 uboot 是否能正常启动
    在这里插入图片描述

因为启动的是 EMMC 中的 uboot 所以环境变量还需要重新设置

uboot内核启动命令

bootm

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

uboot自启动参数环境变量

bootargs

eg:
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)				(自己服务器ip地址,nfs目录)
rw      	操作网络文件系统的权限(rw)
console		控制台(使用串口2,波特率115200)
init        init进程的位置(/linuxrc)
ip          linux启动后自身的IP(***.***.***.***)uboot中的ipaddr地址

0x42000000 - 0x41000000 = 1000000字节(十进制:16777216)
16777216 / 1024字节 = 16384K
16384K / 1024K = 16M

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

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

相关文章

cve-2023-3079漏洞与patch分析

POC function set(arr, key, val) {arr[key] val; } function leak_hole() {for(let i 0; i < 10; i) {set(arguments, "foo", 1);}set(new Array(), 0, 1);set(arguments, 0, 1);return arguments[1]; } %DebugPrint(leak_hole());分析 通过对此漏洞的patch分…

ASEMI新能源专用整流桥GBU816参数,GBU816封装

编辑-Z GBU816参数描述&#xff1a; 型号&#xff1a;GBU816 最大峰值反向电压(VRRM)&#xff1a;1600V 平均整流正向电流(IF)&#xff1a;8A 正向浪涌电流(IFSM)&#xff1a;200A 工作接点温度和储存温度(TJ, Tstg)&#xff1a;-55 to 150℃ 最大热阻(RθJC)&#xff1…

融云深度参与「新加坡 GTLC 大会」,连接亚太机遇、开拓国际市场

8 月 18 日&#xff0c;由 TGO 鲲鹏会主办的新加坡 GTLC&#xff08;Global Tech Leadership Conference&#xff0c;全球技术领导力大会&#xff09;圆满收官&#xff0c;融云作为共创伙伴深度参与了大会。关注【融云全球互联网通信云】了解更多 本次大会以“Connecting Asia…

RunnerGo性能测试时如何从数据库获取数据

我们在做性能测试或者场景测试时往往需要从数据库中获取一些真实的系统数据让我们配置的场景更加贴合实际。而RunnerGo也是在最近的大版本更新中推出连接数据库功能&#xff0c;本篇文章也给大家讲解一下具体的操作方法和实际应用场景。 配置数据库 首先进入RunnerGo页面&…

Java实现excel表数据的批量存储(结合easyexcel插件)

场景&#xff1a;加哥最近在做项目时&#xff0c;苦于系统自身并未提供数据批量导入的功能还不能自行添加上该功能&#xff0c;且自身不想手动一条一条将数据录入系统。随后&#xff0c;自己使用JDBC连接数据库、使用EasyExcel插件读取表格并将数据按照业务逻辑批量插入数据库完…

芯片行业入行小知识,快速学习!

进入芯片行业是一个充满挑战但又充满机会的领域。无论是作为工程师、设计师、销售人员还是管理者&#xff0c;以下是一些有关芯片行业入行的小知识。 1、什么是IC 集成电路的英文简称叫IC&#xff0c;IC即integrated circuit。如果有人和你说他做的是IT行业&#xff0c;那么你…

数字孪生能为教育事业带来什么新变化?

随着科技的飞速发展&#xff0c;数字孪生作为一种创新性技术&#xff0c;正在逐渐在各个领域展现出巨大的潜力。其中&#xff0c;教育领域也开始积极探索数字孪生的应用&#xff0c;为学习和教育带来了新的可能性和改变。在教育中&#xff0c;数字孪生可以用于创造具有真实性的…

Me-and-My-Girlfriend靶场

靶机下载&#xff1a; https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 一、信息收集 查找ip nmap -sP 192.168.16.0/24获取详细端口等信息 nmap -sV -sC -A -p 1-65535 192.168.16.209目录扫描 gobuster dir -u http://192.168.16.209 -w /usr/share/word…

无脑入门pytorch系列(五)—— nn.Dropout

本系列教程适用于没有任何pytorch的同学&#xff08;简单的python语法还是要的&#xff09;&#xff0c;从代码的表层出发挖掘代码的深层含义&#xff0c;理解具体的意思和内涵。pytorch的很多函数看着非常简单&#xff0c;但是其中包含了很多内容&#xff0c;不了解其中的意思…

Seaborn数据可视化(三)

1.绘制直方图 使用displot()绘制直方图。 import seaborn as sns import numpy as np import matplotlib.pyplot as plt# 生成随机数据 np.random.seed(0) data np.random.randn(1000)# 使用displot绘制直方图 sns.displot(data, bins10, kdeTrue)# 展示图形 plt.show() 结…

山西电力市场日前价格预测【2023-08-23】

日前价格预测 预测明日&#xff08;2023-08-23&#xff09;山西电力市场全天平均日前电价为327.31元/MWh。其中&#xff0c;最高日前电价为363.47元/MWh&#xff0c;预计出现在19: 45。最低日前电价为283.86元/MWh&#xff0c;预计出现在03: 30。 价差方向预测 1&#xff1a; 实…

mysql Left Join on条件 where条件的用法区别

数据准备 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id; 执行结果 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id and t2.localbeijing; SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id where t2.localbeijing…

微服务之光:探索代码质量的新维度

在当今的软件开发领域&#xff0c;微服务架构已经成为了一种主流的设计模式。但随着其带来的灵活性和可扩展性&#xff0c;也带来了一系列的挑战&#xff0c;尤其是在代码质量管理方面。本文将深入探讨如何在微服务架构中确保代码的质量&#xff0c;并提供一些实践策略和工具。…

Docker容器与虚拟化技术:Docker consul 实现服务注册与发现

目录 一、理论 1.Docker consul 二、实验 1.consul部署 2. consul-template部署 三、总结 一、理论 1.Docker consul &#xff08;1&#xff09;服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&…

系统架构设计师之缓存技术:Redis与Memcache能力比较

系统架构设计师之缓存技术&#xff1a;Redis与Memcache能力比较

中国算力大会丨看看中兴新支点国产系统如何提升算力

近日&#xff0c;由工业和信息化部、宁夏回族自治区人民政府共同主办的2023中国算力&#xff08;基础设施&#xff09;大会在宁夏银川拉开帷幕&#xff0c;为期三天的“算力中国”创新成果展精彩亮相。中兴新支点国产操作系统的亮相&#xff0c;引起现场众多嘉宾前来了解。 “中…

Android类加载机制

要说Android的类加载机制 &#xff0c;就离不开 类加载器ClassLoader&#xff0c;它是一个抽象接口 下面这个图还是比较好表达了类加载流程&#xff0c;但如果不看我红色画的线&#xff0c;就会感觉有点乱&#xff0c;需要注意是采用的是双亲委派模式&#xff0c;class加载要先…

​Softing dataFEED OPC Suite——助力数字孪生技术发展

一 行业概览 数字孪生技术是充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺度、多概率的仿真过程&#xff0c;在虚拟空间中完成映射&#xff0c;从而反映相对应的实体装备的全生命周期过程。数字孪生技术已经应用在众多领域&#xff1a…

[C++] string类常用接口的模拟实现

文章目录 1、前言2、遍历2.1 operator[ ]下标方式2.2 迭代器2.3 范围for2.4 c_str 3、容量相关3.1 size&#xff08;大小&#xff09;3.2 capacity&#xff08;容量&#xff09;3.3 empty&#xff08;判空&#xff09;3.4 clear&#xff08;清理&#xff09;3.5 reserve3.6 res…

ZooKeeper各服务器角色介绍

1 Leader Leader服务器是整个ZooKeeper集群工作机制中的核心&#xff0c;其主要工作有以下两个。 事务请求的唯一调度和处理者&#xff0c;保证集群事务处理的顺序性。 集群内部各服务器的调度者。 请求处理链 使用责任链模式来处理每一个客户端请求是ZooKeeper的一大特色。…