06-在Uboot下升级固件— —MTK Uboot篇


时间:2019年7月17日22:02:00

在Uboot下升级固件:

         通常我们用的比较多的U-boot是:  BCM(博通)  ——》用CFE()

                                 QCA(高通)  ——》用U-boot(QCA固件的升级分  

                                          为kernel和rootfs。并且单独使用tftpd去升级的)

                                 MTK(联发科) ——》用U-boot(升级相对简单)

主要讲一下MTK的升级方法:

操作如下:

         在路由器主板上焊接TTL引脚,准备USB-TTL数据线一条(如PL2303),用的时候要把Vcc(红色的线)剪掉,要不然会烧掉USB的。

         安装串口、TFTP工具。

                   Ubuntu下,采用minicom、tftpd-hpa

                   Windows下,采用putty、tftpd32/64

虚拟机的设置:

        ① 虚拟机USB共享

         操作如下:

             在路由器主板上焊接TTL引脚,准备USB-TTL数据线一条(如PL2303)。

                 关闭Ubuntu16.04,在Oracle VM VirtualBox 管理器中点击设置,如下:

             

             接着点击USB设备

                 中的”添加一个USB赛选器”(根据自己的实际情况选择USB)

             如下图所示:

             

                 接着启动Ubuntu。

                 在终端利用命令:dmesg

             查看电脑设备信息(但是这样的话,我们很难找到自己想看到的设备信息)。

             如下:

             

                 所以,我们可以利用命令:dmesg l grep USB名称

                         过滤掉自己不想看到的信息,即只留下自己想查看的信息。

             如下:

             

                 重新插上USB,利用命令:lsusb

                         查看USB是否被重定向到linux上,直到看到相关的USB信息为止。

             如下:

             

                 然后在利用命令:dmesg

                         查看设备的信息,可以发现在终端的底部出现USB的名字。

                                然后,利用命令:sudo apt-get install minicom

                     安装minicom

                     如下:

                     

                                  接着,使用命令:sudo minicom –s

                          结果如下:

                          

                           设置波特率等信息。

                     操作如下(在没有GUI的界面下操作):

                        进入configuration界面 — —》

                        选择Serial port setup — —》(按E键)E — Bps/Par/Bits : 115200  8N1— —》

                        进入Comm  Parameters 中选择(按B键) B:<prev> M: Even T:6

                        将Current:”115200  8N1” 中的115200降到57600— —》回到上一级目录— —》

                        将A —  Serial Device :/dev/tty8修改为如下设置:

                         A —  Serial Device  :/dev/ttyUSB2.0

                        然后,回车保存并回到上一级目录:configuration。并选择:Save Setup as dfl

                        然后,回车,接着不久就会显示信息:Configuration saved(并在不久后会消失)

                        接着,按ESC键退出。

                        会显示如下信息:

                        

                        在该界面下继续用命令:dmesg查看设备(板子)信息,但是必须确保你的电脑用烧写线连接了开发板!

                        如下:

                        

                        :

                        :

                        :

                        利用命令cat /proc/cpuinfo

                        查看开发板相关信息如下:

                         

                        设置串口工具到此结束!                 

      ②tftpd-hpa和tftp的安装:

        为了方便,相关软件下载地址:http://forgotfun.org/zb_users/upload/2018/05/openwrt-lesson-06-tools.zip

        ubuntu下安装tftpd-hpa的wiki地址 https://help.ubuntu.com/community/TFTP

        下载tftpd-hpa的操作如下:           

                    sudo apt-get install tftpd-hpa
       此时您所能做的就是从TFTP服务器下载文件。如果要上载到TFTP服务器,请继续阅读。首先,复制默认的tftpd-hpa配置文件。
       如下:
                    sudo cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa.ORIGINAL
       然后,编辑tftpd-hpa配置文件,
       如下:
                     sudo vi /etc/default/tftpd-hpa

       进入配置文件中可以看到:
                    tftpd-hpa的默认配置文件是/etc/default/tftpd-hpa.
                    存储文件的默认根目录是/var/lib/tftpboot.
                    但是,我不喜欢存储文件的默认目录是/var/lib/tftpboot。
                    所以,我把它的存储目录修改为:
                                  /tftpboot
                    如下:
                    
       在tftpd-hpa的配置文件中:
                    将
