Linux学习笔记8-Uboot移植-网络设置和其他坑的解决

Linux之所以被称为操作系统,肯定是需要有引导程序来启动各个关键外设的运行,这里可以和个人电脑PC做个类比。我们在开机的时候是不是先要进入BIOS,BIOS在初始化硬盘、内存、USB接口、网口等之后,才可以进入Windows系统对吧?当然现在的电脑BIOS的引导是感受不到的。这里的BIOS就相当于一个bootloader引导程序,所以Linux也需要这样的bootloader。实际上,一个完整的Linux操作系统就是由Bootloader+Linux内核(Linux Kernel)+根文件系统(rootfs)这三大部分组成的。

关于Uboot移植,我是完全按照正点原子的教程来一步步学习和实际练习的,但是碰到了几个坑花了很长时间才搞明白并解决,所以这一篇笔记想重点记录这几个坑的解决过程,也可以让其他碰到类似问题的伙伴能多个参考。

第一个坑也是最大的坑,就是网络配置。我开发板和PC是用网线直连的,PC通过无线网卡上互联网,这个方式估计是很多初学者的标配吧,但就是这个方式给我造成了很长时间的困扰。最容易出现的问题就是无法ping通开发板和Ubuntu虚拟机,Ubuntu和PC机也无法互相ping通,甚至出现了刚设置好可以ping通了,一重启虚拟机又不行了的奇妙现象,这就使得NFS服务和TFTP服务无法正常使用,也就没办法实际练习内核的启动。在网络上找了很多所谓的教程,发现都无法彻底解决此问题(深深觉得CSDN就是一个你抄我的、我抄你的抄袭论坛)。最后还是自己研究了虚拟机和PC机的网络设置,还算成功的搞定了。但是我的这种方法在虚拟机、PC机和开发板都互相ping通的情况下,虚拟机是无法联互联网的。

首先要确保PC和虚拟机可以互相ping通,只要这两个能互通,开发板再设置在同一网段就没问题了。

  1. 在PC的以太网属性中,必须不要勾选Microsoft LLDP协议驱动程序
    在这里插入图片描述

  2. 在以太网属性的IPv4中指定IP地址,例如192.168.0.xx

  3. 进入Ubuntu主机的虚拟网络编辑器,点击更改设置
    在这里插入图片描述

  4. 红线位置选择你PC的有线网卡,注意是有线网卡。正是这一步设置使得虚拟机无法连上互联网,而且网络连接的图标上会有个问号。所以如果有需要利用虚拟机上网的,在这里选择已桥接至自动即可。
    在这里插入图片描述
    在这里插入图片描述

  5. 在虚拟机设置的网络适配器中选择桥接模式
    在这里插入图片描述

  6. 在虚拟机的设置-网络-有线连接中,IPv4选择手动,并输入和PC同网段的IP地址
    在这里插入图片描述

  7. 这时候应该就差不多了,先在终端打一下ifconfig -a,看看网卡有没有设置地址成功。
    在这里插入图片描述
    继续在终端里ping PC主机:ping 192.168.0.xx,其中xx是自己设置的PC机以太网的IP地址。
    也可以在PC主机里ping虚拟机。
    注意:主机和虚拟机互相ping的时候一定要把网线插到开发板,开发板必须打开电源!

  8. 利用boot阶段设置开发板的IP地址等环境变量,使用setenv命令和saveenv命令,就按照正点原子的教程操作即可,当然也要用192.168.0网段。到这里基本就没问题了。

还有个坑也是困扰我了几天,但原因其实很弱智,就是使用NFS挂载根文件系统时,IP地址后面和绝对路径之间不能有空格,否则NFS挂载不了根文件系统,Linux系统启动不起来,就是下面这句指令。

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.0.12:/home/xxx/linux/nfs/rootfs,proto=tcp,nfsvers=3 rw ip=192.168.0.13:192.168.0.12:192.168.0.1:255.255.255.0::eth0:off' 

192.168.0.12:/home/xxx…冒号和/之间不能有空格~~

正点原子其实提供了适配他们开发板的U-boot,Kernel和根文件系统,也基于NXP提供的原版文件进行了适应开发板的修改,建议按照教程一步步的基于原版文件进行修改,会有不一样的收获。

