首页 > 系统相关 >从网络启动Linux

从网络启动Linux

时间:2024-06-01 16:04:24浏览次数:15  
标签:uboot 启动 串口 Linux 文件系统 网络 linux 开发板

目录

从网络启动Linux

1、提供所需文件

启动需要的mfgtool、linux内核镜像文件zImage、设备树文件.dtb、根文件系统。这些所需资源我都整理和调试后放在云盘中,有需要的自行下载。当然,有能力的读者自行移植的这些文件,若能兼容则更好。
链接:https://pan.baidu.com/s/1ilt6Fa3FCoYYjHZPu7Ghmg?pwd=0621
提取码:0621
在这里插入图片描述

2、U-Boot的烧录

Linux系统要启动就必须需要一个 bootloader程序,也就说芯片上电以后先运行一段bootloader程序。U-Boot(Universal Boot Loader)就是一个bootloader软件。也有一些其他的软件。既然是入门,我们一切从简,这个通过uboot启动的过程,就不详细说了。直接按照步骤来。我们通过mfgtool工具来烧录uboot进开发板。
第一步:
从云盘中下载工具后解压。双击mfgtool,将mfgtool(study)复制到非中文路径下!!!
在这里插入图片描述
在这里插入图片描述
这一步很重要,最好磁盘名称也不要有中文,若所在路径包含中文可能会遇到如下问题:
在这里插入图片描述
第二步:
用usb数据线将开发板的USB_OTG接口连接至电脑上。
在这里插入图片描述
第三步:
拨码开关拨到 USB下载模式。并打开开发板的电源,若已经打开,按下复位键,以USB模式启动。
以一个USB设备连接到电脑时,电脑会叮咚一声,跟插入U盘一样的声音提示,有些电脑还会弹窗提示。
注意:(有的同学学过裸机开发,用SD卡下载程序,所以还需要检查一下不要有SD卡插入开发板)
在这里插入图片描述
第四步:
打开我提供的文件夹mfgtool,找到如下文件双击运行。
在这里插入图片描述
如已经放在非中文路径,将会成功打开,显示如下画面。
我们先不着急点击开始,开始之前打开串口助手以便观察烧写的过程。
在这里插入图片描述
第五步:
那么此时,我们将一根USB数据线将开发板的USB_TTL接口接在电脑上,用作串口。然后,我们打开一个串口助手(SecurCRT和MobaXterm都可以,后面会以MobaXterm为例),为了方便观察烧写uboot的进度和后续的环境变量的配置。
在这里插入图片描述
串口打开后显示这个样子。这个串口助手的使用非常简单。这里附上(原子)的教程图片。
在这里插入图片描述
在这里插入图片描述
选则串口,找到自己的ch340的com口(如下图,原子教程是com15,我的是com11),如果你没安装过ch340驱动:
下载链接:
  CH340/CH341
    Windows 驱动链接:https://www.wch.cn/download/CH341SER_EXE.html/
波特率配置成:115200
在这里插入图片描述
这就是打开串口之后的样子:
在这里插入图片描述
第六步:
mfgtool就可以点击start了。
在这里插入图片描述
等待下载完成后,点击stop。再点击exit退出即可。
在这里插入图片描述
第七步:
将开发板上的拨码开关拨到 EMMC启动模式。按下开发班上的复位按钮,就能够启动uboot。
在这里插入图片描述
第八步:
启动后,在倒计时结束之前,按下回车。进入uboot命令行模式。
(如果倒计时前不按回车就会启动linux内核,但由于我们还没配置好,也是无法启动的,这里我们要进行环境变量的配置。)
按下回车后,串口助手中会显示如下内容,这是打印的开发板的信息:
注:(我这是配置完成后的,与刚下载uboot后打印的信息略有出入,不重要,接着步骤往下进行即可)
在这里插入图片描述
这里的信息,关键的部分做一下简单的解释:

U-Boot 2016.03 (Jan 03 2023 - 12:08:37 +0800)

CPU: Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 40C
Reset cause: POR
Board: ALIENTEK ALPHA EMMC
I2C: ready
DRAM: 512 MiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
Display: TFT7016 (1024x600)
Video: 1024x600x24
In: serial
Out: serial
Err: serial
switch to partitions #0, OK
mmc1(part 0) is current device
Net: FEC1
Normal Boot
Hit any key to stop autoboot: 0
=>