TFTP_OPTIONS="--secure"换成TFTP_OPTIONS="--secure --create",并保存文件并退出vi编辑器。

       修改对tftpd-hpa根目录的访问权限,
       如下:
                    sudo chown -R tftp /tftpboot
                    但是,要注意:
                          因为我们还没有创建/tftpboot这个目录。
                          所以,我们通过以下命令来创建该目录。
                          如下:
                            sudo mkdir /tftpboot

       重新启动tftpd-hpa服务器。要使更改生效,必须重新启动tftpd-hpa服务。这可以通过执行以下命令来实现。
       如下:
                    sudo service tftpd-hpa restart
       此时,您应该拥有一个TFTP服务器,它允许您同时下载和上传文件。
       注意:
          到这里为止,我们必须测试一下tftpboot这个目录有没有创建文件的权限!
          进入tftpboot目录下,利用touch命令尝试创建xxx文件。
          如果,终端出现
                  touch:无法创建'xxx':权限不够
             的提示信息,则证明— —我们还没有在tftpboot目录下创建文件的权限!
             那么,我们就要“回到上一级目录”把用户组的权限修改为如下所示:
                                  sudo chmod -R 777 /tftpboot
             然后,在进入tftpboot目录下,利用touch目录创建xxx文件。
             这次就可以创建xxx文件了。
             接着,我们利用命令:
                        rm -rf xxx
                        删除xxx文件
       为了测试我们前面的操作是否成功了,我们先下载tftp,
       如下:
          sudo apt-get install tftp
       下载完成后。我们把目录/home/coco/project/openwrt.pro/lede/bin/targets/ramips/mt7620中的
                  openwrt-ramips-mt7620-bdcom_wap2100-sk-squashfs-sysupgrade.bin文件
                  复制到/计算机/tftpboot文件夹中,并将该文件改名为:bin。
                  然后,重新打开一个终端(在home目录下),利用touch命令创建一个新的文件,文件名为:text
                  操作过程如下:

                                                        

                按CTRL+d 退出编辑。

       补充资料:
            tftpd-hpa似乎与传统tftpd有些联系。想了解更多信息请试试.执行的命令,
       如下:
                    man tftpd
       安装完成后重新启动服务器,系统上将有一个正在运行的TFTP服务器,该服务器将在IPv 4和IPv 6上侦听所有活动的网络接口。
       您所能做的就是从TFTP服务器下载文件。
       上传不起作用。我们将在下面的配置部分修复这个问题。
       你可以通过运行。命令,
       如下:
                    sudo service tftpd-hpa status
                   或
                    netstat -a | grep tftp
      执行命令sudo service tftpd-hpa status,结果
      如下:

                             

         可以看到服务器tftpd-hpa在运行!

       ③在U-Boot下升级固件

       首先,调整虚拟机的网卡设置,增加网卡然后设置为桥接(先关闭Ubuntu,回到Oracle VM VirtualBox管理器)。

       操作如下:

           

           然后,启动虚拟机。

             连上开发板,在终端利用ifconfig命令查看网络状态。

           没连上网络之前的状态如下:

           

           连接网络后,查看网络状态如下:

           

           后加的是enp0s8。新的Ubuntu采用这种命名方式,原来采用eth0, eth1等方式命名。

             接着,打开minicom进入选择模式。

           如下:

           

           其中(选项1,2,3,4比较常用)

             选项1表示:把固件载入到内存,但是不启动(重启后代码就丢了)。

             选项2表示:加载固件后,写入到Flash。

             选项3表示:加载固件并启动系统。

             选项4表示:进入boot的命令行界面

             选项7表示:加载BootLoader并通过串口写入到Flash。

             选项9表示:加载BootLoader并通过TFTP写入Flash。

           相应操作如下:

           

          其中,device IP(10.10.10.123)==:10.10.10.123表示路由器(即开发板)的IP地址为:10.10.10.123(我们是可以改的)

             server IP(10.10.10.3)==:10.10.10.3表示Ubuntu server的IP地址(我们也可以手动改的)

             Linux Kernel filename(img.bin)==:img.bin应该改为:Linux Kernel filename(img.bin)==:bin(前面修改名字的固件)

          选择所需的镜像后,回车如下:

          

          到这里,发现运行优点异常,原因是我们没有设置IP地址。

          打开新的终端,配置IP地址,如下:

                          sudo ifconfig enp0s8 10.10.10.3(根据自己的实际IP填写)

          运行结果如下:

           

          先把固件加载到内存,在写入Flash(先擦除在烧写),信息如下。

          

          此处省略部分编译过程。

          最后我们可以看到,系统启动起来了,部分信息如下:

          

          到此时,固件已经烧写完毕!!

          接着,按4进入命令模式。看一下,该路由系统中的命令(比较精简),如下:

          

          利用help命令查看命令,如下:

          

          可以看出,这个U-boot并不是标准的,比较精简,但够用了!

          比如,使用printenv命令,如下:

          

 

