TFTP ile OpenWrt Yükleme
OpenWrt Yükleme'ye geri dön.
TFTP çok sade bir protokoldur; küçük önyükleyicilere uygulanabilecek kadar sade. Basit fikir şu şekildedir:
- Yönlendiriciye güç verilir
- Önyükleyici bellenim kodunun başlatılmasını hazırlar
- Birkaç saniye boyunca kablolu lan geçitlerini tetikler
- Bu anlık değil başlama/önyükleme sırasında kısa bir süre gerçekleşir
- Ağ ayarları OpenWrt'nin öntanımlılarıyla her zaman aynı değildir
- Çakma imajı aktarımı için TFTP isteklerini dinler
- ya;
- Çakılacak bir imajı alıp çakar
- veya TFTP iletişimi zaman aşımı gerçekleşirse cihazı önyüklemeye devam eder
- Halen yüklenmiş bellenimi geçerli kabul ederek
- Eğer geçerli değilse davranış önyükleyiciye göre değişiklik gösterir. Bazısı tftp ile bir çakma beklerken diğerleri sadece bir hata tespit ışığı gösterip tekrar önyüklenmeyi beklerler.
- Önyükleyiciyle ilgili daha çok detay için Önyükleyici işlevselliği'ni gör.
Cihazınızın önyükleyicisinin TFTP istemcisi mi yoksa sunucusu mu olduğunu tespit etmek zorundasınız. Gerekli ayarlamalar ve varsa sunulan TFTP türü üzerine detaylar için belirli model'inizin OpenWrt Wiki cihaz sayfasına başvurun.
Bu dokümantasyon RFC5737'ye göre örnek IP adresleri kullanacak. Cihazınıza özgü gerçek IP adresleri için lütfen modelinizin wiki dokümantasyonuna başvurun.
Cleanup IP addresses as 192.168.1.x is common, but not universal. Use of RFC5737 might be more appropriate or just italic ipv4.x.y.z indicators.
Önyükleyici TFTP istemcisi barındırıyor
Öyleyse TFTP sunucusu koşturmak zorundasınız. Detaylı yönerge TFTP Kurtarma/Yükleme için TFTP sunucu kurulumu wiki sayfası'nda.
Mikrotik YönlendiriciKartlar
YönlendiriciKartların, YönlendiriciÖnyükleme önyükleyicilerinde koşan TFTP ve DHCP istemcileri var. Detaylar için : Common Procedures for Mikrotik RouterBoard'i görün.
Duruk IP adresi ayarlamak, DHCP sunucusu koşturmak ve TFTP sunucusu koşturmak için Bash betiği (Mikrotik için örnek).
Not: İhtiyaçlarınız için USER, NETDEV, IP/DHCP IP-aralığı ve dosya adı/klasör yolu değiştirmeyi unutma.
#/bin/bash
USER=user
NETDEV=enp1s0
ip address flush dev $NETDEV
ip address add 10.1.1.10/24 dev $NETDEV
dnsmasq -i $NETDEV --dhcp-range=10.1.1.50,10.1.1.100 \
--dhcp-boot=openwrt-ar71xx-mikrotik-vmlinux-initramfs.elf \
--enable-tftp --tftp-root=/home/$USER/openwrt -d -u $USER -p0 -K --log-dhcp --bootp-dynamic
Örnek1
Örneğin DIR-300 için bootloader uyarlaması redboot bir TFTP istemcisi içerir. İki adım:
- Önce makinanda Bir TFTP sunucusu (veya daemon) yükleyip çalıştır ve çakılacak imaj(lar)ı bu yazılımın <kök dizin>'ine yerleştir (bunu root olarak yapman gerekebilir).
Olası dizinler:
- /var/lib/tftpboot
- /srv/tftp
- Kök dizin muhtemelen
sudo find / -type d -name '*tftp*'
komutu ile bulunabilir.
Örnek:
sudo apt-get install tftp-hpa tftp sudo cp ~/uboot/arch/arm/boot/uboot.img /var/lib/tftpboot
- Sunucuyu sına:
tftp localhost tftp> get uboot.img tftp quit cmp /var/lib/tftpboot/uboot.img uboot.img # no output other then a prompt means it worked correctly
- önyükleyicine bağlan ve harddiskindeki imajları TFTP instemcisiyle almasını söyle (DIR-300 durumunda bağlantıyı telnet ile varsayılan olmayan 9000 geçitiyle elde edersin. Örnek:
telnet 192.168.20.81 9000 Redboot> load uboot.img go
- başarılı OpenWrt kurulumundan sonra TFTP sunucusunu tekrar çalışmasını çalışmaz kılmayı unutma.
Örnek2
xxx durumnda yukarıdaki Örnek 1'de Adım 3 geçerli değildir. Oturum açılacak bir uçbirim yoktur, önyükleyici her önyüklemede kendiliğinden, ön-tanımlı bir IP adresinden, TFTP ile bir bellenim edinmeyi deneyecektir.
TODO
tftpd server on Mac OS X Lion
Note: TftpServer.app places a pleasing GUI on top of the native OSX tftpd. There's a writeup of using TftpServer.app at tftpserver. If you prefer to use the command-line, read on...
OS X Lion comes with a tftpd but its disabled by default. Like most services in OS X, tftpd is controlled by launchctl. The configuration with which the daemon is lauched is in /System/Library/LaunchDaemons/tftp.plist and the the identifier is com.apple.tftpd
before you make changes to the config run:
sudo launchctl unload -F /System/Library/LaunchDaemons/tftp.plist
then:
sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist
to stop tftpd run:
sudo launchctl stop com.apple.tftpd
to start tftpd run:
sudo launchctl start com.apple.tftpd
Here is an example config file that will work:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.apple.tftpd</string> <key>ProgramArguments</key> <array> <string>/usr/libexec/tftpd</string> <string>-l</string> <string>-s</string> <string>/private/tftpboot</string> </array> <key>inetdCompatibility</key> <dict> <key>Wait</key> <true/> </dict> <key>InitGroups</key> <true/> <key>Sockets</key> <dict> <key>Listeners</key> <dict> <key>SockServiceName</key> <string>tftp</string> <key>SockType</key> <string>dgram</string> </dict> </dict> </dict> </plist>
Differences from the default include removing this, to enable the service:
<key>Disabled</key> <true/>
Add this to the ProgramArguments array to make it log to /var/log/syslog.log
<string>-l</string>
Place the openwrt image file you want to serve in:
/private/tftpboot
Notice that even after running launchctl start com.apple.tftpd you will not see tftpd running when executing ps aux | grep tftpd because of the way launchctl works. tftpd is in fact not running but launchctl will launch it as soon as it is required.
In some cases, when the output on the serial console is grabbled you can still act on faith and executer the following commands, which will work in most cases:
setenv ipaddr 192.168.1.1
setenv serverip 192.168.1.100
tftpboot 0x80000000 openwrt-xxx-generic-xxx-squashfs-factory.bin
erase 0x9f020000 +0x332004
cp.b 0x80000000 0x9f020000 0x332004
boot.m 0x9f020000
tftpd on MacOS 10.4 "Tiger"
tftpd works out-of-the-box also on the old 10.4. Maybe the tftp dir is not yet created but this is just a mkdir. Get a root shell and issue these commands:
bash-4.2$ sudo bash Password: bash-4.2# mkdir -p /private/tftpboot/ bash-4.2# cp /path/to/openwrt-image /private/tftpboot/ bash-4.2# launchctl load -F /System/Library/LaunchDaemons/tftp.plist bash-4.2# ps axu|grep ftp root 23494 0.0 0.0 27696 152 ?? Ss 4:34PM 0:00.00 launchctl load -F /System/Library/LaunchDaemons/tftp.plist root 23496 0.0 0.0 38604 4 p3 R+ 4:34PM 0:00.00 grep ftp bash-4.2# launchctl start com.apple.tftpd bash-4.2# ps axu|grep ftp root 23494 0.0 0.0 27696 152 ?? Ss 4:34PM 0:00.00 launchctl load -F /System/Library/LaunchDaemons/tftp.plist root 23498 0.0 0.0 27244 464 ?? Ss 4:34PM 0:00.01 /usr/libexec/launchproxy /usr/libexec/tftpd -i /private/tftpboot root 23500 0.0 0.0 38604 4 p3 R+ 4:34PM 0:00.00 grep ftp bash-4.2# tftp 192.168.100.72 ### just testing tftp> get openwrt-ar71xx-generic-hornet-ub-squashfs-sysupgrade.bin Received 7270950 bytes in 2.7 seconds tftp>
Önyükleyici TFTP sunucusu barındırıyor
Yönlendiricine yeni bir bellenim yüklemek için için temel tftp istemcisi kullanma muamelesi:
- Yönlendiricinin gücünü kes
- TFTP istemcisi olarak davranan bilgisayarından modelindeki bir LAN geçitine bir ethernet bağantısı tak. Detaylar için cihaz modelinin OpenWrt viki cihazsayfasına bak.
- Bilgisayarında tftp sunucunu başlat
- Yönlendiricine uygun adresi ver, (model ve önyükleyiciye özgü adresi görmek için modelinin viki sayfasına bak.)
- Kipi 'octet/binary' olarak ayarla
- İstemciye başarılı olana kadar dosyayı tekrar göndermesini söyle
- Dosyayı “koy”
- tftp istemcisi koştururken ve sürekli bağlantı sondalarken yönlendiricini güce tak.
- TFTP istemcisi önyükleyiciden bir ack (alındı) sinyalı alacak ve bellenimi göndermeye başlayacaktır
İpuçları
- Lütfen sabırlı ol, yeniden çakma bellenim aktarıldıktan sonra gerçekleşir. Çoğu dudrumda yönlendirici kendiliğinden yeniden-önyüklenecektir. Bazı modeller yeniden başlamaz, kapatıp-açmadan önce en az 15 dakika bekle.
- Önyükleyici genellikle nvram'de kayıtlı MAC adresini ve IP adresini kullanmaz, bunun yerine önyükleyicinin varsayılanına geri döner. Ayrıntılar için modelinin viki belgelendirmesini gör.
- Yönlendirici ve bilgisayar arasına bir hub veya switch koy, bu boot_wait süreci geçmeden önce yerel bilgisayar bağlantısının açık olmasını sağlar. Bu yerel bağlantının çok geç sağlandığı bilgisayarda TFTP'nin çalışması için gerekliliktir ve genellikle bağlantıyı açık tutmak için zorlamaktan daha basittir.
- DMZ LED'li yönlendiricilerde, OpenWrt önyüklerken DMZ LED'i yakar, önyükleme betikleri bittikten sonra DMZ LED'i kapatır.
TFTP comutları farklı uyarlamalarda değişiklik gösterir. İşte bazı örnekler:
Linux/BSD
Şebeke bağlantısı güç verme sırasında çalışır ve kurulmuş olmalıdır. Bunun olmasından emin olmanın bir yolu bilgisayarınla çakım yapılacak cihaz arasında, cihazın gücünü kapattığında bağlantıyı kurulu tutacak bir 'switch' veya 'hub' kullanmaktır.
Başka bir seçenek Linux'ta şebeke yöneticisini devredışı bırakmak veya buna sahip olmayan bir dağıtım/CanlıCD kullanmaktır. Bunu devredışı bırakacak bazı komutlar (kullanılan Linux dağıtımına bağlı):
- /etc/init.d/networking stop
- /etc/init.d/network stop
- /etc/init.d/NetworkManager stop
- service networking stop
- service network stop
- service NetworkManager stop
- systemctl stop NetworkManager
Hazırlık Adımları
- *önyükleyicinin* şebekesiyle uyuşacak bir sabit IP yapılandır
- ip address add ipv4.x.y.z/24 dev eth0
- Özgül ayarlar için cihazının OpenWrt wiki sayfasını gör
- TFTP aralığını yakalama şansını artırmak için bir ARP girdisi önyapılandır
- arp -s ipv4.x.y.1 02:aa:bb:cc:dd:20
- Cihaz modelinin OpenWrt viki sayfasını doğru IP ve MAC adresleri için kontrol et
atftp Kullanmak
netkit's tftp Kullanmak
curl Kullanmak
tftpd-hpa kullanmak
MacOS X
On Mac OS X, you should be able to flash the router with the command line tftp client, which behaves identically to netkit's tftp above.
Some people have had problems with the command line tftp client, however, and recommend using MacTFTP Client instead:
- Download, install, and open MacTFTP
- Choose Send
- Address: Your bootloaders IP address
- Choose the openwrt-xxx-x.x-xxx.bin file
- Click on start while applying power to the WRT54G
Many Macs will disable the Ethernet card when the router is powered off and will take too long to re-enable the card, causing the TFTP transfer to fail with an “Invalid Password” error. Many people have had success if they manually configure their network card (in the “Ethernet” tab of “Built-in Ethernet” in System Preferences' Network panel) to:
- Configure: Manual (Advanced)
- Speed: 10 BaseT/UTP
- Duplex: full-duplex
Alternatively, you can connect the router to the Mac via a hub or switch; see the troubleshooting section for more information.
Windows
There are multiple tftp clients that you can choose from.
GUI TFTP clients
-
- Server is the IP address of your bootloader tftp server
- Password is typically blank
- Select the firmware file
- Set retries to 20 or more (most of the time you get it in 3)
- Click on Upgrade and it will constantly retry until it gets it
- Windows 2000 and Windows XP have a built-in TFTP client and it can be used to flash with OpenWrt firmware.
- tftpd32 (use client mode!)
TFTP command line client short Instructions
- Open a command window (cmd.exe)
tftp -i <bootloader IP tftp server address> PUT OpenWrt-gs-code.bin
- Now you may plug in the router (unplug it first if it was plugged).
Note that some bootloaders do not respond to ping.
- Plug in your Windows network interface into the appropriate port on the device you will be flashing
- Static IP your wired Ethernet interface to an appropriate IP address on the same network as your bootloaders network
- Example: Your bootloader has an IP of 192.0.2.1 (netmask of 255.255.255.0) so your Windows network configuration would use 192.0.2.2/24
- See your device's OpenWrt wiki devicepage for specific settings
- Open an elevated command prompt
- Start, Run, “cmd” on Windows 2000,XP,2003
- Start, search on “cmd”, ctrl+shift+enter on Vista, 7, 2008, etc.
- arp -s <bootloaders ip address> <bootloaders mac address> <your Windows static IP address>
- Assists in avoiding delay in reaching tftp server on device
- Windows MAC addresses use dashes instead of colons (ex: 00-00-00-00-00-00)
- Windows 7 and other similar versions may require
- netsh interface ipv4 add neighbors “Local Area Connection” <bootloaders ip address> <bootloaders mac address>
- Disable Windows media sensing (shouldn't be necessary if you have a switch in the middle)
- netsh interface ipv4 set global dhcpmediasense=disabled
- netsh interface ipv6 set global dhcpmediasense=disabled
- Disable Windows firewall and any other firewalls on your client machine
- Unplug your router
- Run your tftp program (chosen above)
- Plug in router immediately after tftp program begins put attempts
- Flash usually takes a few minutes. See your device's OpenWrt wiki devicepage for specifics
- You will probably want to re-enable Windows media sensing and revert your other network changes
Sorun giderme
Eğer kullanıyorsan ateş-duvarı yapılandırmanı hatırla. En iyisi “put” komutunu koşturmak ve ardından hemen yönlendiriciye güç vermektir, karşıya yükleme aralığı fazlasıyla kısa olduğundan ve önyüklemede çok erken olduğundan.
TFTP Hatası | İllet |
---|---|
Code pattern is incorrect (Kod yapısı yanlış) | Yüklediğin bellenim imajı başka bir modele yöneliktir. |
Invalid Password (Geçersiz parola) | Bellenim ön yüklendi ve önyükleyicinin tftp sunucusu yerine, bellenim içinde barınan parola korumalı bir tftp sunucusuna bağlandın. |
Timeout (zamanaşımı) | Yönlendiricinin hatta olduğunu doğrulamak için pingle Başka bir tftp istemcisi dene (bazısının düzgün çalışmadığı bilinir) |
Timeout (zamanaşımı) | Yönlendiricinin çalıştığını doğrulamak için pingle NetworkManager (Linux) hala çalışıyor, otomatık tanımaya sebep oluyor olabilir. Elişi yapılandırmayla tekrar dene. |
Bazı makineler, yönlendiricinin gücü kapalıyken eterneti devredışı bırakacaktır ve yönlendirici birkaç saniyeliğine güce bağlı olana kadar yeniden devreye almaz. Eğer sürekli “Invalid Password” başarısızlığı alıyorsan bilgisayarını ve yönlendiriciyi bir hub veya switch'e bağla. Böyle yapmak bağlantıyı ayakta tutacak ve yönlendirici kapalıyken bilgisayarı, arayüzünü devredışı bırakmaktan alıkoyacaktır.
Bağlantıyı canlı tutmak için bir hub aramaya gitmeden önce, TCP/IP yapılandırmanı DHCP yerine bir sabit IP (192.168.1.10; 255.255.255.0; 192.168.1.1 [gateway]) yöntemini dene.
Eğer yönlendiricini çakabilirsen ve seri uçbirimde “Boot program checksum is invalid” veya “Invalid boot block on disk” diyorsa bir başka tftp istemcisi dene - atftp iyi çalışır. Bu bazı netkit tftp paketlerinde ve büyük bellenimlerde gerçekleşir.
Example
bunun sadece özgül modelin viki sayfasında olması daha mı iyi olurdu?
tftp destekleyen modelleri listelemek için, hangilerinin reset dügmesiyle tetiklenmeye ihtiyacı olduğu notuyla bir sayfa oluşturmalı mıyız?
Benim kullandığım Asus WL-500g Premium v1 de dahil, pek çok yönlendiricide gücü kesip, reset düğmesine basılı tutarak gücü yeniden bağlayarak imaj çakarsınız. Birkaç saniye bekleyince PWR LED yanıp sönmeye başlar. Reset düğmesini bırakırsın. Cihazın artık 192.168.1.1
üzerinde çalışan bir TFTP sunucusu olacaktır.
Pek çok TP-Link modelinin aynı numarayı desteklediğini dikkate al. TL-WR740Nv4, TL-WDR4300v1, TL-WDR3600v1, TL-WR842NDv1, TL-WR841NDv8, WR841NDv11, WR841NDv12, TL-MR3020v1, TL-MR3220v2, TL-MR3420v2, TL-WR940Nv2, TL-WR941NDv5, TL-WR1042NDv1 ve muhtemelen yakın zamanda üreticiden bellenim güncellemesi almış olan diğer TP-Link modelleri. Bir özet ve süren deneyler için: http://bkil.blogspot.com/2014/12/hidden-tftp-of-tp-link-routers.html
Bu noktada bir eternet kablosu kullanman gerekecek. WAN'a değil LAN1-LAN4'e bağla. Yerel makinanı 192.168.1.x/24
şebekesinde, örneğin 192.168.1.42
olarak yapılandır. Yönlendirici 192.168.1.1
kullanacak.
$ tftp 192.168.1.1 tftp> trace Packet tracing on. tftp> binary tftp> put openwrt-brcm-2.4-squashfs.trx sent WRQ <file=openwrt-brcm-2.4-squashfs.trx, mode=octet> received ACK <block=0> sent DATA <block=1, 512 bytes> received ACK <block=1> sent DATA <block=2, 512 bytes> received ACK <block=2> sent DATA <block=3, 512 bytes> received ACK <block=3> sent DATA <block=4, 512 bytes> ... received ACK <block=4742> sent DATA <block=4743, 512 bytes> received ACK <block=4743> sent DATA <block=4744, 512 bytes> received ACK <block=4744> sent DATA <block=4745, 0 bytes> received ACK <block=4745> Sent 2428928 bytes in 6.2 seconds tftp> quit $
Bir dakika bekle ve gücü kesip yeniden bağlayarak kutuyu yeniden başlat. Bazı belgelendirme cihazın kendisini yeniden başlatması gerektiği iddiasında olabilir ama ne kadar beklersem bekleyeyim, ben bunun gerçekleştiğini hiç görmedim.
Dosya İzinleri
TFTP sunucunun dosyalara ve dizinlere yeterli erişim izinlerine sahip olduğunu kontrol et. U-Boot TFTP istemcisi / tftpboot yakınabilir:
## Error: 'Access violation' (2), starting again!