博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenWrt:通过tftp下载程序
阅读量:6238 次
发布时间:2019-06-22

本文共 6128 字,大约阅读时间需要 20 分钟。

搭建tftp服务器

TFTPTrivial File Transfer Protocol,简单文件传输协议),是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。tftp协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。

在嵌入式Linux开发中,TFTP协议在很多场合都被用到,甚至是必不可少的,特别是在内核调试阶段,在U-Boot下通过tftp协议从服务器上加载内核并运行,既方便又快捷。

一般的发行版默认都没有安装tftp服务以及tftp服务器。tftp服务依赖于网络守护进程服务程序,可选择安装inetd或者升级版的xinetd,然后安装tftptftp-server,接着修改或者创建/etc/xinetd.d/tftp配置文件,最后重启xinetd,启动tftp服务。

安装xinetd

$ sudo apt-get install xinetd

安装tftptftpd

$ sudo apt-get install tftp tftpd

或者安装tftp的增强版本tftp-hpa

$ sudo apt-get install tftp-hpa tftpd-hpa

建立/etc/default/tftpd-hpa文件,写入如下内容:

# /etc/default/tftpd-hpaTFTP_USERNAME="tftp"TFTP_DIRECTORY="/opt/tftpboot"TFTP_ADDRESS=":69"TFTP_OPTIONS="--secure"

其中TFTP_DIRECTORY设置的/var/tftpboot目录是tftp服务器的目录,设置其访问权限为777

$ sudo mkdir -pv  /opt/tftpboot/$ sudo chmod 777 /opt/tftpboot/

启动或者重启tftpd-hpa服务:

$ sudo service tftpd-hpa start   // 或者restart

tftpboot目录下创建一个test.txt文件,启动另外一个终端,输入:

$ tftp 127.0.0.1tftp> get test.txt     # 获取test.txt文件tftp> q                # 退出tftp

在终端输入ls命令,可以看到当前目录下获取到的test.txt文件。

开发板烧录程序

启动板子,系统打印如下日志:

U-Boot 1.1.3 (May 31 2017 - 12:06:08)Board: Ralink APSoC DRAM:  128 MBrelocate_code Pointer at: 87f60000******************************Software System Reset Occurred******************************flash manufacture id: c2, device id 20 18find flash: MX25L12805D============================================ Ralink UBoot Version: 4.3.0.0-------------------------------------------- ASIC 7628_MP (Port5<->None)DRAM component: 1024 Mbits DDR, width 16DRAM bus: 16 bitTotal memory: 128 MBytesFlash component: SPI FlashDate:May 31 2017  Time:12:06:08============================================ icache: sets:512, ways:4, linesz:32 ,total:65536dcache: sets:256, ways:4, linesz:32 ,total:32768  ##### The CPU freq = 575 MHZ ####  estimate memory size =128 MbytesRESET MT7628 PHY!!!!!!Please choose the operation:    1: Load system code to SDRAM via TFTP.    2: Load system code then write to Flash via TFTP.    3: Boot system code via Flash (default).   4: Entr boot command line interface.   7: Load Boot Loader code then write to Flash via Serial.    9: Load Boot Loader code then write to Flash via TFTP.

出现如上界面后,按下1。如果我们不能保证编译出来的固件是没有问题的,那么这个是最好的选项,因为它只会下载到内存运行而不会影响flash里的代码。

设置相应的IP地址和文件名,按下回车健就可以下载了:

1: System Load Linux to SDRAM via TFTP.  Please Input new ones /or Ctrl-C to discard        Input device IP (192.168.1.1) ==:192.168.0.100        Input server IP (192.168.1.100) ==:192.168.0.103        Input Linux Kernel filename () ==:uImage netboot_common, argc= 3  NetTxPacket = 0x87FB3380  KSEG1ADDR(NetTxPacket) = 0xA7FB3380  NetLoop,call eth_halt !  NetLoop,call eth_init ! Trying Eth0 (10/100-M) Waitting for RX_DMA_BUSY status Start... done ETH_STATE_ACTIVE!! TFTP from server 192.168.0.103; our IP address is 192.168.0.100Filename 'uImage'. TIMEOUT_COUNT=10,Load address: 0x80a00000Loading: Got ARP REPLY, set server/gtwy eth addr (58:00:e3:4b:48:01)Got it#################################################################         #################################################################         ###############################################################Got ARP REQUEST, return our IP##         ############################doneBytes transferred = 1139143 (1161c7 hex)NetBootFileXferSize= 001161c7Erasing SPI Flash....Writing to SPI Flash....done