总结:

解决可能存在的问题:

          解决minicom有输出却没有输入的问题!

          首先,利用lsusb查看USB的相关信息,如果没有显示我们所插的USB信息(PLS2303),如下:

          

          此时,在终端左上角显示:不能分配USB设备

          如下:

          

 

             我们重新插拔以下USB即可。然后再查看USB的相关信息。

           如下:

           

          可以通过dmesg命令,查看USB的设备号,显示如下:

            

          接着,进入minicom的配置界面:

          如下:

          

          回车后显示界面,如下:

          

          选择:Serial port setup,设置一下波特率(因为OpenWrt编译好之后默认的波特率为115200)。如下:

          

          按E键后,按A增加波特率至115200,如下:

          

          然后,选择:Save setup as dfl,再选择Exit退出后,回车如下:

          

          问题已解决!!!

          另外,其实我们用dmesg命令,也是可以看到设备的波特率的。如下:
          

          

Minicom初探:

      因为现在电脑基本不配备串行接口,所以,usb转串口成为硬件调试时的必然选择。目前知道的,PL2303的驱动是有的,

      在dev下的名称是ttyUSB#。

      minicom,tkterm都是linux下应用比较广泛的串口软件,这里简单介绍minicom使用。

一、安装

    debian 系,比如 ubuntu、mint等(新手建议装虚拟机):

    在终端执行如下命令:

              sudo apt-get install minicom

