韦一之裸机烧写程序与ping问题(006课)

对应韦东山一期视频之006课。
韦一之裸机烧写程序与ping问题(006课)

开发板上一定有个烧写口,例如JTAG烧写口。但电脑上是不会有这个JTAG口的,因此需要一个USB烧写器将两者连接(USB烧写器),例如Jlink、OpenJtag、OP/EOP。EesyOpenJtag(也就是OP/EOP)是OpenJtag的便宜版本,他和我们的开发板是绝配,他可以直接烧写Nand Flash和Nor Flash,操作简单,价格便宜。
OP/EOP用来往Flash烧写程序: 支持NOR Flash 和 NAND Flash。
Jlink有版权,而且不支持 NAND Flash。

通过上面Jtag进行烧写,它非常的可靠,当我们板子变成了砖头的时候,可以使用Jtag进行烧写,但他的速度很慢。当我们烧写很大程序的时候,会崩溃的。因此我们可以借助USB口进行烧写,前提是板子上已经运行有一个程序,这个程序用来支持USB下载。

方式一、使用eop和oflash.exe烧写裸板程序
烧写裸板程序,需要用到的软件是oflash.exe,使用到的硬件是op/eop(easy open Jtag),以及相应的驱动程序。
oflash用来下载所有的bin文件,包括uboot.bin,uboot本就是一个大裸机程序。)
操作步骤如下:
eop连接到PC;
安装驱动(eop驱动,把完整压缩文件下载下来再安装,采用更新驱动模式安装);
安装APP(oflash);
开发板的排线连接到eop,eop的USB接口连接到电脑;
执行:oflash xxx.bin(最好以管理员权限运行cmd.exe,记得在开发板上调节拨码开关选到对应的存储区启动)
开发板断开eop,eop的USB接口最好也断开电脑;
(这里应该就是要关闭开发板了)
设置从Nor/Nand启动;
重新上电

烧写bin文件到开发板的过程:
先打开cmd命令行。
韦一之裸机烧写程序与ping问题(006课)
韦一之裸机烧写程序与ping问题(006课)
(烧写到nand中比较快一点)
韦一之裸机烧写程序与ping问题(006课)
(烧写到0地址去)
然后拔下eop线,关闭开发板电源,设置为nand启动,重新上电!

eop常见问题

  1. 未连接op/eop到电脑

  2. 有其他程序在使用op/eop (同一时间只能有一个程序使用它openjtag)

  3. jtag线未接至开发板(不能检测到CPU,cpuid=0xffffffff)
    韦一之裸机烧写程序与ping问题(006课)

  4. 开发板未上电(不能检测到CPU,cpuid=0)
    韦一之裸机烧写程序与ping问题(006课)

  5. oflash xxx.bin 时当前目录下没有xxx.bin

  6. 烧写完后没有正确设置启动开关

  7. 当烧写好程序后,开发板上电后却没有运行,则可能是没有正确设置启动开关或者是op/eop与开发板之间的排线未断开, 导致程序无法运行。 烧写完后,op/eop-----开发板之间的排线要断开。

补充一点不相关的:使用MobaXterm工具中串口工具注意session setting中Flow Control流量控制要选择NONE。

视频笔记如下:
1、韦东山展示的eop工具有两个功能,eop下载(usb转jtag,排线连接)和usb转串口功能。
所以注意安装完驱动后在端口处会又出现一个串口(如17),这里不用,不要与开发板上usb转串口混了。
2、连接后应该显示更新驱动,若没有,则右键计算机属性-设备管理器,右键选择新设备更新驱动程序软件手动找到位置安装
驱动程序在资料中002_jz2440-非压缩版-裸机-等中找。
3、如果安装过程有签名问题,百度:windows驱动禁止签名。
4、对于EOP,设备管理器那里可能会有多个其他设备!!!要安装好几次驱动程序,使用上面同一个目录即可。
5、EOP需要一个烧写软件:oflash,在韦资料下载的文件里可以直接运行。
但是韦不这样做,而是安装了OpenOCD with GUI程序,程序中自带oflash。
安装完后在win命令行输入oflash即可运行。若找不到程序,需要将目录c:\P F(x86)\openocd\0.6.0bin加入环境变量。
6、可烧写所有bin文件如:u-boot.bin 、 hardware下各种程序如leds.bin等。
烧写方式就是 oflash *.bin (注意打开命令行不能直接写这个命令,会有错误,找不到bin文件)
(可以oflash 绝对路径*
.bin)
7、uboot可以烧写到Nor Flash 和Nand Flash。裸板程序都只能烧写到Nand Flash,均从0地址开始烧。大部分都是Nand Flash启动。(也不是绝对的,原因可能就是下面这个)
(我写的裸机程序都是NAND启动的,两种方式:用JTAG工具烧;用SD卡启动的UBOOT或NOR启动的UBOOT烧。)
(如果你用NAND启动的UBOOT来烧裸板程序,那么NAND上的UBOOT就被破坏了:因为都是在NAND的0地址开始。启动是硬件会自动把nand前4K内容复制到sram中执行)
内存不用初始化吗?????
8、板子上硬件启动选择开关可以选择从Nor或Nand启动。
9、WINDOWS命令行切换目录如果要切换盘符的话,需要先打一行如 e:回车然后再cd即可。
10、注:烧写完一个bin都要把jtag线拔掉,然后调整启动开关位置,然后重新上电