U-Boot 2016.03 (Jan 03 2023 - 12:08:37 +0800)uboot版本号和编译时间
CPU: Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)CPU是飞思卡尔的 I.MX6ULL I.MX, 频率为 69MHz,此时频率位 396MHz。
Board: ALIENTEK ALPHA EMMC 板子名称:ALIENTEK ALPHA EMMC(原子左盟主移植时起的名字)
I2C: ready I2C准备就绪
DRAM: 512 MiB当前板子的 DRAM(内存)为 512MB
MMC: FSL_SDHC: 0, FSL_SDHC: 1 正点原子的 I.MX6ULL EMMC核心板上 FSL_SDHC(0)接的 SD(TF)卡,FSL_SDHC(1)接的 EMMC。
Display: TFT7016 (1024x600) 显示屏型号:TFT7016 (1024x600)
In: serial Out: serial Err: serial 标准输入、标准输出和标准错误所使用的终端,都是串口 (serial)。
mmc1(part 0) is current deviceemmc的第 0个分区。
Error: FEC1 address not set.FEC1刚下载应该会显示这个,网卡地址没有设置。
Hit any key to stop autoboot: 0 倒计时提示,默认倒计时 3秒(可设置长短),倒计时结束之前按下回车键就会进入 uboot命令行模式。如果在倒计时结束以后没有按下回车键,那么 Linux内核就会启动, Linux内核一旦启动, uboot的作用就结束了。

3、网络配置

成功烧录u-boot之后,我们下一步要进行最重要的网络配置,详细的过程见我的另一篇帖子:
链接:Ubuntu和IMX6ULL开发板网络通讯-配置方法

4、放置内核、设备树文件、根文件系统

从网络启动 linux系统的唯一目的就是为了方便调试以及熟悉网络配置的过程。
不管是为了调试 linux系统还是 linux下的驱动。每次修改 linux系统文件或者 linux下的某个驱动以后都要将其烧写到 EMMC中去测试,这样太麻烦了。我们将 linux镜像文件、设备树文件和根文件系统都放到 Ubuntu下某个指定的文件夹中,这样每次重新编译 linux内核或者某个 linux驱动以后只需要使用 cp命令将其拷贝到这个指定的文件夹中即可,这样就不用需要频繁的烧写 EMMC这样就加快了开发速度。
所以--------------我们可以通过 TFTP从 Ubuntu中下载 zImage和设备树文件,根文件系统通过 NFS挂载。

那么,接下来,我们先将我提供的文件夹里的:

imx6ull-alientek-emmc.dtb设备树文件】
zImage系统镜像文件】
rootfs.tar.bz2根文件系统的压缩包】
通过FileFilla传到我们的ubuntu中。
在这里插入图片描述
在这里插入图片描述
将这两个放在tftpboot目录下:(在ubuntu中要给予这两个文件权限)
在这里插入图片描述
进入到这个目录并给与这两个文件权限,输入命令:

cd linux/tftpboot
chmod 777 imx6ull-alientek-emmc.dtb
chmod 777 zImage

在这里插入图片描述

将这个放在nfs目录下:(这是个压缩包,我们需要在ubuntu中使用命令进行解压)
在这里插入图片描述
解压输入命令:

cd linux/nfs
tar -vxjf rootfs.tar.bz2

在这里插入图片描述
完成之后,我们就拥有了linux系统启动所需要的:

imx6ull-alientek-emmc.dtb设备树文件】
zImage系统镜像文件】
rootfs根文件系统】
---------------------------------------------------------------------->
imx6ull-alientek-emmc.dtb设备树文件】这两个通过TFTP被下载到开发板的 DRAM中,启动linux系统。
zImage系统镜像文件】
---------------------------------------------------------------------->
rootfs根文件系统】这个则通过NFS挂载根文件系统,即不需要本地的根文件系统,而是通过网络直接从NFS服务器启动。实际上是利用ubuntu作为NFS服务器来提供内核和根文件系统的NFS共享。类似于共享文件夹。

接下来就可以正式启动内核了。

5、启动Linux