二、配置

    首先,查看串口设备是否可用。linux下的所有操作面向用户的都是文件操作,在对串口操作之前,我们应该先确认自己对该文

    件有没有读写权限。

    执行如下命令:
          ls -l /dev/ttyUSB*
                  linux下的usb串口命名为ttyUSB0,运行上面命令,可以看到有几个设备挂载。
                  我这里显示的是:

                    
                          
                  可以看到我只有ttyUSB0。
                  但是正如上面显示,ttyUSB0这个设备是root所有的,所以,我们以普通用户身份打开minicom

                  是没有办法访问该文件的。

    然后,运行如下命令:

               sudo minicom -s  
                        进入minicom的配置界面,使用上下键选择Serial port setup,回车。

                        此时光标在“change which setting”后面停留,它的上面有如下菜单:

                        

                            Serial port setup [Enter]
                            +-------------------------------------------------------------+
                            | A - Serial Device : /dev/ttyUSB0 |
                            | B - Lockfile Location : /var/lock |
                            | C - Callin Program : |
                            | D - Callout Program -: |
                            | E - Bps/Par/Bits : 115200 8N1 |
                            | F - Hardware Flow Control : No |
                            | G - Software Flow Control : No |
                            | |
                            | Change which setting? |
                            +-------------------------------------------------------------+
                            我们只需输入上面对应的字母,就可以进入相应的菜单进行设置。设置完成,
                            回车,光标会回到
                            “change which setting”,后面如此重复。完成后按回车返回主菜单。
                         注意:
                            如果不是 USB 转串口,而是直接使用串口,那么Serial Device要配置为
                            /dev/ttyS0(具体那个设备,因系统名字而异,若你不知道,只能祝你好运了。
                            返回主菜单后,选择“Save setup as dfl”,将其保存为默认设置,然后
                            选择Exit退出,注意,不是退出mincom。

三、使用
    如果上面设置顺利,重新给开发板上电后,此时,窗口里就有信息打印出来了。
    minicom基本操作如下:
              1)组合键 Ctrl+A 进入设置状态;
              2)紧接着单独按 Z 打开帮助菜单,或者你用的熟练的话,直接输入菜单对应的字母即可;
                (1)S键:发送文件到目标系统中;
                (2)W键:自动卷屏。当显示的内容超过一行之後,自动将後面的内容换行。这个功能在查看内核的啓动信息时很有用。
                (3)C键:清除屏幕的显示内容;
                (4)B键:浏览minicom的历史显示;
                (5)X键:退出minicom,会提示确认退出。

              3) 比如,使用 Ctrl-A-->O 进入 minicom 配置菜单:
                +-----[configuration]------+
                | Filenames and paths |
                | File transfer protocols -|
                | Serial port setup |
                | Modem and dialing |
                | Screen and keyboard |
                | Save setup as dfl |
                | Save setup as.. |
                | Exit |
                +--------------------------+
    我们可以配置使用 Ctrl-A-S 发送文件时的默认路径,可选择"Filenames and paths"
          进行配置:
                +-----------------------------------------------------------------------+
                | A - Download directory : /home/crliu |
                | B - Upload directory : /tmp |
                | C - Script directory : |
                | D - Script program : runscript |
                | E - Kermit program : |
                | F - Logging options |
                | |
                | Change which setting? |
                +-----------------------------------------------------------------------+
    如上,A - download 下载文件的存放位置(开发板 ---> PC, rz)开发板上的文件将被传输到PC机上的/home/crliu目录下。
       B - upload 从此处读取上传的文件(PC ---> 开发板, sz)PC机向开发板发送文件,需要发送的文件在/tmp目录
         下(PC机上的目录)。