使用eop烧写一个200多k的uboot时,耗费了几分钟,这速度实在太慢了,在后续的开发过程中,我们的程序可能有许多错误,需要反复修改烧写,如果继续用eop将会浪费很多时间。那么有没有更快的烧写方式呢?有的,我们用uboot进行烧写。
方式二、使用uboot烧写裸板程序(使用Uboot通过USB下载bin文件)
在2440上面,有两种flash:Nand Flash和Nor Flash。我们可以首先把uboot烧到Nor Flash,然后Nor启动运行uboot,使用uboot的USB下载功能接收PC传来的文件,然后uboot将收到的文件烧写到Nand Flash,最后Nand启动,启动我们烧写的程序。
步骤:

  1. 使用op/eop把u-boot.bin烧到nor flash;
  2. 开发板设置为nor启动, 上电后马上在串口输入空格键,使板子进入UBOOT而不是启动板子上的内核
    (连接好串口后板子开机会在电脑串口软件界面有信息,要在倒计时结束前按空格否则执行内核文件系统)
    (进入后的菜单选项可以通过q退出,通过menu再调出来)
  3. 连接PC-----------开发板的usb device口; 安装驱动(有些电脑不会弹出发现新设备,但在设备管理器其他设备中可以看到)
    (这个驱动在烧写工具-uboot-dnw-windowds版中的Zadig软件安装,参照文件。安装完后会从其他设备变到别的地方,名为SEC s3c2410x test b/d)
  4. 在UBOOT的串口菜单中输入n (表示接收USB文件并烧写到NAND!!)
    (菜单显示的是:Download u-boot to Nandflash。不要纠结了,理解成传bin文件吧)
  5. 使用单独的dnw_100ask.exe软件发送bin文件(不是命令行操作哦)
  6. uboot即会自动接收、烧写bin文件(命令行会有显示)
  7. 断电、设为NAND启动、上电:运行nand上烧好的程序(bin文件)

韦一之裸机烧写程序与ping问题(006课)
可以看到我们的东西都放在Flash上面,对于我们的JZ2440,有256M的Nand Flash和2M的Nor Flash,所以我们内核、根文件系统那么多的文件,应该是放在Nand Falsh。Nand Falsh内部数据分布如下:
韦一之裸机烧写程序与ping问题(006课)
其中bootloader既可以在Nand Flash也可以在Nor Flash,params的变量存储有uboot的参数信息。
windows出厂系统: bios启动操作系统,识别挂载C盘(内含APP) 均在硬盘中
linux:bootloader(uboot)引导启动linux内核,挂载根文件系统(内含各种APP) 均在Flash中
内核系统放在Nand Flash中(包括bootloader分区,params参数,kernel内核,rootfs文件系统)!
bootloader也可以放在Nor Flash。(也就是u-boot.bin)(烧写入uboot.bin也就是烧写BootLoader了。)
bootloader分区,params参数给u-boot用的,用于告诉u-boot内核在哪里,文件系统在哪里。

如何恢复出厂系统(比如板子变成砖头后)

  1. 使用op/eop烧写u-boot到nor/nand, 设置为nor/nand启动
  2. 上电后马上在串口输入空格键,使板子进入UBOOT而不是启动板子上的内核
  3. 连接PC-----------开发板的usb device口; 安装驱动
  4. 下载内核: 在UBOOT的串口菜单中输入k(kernel和文件系统很大,都是通过uboot使用usb下载,而上面uboot是通过eop烧写的)
  5. 使用dnw_100ask.exe这个程序发送文件,找到开发板资料2017-bin-linux-uImage文件
  6. uboot即会自动接收、烧写uImage文件
  7. 下载文件系统: 在UBOOT的串口菜单中输入y
  8. 使用dnw_100ask.exe发送 fs_qtopia.yaffs2 文件(位于bin-文件系统)
  9. uboot即会自动接收、烧写根文件系统
    (下载中会发现Nand Flash可能有坏块,不影响使用。Nand本身大容量又便宜,天然有弊端)
  10. 输入q退出UBOOT串口菜单????!!!!执行mtd命令,再输入nand erase params删除参数分区。(删除parameter,使用默认参数,什么意思呢?????)
  11. 重启(对于QT文件系统,第一次重启时会要求你较准触摸屏)
    (如果触摸不准,可以等系统启动后在串口执行:rm /etc/pointercal 然后重启再次较准)
    (陈:后面这个重启可能是要输入reboot命令执行即可)