我们再次按下开发板的复位键,这次不用在倒计时结束前按回车,直接等待他自己启动。
一切按照流程顺利操作的话,应该会显示如下内容:
在这里插入图片描述
等待他启动完成后,会显示让你按下回车:
我们按下回车后,就像看到了ubuntu下操作linux系统一样。
输入:

ls

能看到,这就是根文件系统的所有文件夹。
(这里的根文件系统是原子提供的移植后的,比自己一步一步移植的文件要多)用来学习教程。
在这里插入图片描述
到这里,我们的linux系统就能够通过网络完成启动了。

标签:uboot,启动,串口,Linux,文件系统,网络,linux,开发板
From: https://blog.csdn.net/qq_45083790/article/details/139374826

相关文章

  • 宝塔Linux面板-Docker管理(2024详解)
    上一篇文章《宝塔Linux可视化运维面板-详细教程2024》,详细介绍了宝塔Linux面板的详细安装和配置方法。本文详细介绍使用Linux面板管理服务器Docker环境。目录1、安装Docker1.1在线安装​编辑 1.2手动安装1.3运行状态1.4镜像加速2应用商店 3总览 4容器4.1......
  • 宝塔Linux可视化运维面板-详细教程2024
    生产环境的Web服务器多数都是Linux操作系统。包括云服务器在内,都是通过命令行进行服务器的运维和管理。本文详细介绍如何通过宝塔面板实现可视化服务器管理。目录1什么是宝塔面板2Linux面板安装3面板使用3.1登录3.2绑定账号 3.3安装服务器环境套件(可选)3.4软件......
  • Linux系统编程之线程
    一.线程介绍1.进程与线程典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。进程是程序执行时的一个实例,是担当分配系统资源(CP......
  • Linux系统编程之进程间通信(IPC)
    一.进程间通信概述进程间通信(IPC,InterProcessCommunication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中Socket和Streams支持不同主机上的两个进程IPC二.管道1.匿名管道(1)特点1......
  • Java中的网络编程:构建稳健的分布式应用
            网络编程是Java开发中至关重要的一部分,特别是在构建分布式系统和网络应用程序时。Java提供了丰富的网络编程API和库,使开发者能够轻松创建各种网络应用。本文将介绍Java中的网络编程基础、常用的网络通信协议、以及如何利用Java构建稳健的分布式应用。####1.......
  • GraalVM - Java8 Linux AMD64
    使用GraalVM在linuxamd64环境下编译Java8程序的步骤主要包括:下载GraalVM下载native-image安装native-image编译程序1.下载GraalVM可以通过Github的release页面直接下载(往回找,找到支持java8的graalvm-ce-java8-linux-amd64-20.3.2.tar.gz)https://github.com/graalvm/gra......
  • Linux文本文件管理003
    ★排序、去重、统计★1)排序sort-n按照数值排序-r降序排列2)去重uniq过滤相邻、重复的行-c对重复行计数3)统计wc统计文件中的字节数、单词数、行数-l显示行数今天通过使用grep、awk、cut指令和上面几个选项提取文本文件的信息方法1:[root@localhostnginx]#ca......
  • Linux进程管理
    在Linux系统中,进程管理是一个重要的任务。以下是一些常用的进程管理指令总结:1.ps:显示当前系统中的进程信息。可以使用psaux来查看所有用户的进程信息,包括详细的状态、CPU使用率等。psaux2.top:实时显示系统中的进程信息,包括进程ID、用户、CPU使用率、内存使用情况等......
  • 【Linux】如何利用linux项目自动化构建工具-make/Makefile以及vim编辑器构建两个小程
    1.倒计时小程序首先我们Linux中创建目录test1,该目录中包含了makefile文件,和main.c文件(该文件是源文件用于编写倒计时程序的代码)再进行依赖方法和依赖关系的确定: 利用vim编辑器编辑makefile文件:注意:在依赖方法前面加@的作用是,执行make指令后,将对应的依赖方法不显示在屏幕......
  • Linux基础 (九):Linux 进程复制与替换
       各位看官,本篇博客干货满满,请耐下心来,慢慢吸收!哈哈哈,内功一定会大增!目录一、printf函数输出问题1.1第1个示例代码1.2第2个示例代码1.3分析与结论二、主函数参数介绍三、复制进程fork3.1进程的基本概念3.2fork()方法3.3fork方法使用示例3.4 面试题fo......