周末晚上好,今天继续给大家分享学习Uboot的文章。由于上班时间大部分是在写应用代码:web和c++的代码(web和c++,其实我没学多少,之前我只写几篇C++的文章,工作完全是被逼无奈。),平时只是调试一下硬件,在自己的印象里有好久没有玩开发板了,这不为了过瘾,一边学习的同时,又能够玩开发板,本次学习分享硬件平台是三星的s5pv210,这个开发板去年买来学习的,已经放了好久,在吃灰了,有好多板子都被我放在那里吃灰了,现在可能是由于没有玩了,像一只饥饥饿的材狼一样,好想玩;之前的文章里面也有介绍,自己之前在毕业之前系统学过一段时间的pcb,现在这个技能也好久没用了,手也是非常痒,hh ,那天有时间也来画画板玩。总之,一句话,把板子玩起来,不要吃灰!
今天我们主要是来学习Uboot的命令,在昨天的文章里面也有提到过Uboot的命令跟Linux下的命令是不一样的,比如说,你在Uboot里面输入——ls命令,在Uboot平台下识别不了的,但是熟悉Linux的都知道,在Linux下,ls命令主要是来查看当前用户目录有哪些文件。具体我们来看下面的学习吧,Let's go :
一、三个缓冲区的了解:
在Linux学习中,我们或多或少都有听过这几个词:无缓冲、行缓冲、全缓冲;这个在之前的Linux应用编程的系列文章中IO复用里面就有用到,下面简单的介绍一下:
二、Uboot命令:print/printenv、setenv/set:
1、print/printenv命令:其实这两个命令的作用是一样的,只不过print这个命令是printenv的简写而已,它们的作用都是打印Uboot的环境变量:
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
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命令来查看它的使用说明:
x210 # help print
printenv
- print values of all environment variables
printenv name ...
- print value of environment variable 'name'
2、set/setenv命令:同理,这个两个命令是一样的作用,都是来设置环境变量的:
x210 # help set
setenv name value ...
- set environment variable 'name' to 'value ...'
setenv name
- delete environment variable 'name'
这里我们以一个示例来设置bootdelay这个环境变量来做演示:
x210 # print
mtdpart=80000 400000 3000000
bootdelay=3
baudrate=115200
x210 # set bootdelay 15
x210 # print
mtdpart=80000 400000 3000000
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
bootdelay=15
x210 # reset
x210 # print
mtdpart=80000 400000 3000000
bootdelay=3
baudrate=115200
在你重新进入Uboot中,是不是bootdealy又成了3秒了,这里我们画一个图来解释为啥:
这里是画的是一个简单草图,意思是说当上电启动时,在Flash里面的Uboot程序和环境变量被传送到ddr里面去临时运行,但是我们Flash里面的东西本质是没有变的,而只是临时在ddr里面运行而已,这就是为啥为造成上面那种现象了,那该怎么解决呢?非常简单,就是我们上面的save/saveenv命令:
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 。
[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
先在开发板这一方ping:
[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这边的情况:
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
四、总结:
好了,今天的分享就到这里了,内容比较简单,如有写错的地方,可以批评指出。