一句话解决嵌入式开发ping问题
1、经常碰到 windows vmware ubuntu 开发板三者之间互相ping不通的问题
PC机使用网卡A连接开发板,VMWARE虚拟机就要使用同一个网卡A作为桥接网卡。
2、步骤:
(1)确定PC使用哪个网卡连接开发板(或者通过路由器连接开发板,后面老师都推荐使用路由器了,电脑和开发板都连接路由器或者集线器,而不是电脑开发板直接相连,直接相连问题多!!!!)
(2)VMWARE选择此网卡作为桥接网卡
(3)设置三者IP处于同一个网段(PC网卡ip,VMWARE的ip,开发板ip)

注意:PC上多个网卡不能设为同一网段。
使用路由器时,PC只能有一个网卡连接路由器,路由器连接开发板。
(补:若同时开启本地连接和无线网络连接,ipconfig会显示无线网络和本地的ip,两个ip,在同一个网段,不行!!!!)
(如果就是要用无线网卡,需要把本地连接这个网卡的ip改为手动输入另外一个网段)

3、操作:VMWARE编辑虚拟机设置-选择网络适配器-桥接模式配置适配器,只选中一个作为桥接网卡。
4、PC设置ip:本地连接右键属性,自动获取IP即可。然后cmd进入命令行,ipconfig查看本地连接ip。
VMWARE中UBUNTU查看ip,打开terminal,输入ifconfig。(会显示ens33 ```信息)
若在VMWARE中修改ip,在terminal输入sudo ifconfig ens33 192.168.2.133
5、看开发板的:串口连接好,重新上电。
(显示信息里有这句话:U-Boot 1.1.6 enable Ethernet alltime)
(原来的uboot只有使用网络命令时才会使能网卡,韦修改了uboot使得一上电就使能了网卡)
q退出命令行?????输入print,可以看到ipaddr。可以通过输入set ipaddr 192.168.1.162设置ip,然后输入save命令保存!!(这应该是开发板中用uboot设置网络的方法)
(都是在PC串口软件中操作的)(注意区分串口软件和vmware)
然后就可以在串口软件输入 ping 192.168.1.116(PC本地ip),显示 host is alive即为ping通。
6、开发板可以ping电脑和虚拟机,但是两个不能ping开发板,因为我们的uboot不会回应ping操作。
电脑和虚拟机可以互相PING。
PING通之后就可以使用网络命令下载文件到开发板上!!!
7、比如要使用 tftp 300000000 uImage
在串口软件输入set serverip 192.168.1.116 再输入save。(这是在uboot中,设置uboot的tftp功能呢,服务器弄成windows的ip地址。)
在PC打开一个服务器软件如tftpd,设置文件位置和本机PCip(也就是上述116)。在串口输入tftp 300000000 uImage命令即可。(使用这个命令前提是windows已经开启了服务)

补充:(不考虑使用wifi的情况下)windows的有线网貌似没有连接的话就是把有线网卡关闭了,所以windows和ubuntu这时候是ping不通的,必须有线网卡要接个东西才行!!!!

韦一之裸机烧写程序与ping问题(006课)
韦一之裸机烧写程序与ping问题(006课)
韦一之裸机烧写程序与ping问题(006课)
韦一之裸机烧写程序与ping问题(006课)
韦一之裸机烧写程序与ping问题(006课)

开发板在uboot时设置的IP,启动linux后就无效了,在linux中要重新设置。

补充:有时候vmware桥接模式可能桥接错网卡,需要手动设置:
韦一之裸机烧写程序与ping问题(006课)
韦一之裸机烧写程序与ping问题(006课)
韦一之裸机烧写程序与ping问题(006课)

windows使用两个网卡的情况:
韦一之裸机烧写程序与ping问题(006课)
此时要注意windows的两个网卡不能再同一网段。

(不考虑使用wifi的情况下)windows的有线网貌似没有连接的话就是把有线网卡关闭了,所以windows和ubuntu这时候是ping不通的,必须有线网卡要接个东西才行!!!!
韦一之裸机烧写程序与ping问题(006课)