前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Uboot学习(四)之Uboot命令和ping命令实战

Uboot学习(四)之Uboot命令和ping命令实战

作者头像
用户6280468
发布2022-03-21 09:41:13
1.2K0
发布2022-03-21 09:41:13
举报
文章被收录于专栏:txp玩Linux

周末晚上好,今天继续给大家分享学习Uboot的文章。由于上班时间大部分是在写应用代码:web和c++的代码(web和c++,其实我没学多少,之前我只写几篇C++的文章,工作完全是被逼无奈。),平时只是调试一下硬件,在自己的印象里有好久没有玩开发板了,这不为了过瘾,一边学习的同时,又能够玩开发板,本次学习分享硬件平台是三星的s5pv210,这个开发板去年买来学习的,已经放了好久,在吃灰了,有好多板子都被我放在那里吃灰了,现在可能是由于没有玩了,像一只饥饥饿的材狼一样,好想玩;之前的文章里面也有介绍,自己之前在毕业之前系统学过一段时间的pcb,现在这个技能也好久没用了,手也是非常痒,hh ,那天有时间也来画画板玩。总之,一句话,把板子玩起来,不要吃灰!

今天我们主要是来学习Uboot的命令,在昨天的文章里面也有提到过Uboot的命令跟Linux下的命令是不一样的,比如说,你在Uboot里面输入——ls命令,在Uboot平台下识别不了的,但是熟悉Linux的都知道,在Linux下,ls命令主要是来查看当前用户目录有哪些文件。具体我们来看下面的学习吧,Let's go :

一、三个缓冲区的了解:

在Linux学习中,我们或多或少都有听过这几个词:无缓冲、行缓冲、全缓冲;这个在之前的Linux应用编程的系列文章中IO复用里面就有用到,下面简单的介绍一下:

  • 无缓冲:不对I/O操作进行缓存,对流的读写可以立即操作实际文件。典型例子就是标准出错。
  • 行缓冲:意思是你在shell终端上输入一个命令,这个命令不能马上执行,而是要你按换行回车(enter键),才会去执行这个命令。
  • 全缓冲:填满标准I/O缓存区才进行实际的I/O操作。磁盘上的了件用标准I/O打开,默认都是全缓存的。当缓存区填满或者进行flush操作时候才会进行磁盘操作。

二、Uboot命令:print/printenv、setenv/set:

1、print/printenv命令:其实这两个命令的作用是一样的,只不过print这个命令是printenv的简写而已,它们的作用都是打印Uboot的环境变量:

代码语言:javascript
复制
  x210 # print
  mtdpart=80000 400000 3000000
  bootdelay=3
  baudrate=115200
  ethaddr=00:40:5c:26:0a:5b
  ipaddr=192.168.1.88
  serverip=192.168.1.102
  gatewayip=192.168.0.1
  netmask=255.255.0.0
  bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc 
  rootfstype=ext3
  bootcmd=movi read kernel 30008000; bootm 30008000

  Environment size: 303/16380 bytes
代码语言:javascript
复制
 x210 # printenv
 mtdpart=80000 400000 3000000
 bootdelay=3
 baudrate=115200
 ethaddr=00:40:5c:26:0a:5b
 ipaddr=192.168.1.88
 serverip=192.168.1.102
 gatewayip=192.168.0.1
 netmask=255.255.0.0
 bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc 
 rootfstype=ext3
 bootcmd=movi read kernel 30008000; bootm 30008000

 Environment size: 303/16380 bytes

我们再来使用 help命令来查看它的使用说明:

代码语言:javascript
复制
 x210 # help print
 printenv 
     - print values of all environment variables
 printenv name ...
   - print value of environment variable 'name'

2、set/setenv命令:同理,这个两个命令是一样的作用,都是来设置环境变量的:

代码语言:javascript
复制
 x210 # help set
 setenv name value ...
     - set environment variable 'name' to 'value ...'
 setenv name
     - delete environment variable 'name'

这里我们以一个示例来设置bootdelay这个环境变量来做演示:

  • 我们使用print可以查看到默认bootdelay延迟是3秒钟,这里我们来设置成15秒:
代码语言:javascript
复制
 x210 # print
 mtdpart=80000 400000 3000000
 bootdelay=3
 baudrate=115200
  • 然后使用命令set来把bootdelay设置成15秒:
代码语言:javascript
复制
    x210 # set bootdelay 15
    x210 # print
    mtdpart=80000 400000 3000000
    baudrate=115200
    ethaddr=00:40:5c:26:0a:5b

    bootdelay=15
  • 最后这里就设置成功了,但是要注意这里有一个问题,就是你在重新进入到Uboot里面的话,这个bootdelay又会变成3秒,相当于说,你的设置失效了,那这是咋回事呢,且看下面的分析(先看现象再给分析):
代码语言:javascript
复制
     x210 # reset
     x210 # print
     mtdpart=80000 400000 3000000
     bootdelay=3
     baudrate=115200

在你重新进入Uboot中,是不是bootdealy又成了3秒了,这里我们画一个图来解释为啥:

这里是画的是一个简单草图,意思是说当上电启动时,在Flash里面的Uboot程序和环境变量被传送到ddr里面去临时运行,但是我们Flash里面的东西本质是没有变的,而只是临时在ddr里面运行而已,这就是为啥为造成上面那种现象了,那该怎么解决呢?非常简单,就是我们上面的save/saveenv命令:

代码语言:javascript
复制
x210 # set bootdelay 15
x210 # print
bootdelay=15
x210 # save 
x210 # reset
x210 # print
bootdelay=15

这里稍微介绍一下这两个命令的使用,saveenv/save命令不带参数,直接执行,很简单。

三、ping命令实战操作演示:

这里要说明的是,我们现在要把开发板和我们的windows连通,目前我的开发板里面已经刷了Linux系统,不过在这之前,得了解一下一些基础知识:

1、网段的概念:一个IP地址分为2部分,一部分是网段地址,另一部分是网段内的主机地址(由子网掩码来区分哪一部分是网段地址,哪一部分是IP地址)。在子网掩码是255.255.255.0的情况下,192.168.1.12这个IP地址的前三部分(192.168.1.)属于网段地址,第4部分(10)属于主机地址。

2、ping命令的使用,这个非常简单,直接是ping+ip地址。

3、好有了上面的基础,这里我把开发板上的ip地址设置成:192.168.1.20

而windows上的ip地址设置成:192.168.1.12 。

  • 首先设置开发板的i地址:
代码语言:javascript
复制
[root@x210v3 ~]# ifconfig eth0 192.168.1.20
[root@x210v3 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:09:C0:FF:EC:48  
      inet addr:192.168.1.20  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::209:c0ff:feff:ec48/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:36 errors:0 dropped:0 overruns:0 frame:0
      TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:3350 (3.2 KiB)  TX bytes:1112 (1.0 KiB)
      Interrupt:42 Base address:0x4300 
  • 设置windows上的ip地址:
  • 现在我们来看看是否能够连通:

先在开发板这一方ping:

代码语言:javascript
复制
[root@x210v3 ~]# ping 192.168.1.12
PING 192.168.1.12 (192.168.1.12): 56 data bytes
64 bytes from 192.168.1.12: seq=0 ttl=128 time=0.608 ms
64 bytes from 192.168.1.12: seq=1 ttl=128 time=0.680 ms
64 bytes from 192.168.1.12: seq=2 ttl=128 time=0.630 ms
64 bytes from 192.168.1.12: seq=3 ttl=128 time=0.482 ms
64 bytes from 192.168.1.12: seq=4 ttl=128 time=2.135 ms

出现这种现象说明就是连通了。接下来我们来看一下windows这边的情况:

代码语言:javascript
复制
C:\Users\Administrator>ping 192.168.1.20 -t

正在 Ping 192.168.1.20 具有 32 字节的数据:
来自 192.168.1.20 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.20 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.20 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.20 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.20 的回复: 字节=32 时间=3ms TTL=64
  • 通过上面的现象说明我们的试验成功了。当然这里还有可以是在Uboot下去和windows以及linux连通,还有开发板这边的Linux系统和我们虚拟机里面的Linux连通,不过这里就要注意网络配置了,很容易出错,之前在交流群里面就很多网友遇到这种问题,这个时候只能一步步去排查了。

四、总结:

好了,今天的分享就到这里了,内容比较简单,如有写错的地方,可以批评指出。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 txp玩Linux 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档