OpenWrt: tftp를 통해 프로그램 다운로드

7630 단어 openwrt

tftp 서버 구축

TFTPTrivial File Transfer Protocol, 단순 파일 전송 프로토콜)은 UDP 프로토콜을 바탕으로 클라이언트와 서버 간에 간단한 파일 전송을 하는 프로토콜로 비용이 많이 들지 않고 복잡하지 않은 응용 장소에 적합하다.tftp 프로토콜은 작은 파일 전송을 위해 설계되어 서버에서만 파일을 얻거나 서버에 파일을 쓸 수 있으며 디렉터리를 열거하거나 인증할 수 없습니다.
삽입식Linux 개발에서 TFTP 프로토콜은 많은 장소에서 사용되고 심지어 없어서는 안 될 것이다. 특히 내부 핵 디버깅 단계에서 U-Boot 프로토콜을 통해 서버에서 핵을 불러오고 실행하면 편리하고 빠르다.
일반적인 릴리스에는 기본적으로 tftp 서비스와 tftp 서버가 설치되어 있지 않습니다.tftp 서비스는 네트워크 수호 프로세스 서비스 프로그램에 의존하여 설치tftp 또는 업그레이드 버전inetd을 선택한 다음 설치xinetdtftp를 선택한 다음 tftp-server 프로필을 수정하거나 만들고, 마지막으로 재가동/etc/xinetd.d/tftp, 시작xinetd 서비스를 할 수 있습니다.
설치tftp:
$ sudo apt-get install xinetd

설치xinetdtftp:
$ sudo apt-get install tftp tftpd

또는 설치tftpd의 향상된 버전tftp:
$ sudo apt-get install tftp-hpa tftpd-hpa

작성tftp-hpa 파일은 다음과 같습니다.
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/opt/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

여기에서 /etc/default/tftpd-hpa 설정된 TFTP_DIRECTORY 디렉토리는 /var/tftpboot 서버의 디렉토리이며 액세스 권한을 tftp 로 설정합니다.
$ sudo mkdir -pv  /opt/tftpboot/
$ sudo chmod 777 /opt/tftpboot/

서비스 시작 또는 재가동777:
$ sudo service tftpd-hpa start   //  restart
tftpd-hpa 디렉토리에 tftpboot 파일을 만들고 다른 터미널을 시작하여 다음을 입력합니다.
$ tftp 127.0.0.1
tftp> get test.txt     #  test.txt 
tftp> q                #  tftp

터미널 입력 test.txt 명령에서 현재 디렉터리에서 가져온 ls 파일을 볼 수 있습니다.

개발판 기록 프로그램


시작 보드, 시스템은 다음과 같은 로그를 인쇄합니다.
U-Boot 1.1.3 (May 31 2017 - 12:06:08)

Board: Ralink APSoC DRAM:  128 MB
relocate_code Pointer at: 87f60000
******************************
Software System Reset Occurred
******************************
flash manufacture id: c2, device id 20 18
find flash: MX25L12805D
============================================ 
Ralink UBoot Version: 4.3.0.0
-------------------------------------------- 
ASIC 7628_MP (Port5None)
DRAM component: 1024 Mbits DDR, width 16
DRAM bus: 16 bit
Total memory: 128 MBytes
Flash component: SPI Flash
Date:May 31 2017  Time:12:06:08
============================================ 
icache: sets:512, ways:4, linesz:32 ,total:65536
dcache: sets:256, ways:4, linesz:32 ,total:32768 

 ##### The CPU freq = 575 MHZ #### 
 estimate memory size =128 Mbytes
RESET 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. 

위와 같은 인터페이스가 나타나면 누릅니다test.txt.만약 우리가 컴파일된 부품이 문제가 없다는 것을 보장할 수 없다면, 이것은 가장 좋은 옵션이다. 왜냐하면 이것은 메모리 실행에만 다운로드되고 1 코드에 영향을 주지 않기 때문이다.
적절한 flash 주소와 파일 이름을 설정하고 리턴 키를 누르면 다운로드할 수 있습니다.
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.100
Filename 'uImage'.

 TIMEOUT_COUNT=10,Load address: 0x80a00000
Loading: Got ARP REPLY, set server/gtwy eth addr (58:00:e3:4b:48:01)
Got it
#################################################################
         #################################################################
         ###############################################################Got ARP REQUEST, return our IP
##
         ############################
done
Bytes transferred = 1139143 (1161c7 hex)
NetBootFileXferSize= 001161c7
Erasing 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 ... OK
No initrd
## Transferring control to Linux (at address 80000000) ...
## Giving linux memsize in MB, 128

Starting 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

안타깝게도 이번에 컴파일된 시스템은 정상적으로 작동하지 않았지만 IP 기능이 정확하게 작동하기 시작했다.
다시 시작할 때 tftp 를 누르고 4 환경으로 들어가서 환경 변수를 관찰해 보면 첫 번째 설정이 저장되어 있음을 알 수 있습니다. 정보는 다음과 같습니다.
MT7628 # printenv
bootcmd=tftp
bootdelay=1
baudrate=115200
ethaddr="00:AA:BB:CC:DD:10"
tested=1
filesize=1161c7
fileaddr=80A00000
ipaddr=192.168.0.100
serverip=192.168.0.103
autostart=no
bootfile=uImage
stdin=serial
stdout=serial
stderr=serial

Environment size: 226/4092 bytes

참고문


ubuntu에서 tftp 서버 구축 Ubuntu에서 tftp 서버 구축 가장 간단한 방법

좋은 웹페이지 즐겨찾기