接着会进入到Linux驱动开发的学习,这也是最重要的部分了。

(未完待续)

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

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

相关文章

直接插入排序【从0-1学数据结构】

文章目录 💗 直接插入排序Java代码C代码JavaScript代码稳定性时间复杂度空间复杂度 我们先来学习 直接插入排序, 直接排序算是所有排序中最简单的了,代码也非常好实现,尽管直接插入排序很简单,但是我们依旧不可以上来就直接写代码,一定要分析之后才开始写,这样可以提…

HarmonyOS4.0从零开始的开发教程21HarmonyOS云开发简介

HarmonyOS(十九)HarmonyOS云开发简介 概述 HarmonyOS云开发是DevEco Studio新推出的功能,可以让您在一个项目工程中,使用一种语言完成端侧和云侧功能的开发。 基于AppGallery Connect Serverless构建的云侧能力,让您…

【并发设计模式】聊聊两阶段终止模式如何优雅终止线程

在软件设计中,抽象出了23种设计模式,用以解决对象的创建、组合、使用三种场景。在并发编程中,针对线程的操作,也抽象出对应的并发设计模式。 两阶段终止模式- 优雅停止线程避免共享的设计模式- 只读、Copy-on-write、Thread-Spec…

YOLOv5算法改进(23)— 更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去…

(一)深入理解Mysql底层数据结构和算法

什么是索引 索引是帮助MySQL高效获取数据的排好序的数据结构 数据结构有哪些 数据结构模拟网站:Data Structure Visualization 二叉树 不适合做自增ID的数据结构。如下示意图,假设采用二叉树作为表自增主键ID的数据存储结果如下:当查询i…

Flink 数据序列化

为 Flink 量身定制的序列化框架 大家都知道现在大数据生态非常火,大多数技术组件都是运行在JVM上的,Flink也是运行在JVM上,基于JVM的数据分析引擎都需要将大量的数据存储在内存中,这就不得不面临JVM的一些问题,比如Ja…

Flink实时电商数仓(五)

FlinkSQL的join Regular join普通join,两条流的数据都时存放在内存的状态中,如果两条流数据都很大,对内存压力很大。Interval Join: 适合两条流到达时间有先后关系的;一条流的存活时间短,一条流的存活时间长。Lookup …

SQL分类

SQL分类 DDL 查询库 查询表 创建表 修改表 DML 添加数据 修改数据 删除数据 DQL 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 执行顺序 DCL 管理用户 管理权限 数据类型 数值类型 字符串类型 日期类型

数据结构-如何巧妙实现一个栈?逐步解析与代码示例

文章目录 引言1.栈的基本概念2.选择数组还是链表?3. 定义栈结构4.初始化栈5.压栈操作6.弹栈操作7.查看栈顶和判断栈空9.销毁栈操作10.测试并且打印栈内容栈的实际应用结论 引言 栈是一种基本但强大的数据结构,它在许多算法和系统功能中扮演着关键角色。…

7种常见的网络安全设备及其功能

网络安全设备在现代网络环境中起着至关重要的作用,帮助保护个人和组织免受恶意攻击。本文将介绍7种常见的网络安全设备,包括防火墙、入侵检测系统、反病毒软件、数据加密设备、虚拟私人网络、安全信息和事件管理系统以及网络访问控制设备,并详…

uniapp自定义头部导航怎么实现?

一、在pages.json文件里边写上自定义属性 "navigationStyle": "custom" 二、在对应的index页面写上以下&#xff1a; <view :style"{ height: headheight px, backgroundColor: #24B7FF, zIndex: 99, position: fixed, top: 0px, width: 100% …

基于alibaba druid的血缘解析工具

基于alibaba druid的血缘解析 1、前言 SQL血缘解析指的是通过sql语句来分析该语句中表与表之间的依赖关系和字段和字段之间的依赖关系。 本血缘解析工具仅仅对mysql数据库的select查询语句进行了血缘解析&#xff08;后续会持续扩展&#xff09;&#xff0c;该血缘解析包含了…