下载完毕后,系统就会自行运行起来,打印如下信息:

Automatic boot of image at addr 0x80A00000 ...## Booting image at 80a00000 ...   Image Name:   MIPS OpenWrt Linux-3.18.75   Image Type:   MIPS Linux Kernel Image (lzma compressed)   Data Size:    1139079 Bytes =  1.1 MB   Load Address: 80000000   Entry Point:  80000000   Verifying Checksum ... OK   Uncompressing Kernel Image ... OKNo initrd## Transferring control to Linux (at address 80000000) ...## Giving linux memsize in MB, 128Starting kernel ...[    0.000000] Linux version 3.18.75 (txgcwm@E470) (gcc version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r49389) ) #5 Sun Oct 22 17:39:20 CST 2017[    0.000000] Board has DDR2[    0.000000] Analog PMU set to hw control[    0.000000] Digital PMU set to hw control[    0.000000] SoC Type: MediaTek MT7628AN ver:1 eco:2[    0.000000] bootconsole [early0] enabled[    0.000000] CPU0 revision is: 00019655 (MIPS 24KEc)[    0.000000] Determined physical RAM map:[    0.000000]  memory: 08000000 @ 00000000 (usable)[    0.000000] Initrd not found or empty - disabling initrd[    0.000000] Zone ranges:[    0.000000]   Normal   [mem 0x00000000-0x07ffffff][    0.000000] Movable zone start for each node[    0.000000] Early memory node ranges[    0.000000]   node   0: [mem 0x00000000-0x07ffffff][    0.000000] Initmem setup node 0 [mem 0x00000000-0x07ffffff][    0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.[    0.000000] Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes[    0.000000] No valid device tree found, continuing without[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512[    0.000000] Kernel command line:  rootfstype=squashfs,jffs2[    0.000000] PID hash table entries: 512 (order: -1, 2048 bytes)[    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)[    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)[    0.000000] Writing ErrCtl register=0000aa00[    0.000000] Readback ErrCtl register=0000aa00[    0.000000] Memory: 126372K/131072K available (2520K kernel code, 127K rwdata, 516K rodata, 156K init, 186K bss, 4700K reserved, 0K cma-reserved)[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1[    0.000000] NR_IRQS:256[    0.000000] Kernel panic - not syncing: Failed to find ralink,mt7620a-sysc node[    0.000000] ---[ end Kernel panic - not syncing: Failed to find ralink,mt7620a-sysc node

可惜了,这次编译的系统并没有正常运行起来,但tftp功能正确运行起来了。

再次重启的时候,按下4,进入到uboot环境,观察一下环境变量,我们发现第一次的设置它已保存下来了,信息如下:

MT7628 # printenvbootcmd=tftpbootdelay=1baudrate=115200ethaddr="00:AA:BB:CC:DD:10"tested=1filesize=1161c7fileaddr=80A00000ipaddr=192.168.0.100serverip=192.168.0.103autostart=nobootfile=uImagestdin=serialstdout=serialstderr=serialEnvironment size: 226/4092 bytes

参考文章

转载地址:http://jzkia.baihongyu.com/

你可能感兴趣的文章
利用Axis2默认口令安全漏洞可入侵WebService网站
查看>>
java-----基本数据类型包装类
查看>>
MD5 SHA-1 示例
查看>>
【WPF】退出应用时的提示弹窗
查看>>
Node.js - 断言
查看>>
缓存穿透,缓存雪崩,热点key及解决办法
查看>>
Nginx配置直接php
查看>>
android样式开发
查看>>
radio选择事件 onchange事件 onclick事件
查看>>
很清晰的解读i2c协议【转】
查看>>
荆慕瑶
查看>>
密码需要带特殊字符(二)
查看>>
10 advanced LotusScript tips
查看>>
InstallShield 2012 Spring新功能试用(21): 安装过程中可以在目标系统中创建和配置任务计划...
查看>>
管道拥塞
查看>>
详解linux vi命令用法
查看>>
基于jQuery的下拉菜单插件,诸位上眼!!!
查看>>
JDBC for rdf3x
查看>>
C# 图像编程 (1) 准备工作; 你好,空姐; 为空姐照片添加特效
查看>>
Openvswitch手册(3): sFlow, netFlow
查看>>