时间: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位字符的语言都需要(例如显示芬兰文字就不需要这个)。