四、其他技巧

      启动 minicom 的时候,会检测 MINICOM 环境变量,将它们作为命令参数,如果命令中指定了某个参数,那

      么这个 MINICOM中的相应的某个参数会被替换掉。

      我们在 ~/.bashrc 文件中添加这一行,使得 minicom 默认每次都进入彩色模式,并自动进入串口配置: 
                                         export MINICOM='-s -c on'

      The configuration 参数更有趣。通常,minicom从文件“minirc.dfl”中获取其缺省值。

      不过,若你给minicom一个参数,它将尝试从文件“minirc.configuration”中获取缺省值。

      因此,为不同端口、不同用户等创建多个配置文件是可能的。最好使用设备名,如:tty1, tty64,sio2等。

      如果用户创建了自己的配置文件,那么该文件将以“.minirc.dfl”为名出现在他的home目录中。

      minicom的全局配置文件通常在/etc/minirc.dfl. minicom将其配置文件保存在一个目录中,

      通常是:/var/lib/minicom,/usr/local/etc或者/etc。

      要想知道minicom编译时内定的缺省目录,可用命令“minicom -h”,在那儿你可能还会找到runscript(1)

      的demo文件。 

      配置文件的文件名格式:minirc.user。minicom默认加载配置文件minirc.df1,但你也可以仿照minirc.df1编辑自己的

      配置文件minirc.user,输入minicom user启动时则加载minirc.user。如在本机上,我做了一个minirc.root,

      输入minicom root 启动minicom,则系统自动加载/etc/minirc.root中的配置。 

        $HOME/.minirc.* 
        $HOME/.dialdir 
        $HOME/minicom.log 
        /usr/share/locale/*/LC_MESSAGES/minicom.mo 
      *命令行启动minicom的参数 
      更多的参数,参见"man minicom"的输出。 
      -s 
        设置。 root 使用此选项在/etc/minirc.dfl中编辑系统范围的缺省值。使用此参数后,minicom 将 不 进行初始化,

        而是直接进入配置菜单。如果因为你的系统被改变,或者第一次运行minicom时,minicom不能启动,这个参数就会很

        有用。对于多数系统,已经内定了比较合适的缺省值。 

      -o 
        不进行初始化。minicom 将跳过初始化代码。如果你未复位(reset)就退出了minicom,又想重启一次会话(session),

        那么用这个选项就比较爽(不会

        再有错误提示:modem is locked ---- 注)。但是也有潜在的危险:由于未对lock文件等进行检查,因此一般用户可

        能会与uucp之类的东东发生冲突......也许以后这个参数会被去掉。现在姑且假定,使用modem的用户对自己的行为足

        够负责。 

      -m 
        用Meta或Alt键重载命令键。在1.80版中这是缺省值,也可以在minicom 菜单中配置这个选项。不过若你一直使用不同

        的终端,其中有些没有Meta或Alt键,那么方便的做法还是把缺省的命令键设置为Ctrl-A,当你有了支持 Meta或Alt键

        的键盘时再使用此选项。Minicom假定你的Meta键发送ESC

        前缀,而不是设置字符最高位的那一种(见下)。 
      -M 
        跟“-m”一样,但是假定你的Meta键设置字符高端的第八位(发送128+字符代码)。 
      -z 
        使用终端状态行。仅当终端支持,并且在其termcap或terminfo数据库入口中有相关信息时才可用。 
      -l 
        逐字翻译 高位被置位的字符。使用此标志, minicom将不再尝试将IBM行字符翻译为ASCII码,而是将其直接传送。许多

        PC-Unix克隆不经翻译也能

        正确显示它们(Linux使用专门的模式:Coherent和Sco)。 
      -w 
        在启动的时候就自动换行,这样启动之后不用运行<C-a> w进行设置了,详细参考后面。 
      -a 
        特性使用。 有些终端,特别是televideo终端, 有个很讨厌的特性处理(串行而非并行)。minicom缺省使用‘-a on’,

        但若你在用这样的终端,你就可

        以(必须!)加上选项‘-a off’。尾字‘on’或‘off’需要加上。 

      -t 
        终端类型。使用此标志, 你可以重载环境变量TERM, 这在环境变量MINICOM 中使用很方便; 你可以创建一个专门的

        termcap 入口以备minicom 在

        控制台上使用,它将屏幕初始化为raw模式, 这样,连同‘-l’标志一起,就可以不经翻译而显示IBM行字符。 
      -c 
        颜色使用。些终端(如Linux控制台)支持标准ANSI转义序列色彩。由于termcap显然没有对于色彩的支持,因而minicom

        硬性内置了这些转义序列的代码。

        所以此选项缺省为off。使用‘-c on’可以打开此项。把这个标志,还有‘-m’放入MINICOM环境变量中是个不错的选择。 
      -S 
        脚本。 启动时执行给定名字的脚本。到目前为止,还不支持将用户名和口令传送给启动脚本。如果你还使用了‘-d’选

        项,以在启动时开始拨号,此脚本将在拨号之前运行,拨号项目入口由‘-d’指明。 

      -p 
        要使用的伪终端。 它超载配置文件中定义的终端端口,但仅当其为伪tty设备。提供的文件名必须采用这样的形式:

        (/dev/)tty[p-z][0-f] 
      -C 
        文件名。 启动时打开捕获文件。 
      -8 
        不经修改地传送8位字符。“连续”意指未对地点/特性进行真正改变,就不插入地点/特性控制序列。此模式用于显示8位

        多字节字符,比如日本字(TMD!应该

        是中国字!!)。不是8位字符的语言都需要(例如显示芬兰文字就不需要这个)。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM