打印

u-boot的使用笔记

[复制链接]
232|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
张さん|  楼主 | 2018-9-28 19:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有一个实验叫做u-boot的使用

下面就是u-boot的使用终极必杀技

很多的人都实验进行失败了其实只有三句话输入就可以了



setenv bootargs "root=/dev/nfs rw nfsroot=192.168.1.88:/opt/rootfs ethmac=c2:01:0d:30:3a:88 ip=192.168.1.20  console=ttySAC0,115200  init=/sbin/init"



setenv bootcmd "usb start;tftp 0x40800000 zImage;mmc erase 0x1000 0x3000;mmc write 0x1000 0x3000"



setenv wrzImage "mmc dev 4;mmc read 0x40800000 0x1000 0x3000;go 0x40800000"





具体的执行步奏可以下载并阅读我的笔记,里面有详细记录





setenv bootargs "root=/dev/nfs rw nfsroot=192.168.1.88:/opt/rootfs ethmac=c2:01:0d:30:3a:88 ip=192.168.1.20  console=ttySAC0,115200  init=/sbin/init"



setenv bootcmd "usb start;tftp 0x40800000 zImage;mmc erase 0x1000 0x3000;mmc write 0x1000 0x3000"



setenv wrzImage "mmc dev 4;mmc read 0x40800000 0x1000 0x3000;go 0x40800000"



          saveenv



          run wrzImage



          usb start



      tftp 0x40800000 zImage                 完成内核到内存的下载



          mmc dev 4                        :指定要操作的mmc设备



      mmc erase 0x1000 0x3000                 :擦除指定位置,准备写内存内容到emmc



      mmc write 0x40800000 0x1000 0x3000       :写内存到emmc



     setenv wrzImage "mmc dev 4;mmc read 0x40800000 0x1000 0x3000;go 0x40800000"



         saveenv           保存环境变量



         run wrzImage           即可启动系统



ifconfig eth0 192.168.1.88





uboot 使用



下载与烧写相关:

1. 下载命令:串口下载、USB下载及网络下载

    a. 串口下载:loadb:下载二进制文件

               loads:下载.srec格式文件

               loady:以ymodem方式下载文件

演示:

    loady 地址:将串口传来的文件下载到内存指定的地址处

    如:loady 0x40800000,即将串口发送的文件下载到0x40800000开始的地方,该命令后回车,即开始对串口进行监听

    secureCRT -> 传输 -》发送y modem,传送文件

    假定传送zImage,由于zImage在Ubuntu系统下,不在Windows中,首先利用共享,将其共享过来。

    串口传输较慢,适合传一些小文件,大文件(如zImage不合适)



    b. dnw下载

    目标机执行:dnw 地址:进行监听状态

    宿主机执行: dnw  文件名:发送文件

    dnw:这里不做演示



    c. 网络下载,

    1. usb start: 由于开发板网络端口由usb转换,故首先开启usb

    2. tftp 地址 文件:从tftp服务器目录当中下载文件到指定的地址中。

    若下载不成功,检查网络配置。



演示:

    内核下载后,可以利用go命令,起动内核

    用法:go 0x40800000



    内于并没有设置根文件系统相关的参数,因此,内核启动后,不能挂载根文件系统。



2. 烧写命令:

    a. mmc list:列出mmc设备

    SAMSUNG SDHCI: 2 (SD)        :sd卡,2为SD卡的设备号

    EXYNOS DWMMC: 4        :emmc,4为emmc的设备号



    b. mmc erase:擦除mmc设备(flash设备需先擦除,然后才能进行相应的写操作)

        用法: mmc erase 起始块地址  擦除的块数

    注意:操作前,需指定操作的设备,因为这里有两个设备

    c. mmc dev 设备号:指定设备号对应的设备,为当前设备,mmc dev 4:指定设备号为4的设备为当前设备,即指定 emmc为当前设备

    d. mmc write 地址   起始块   总块数:把以“地址”开始的内存空间内容写到mmc设备中,烧写的设备起始位置为"起始块",烧写的总块数为“总块数”

    例:mmc write 0x40800000 0x1000 0x30000,把0x40800000空间的内容,写到mmc以0x1000开始的地方,共烧写0x3000个块。

    e. mmc read  add  start  cnt:从mmc中,读数据到内存,mmc中起始位置为start,读取的总块数为cnt。

    演示表明:之前存入flash中的内容,又被读回来了。   

   

   

3. 内存相关操作

    a. 查看内存:md 地址:查看以“地址”开始的空间的内容

        md 0x40800000:以4字节查看0x40800000地址空间开始的内容

        md.b 0x40800000:以字节查看0x40800000地址空间开始的内容

        具体,请help md查看用法。

    演示:将该地址空间的内容,烧到0x40800000中。

    b. 修改内存:mm 地址

    演示:mm 0x40800000,修改以0x40800000开始的地址空间内容,以4字节进行修改,修改后地址自增,用户可继续修改,当修改完毕时,输入空格,然后回车结束。

    演示表明,内容确实被修改

   



   

环境变量设置、修改、删除:

    1. printenv :可简写为pri,打印uboot中已有的环境变量

    示例:

    arch=arm

    baudrate=115200

    board=tiny4412

    上面:等号(=)左边内容为变量,右边内容为变量的值

    从输出窗口,可以看出它有很多变量

    其中:

    bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.1.88:/opt/rootfs ethmac= ip=192.168.1.20:192.168.1.88:192.168.1.1:255.255.255.0:tiny4412:eth0:off console=ttySAC0,115200 init=/sbin/init



    bootargs:为起动参数,起指定了根的挂载方式为nfs,

         挂载的目录为:nfsroot=192.168.1.88:/opt/rootfs。

         目标机的地址、网关、掩码:ip=192.168.1.20:192.168.1.88:192.168.1.1:255.255.255.0

        指定的终端及通信波特率:console=ttySAC0,115200

        inti进程:init=/sbin/init



    下面将内核下载到内存中,并将内核写入到emmc,修改内核的下载方式为读取emmc

执行过程:

    1. usb start

        tftp 0x40800000 zImage

       完成内核到内存的下载

                2. mmc dev 4:指定要操作的mmc设备

        mmc erase 0x1000 0x3000:擦除指定位置,准备写内存内容到emmc

       mmc write 0x40800000 0x1000 0x3000 :写内存到emmc



演示操作:

    1. 设置启动参数 bootargs(跳过,因为设置的和之前一样)

    2. 从emmc中下载内核

    3. 启动内核

   

    注意:由于设备的bootargs和之前的一样,所以用户可以不设置,这里演示只是说明有这么一个操作,才能正确挂载根文件系统。

   

    下面:重启开发板,再做演示,实际到这里系统就能正确启动,并挂载根文件系统了。

    演示中,服务器地址丢失,导致进不了。可在服务器端:ifconfig eth0 192.168.1.88



下面设置自启动变量,赋值为自启动所需的命令序列,序列用双引号括起,各命令之间用分号分隔:

    setenv wrzImage "mmc dev 4;mmc read 0x40800000 0x1000 0x3000;go 0x40800000"

    然后:saveenv,保存环境变量

    最后:run wrzImage,即可启动系统



演示:

    系统已经启动成功了。

   

补充:setenv 、editenv 用法

    1. setenv:创建变量、修改变量、删除变量

    演示:

    a. 创建变量:setenv 变量名  变量取值

        例:setenv var hello    :创建一个变量var,它的值为hello

    b. 修改变量:setenv 已存在的变量名   新值

        例:setenv var HELLO    :将var的值修改为HELLO

    c.删除变量:setenv 变量名        :变量后无需跟任何东西,直接回车即可



    注意:创建的变量,或对变量进行的修改要想长久起作用,必须将其保存到flash,即执行saveenv



    2. editenv:修改变量

    演示:

    editenv bootdelay    :然后回车,可以把以前的值替换为新值,如:把6替换为10,然后保存变量并重启

发现起进等待时间确实变化了。这里也可以使用setenv bootdelay 10,来设置时间为10秒

   

    over

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

448

主题

464

帖子

1

粉丝