1 puan yazan GN⁺ 1 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • Yalnızca AVR64DD32 8 bit MCU ile bir web sitesi barındırıldı; 24MHz CPU, 8KB RAM ve 64KB Flash içeren küçük bir ortamda çalışıyor
  • Ethernet sinyalini doğrudan üretmek için 10BASE-T bile fazla hızlı olduğundan, Linux’un desteklediği SLIP kullanılarak USB-Serial bağlantısı bir ağ arayüzü gibi kullanıldı
  • SLIP, paketleri 0xC0 ile çevreleyen ve özel baytları escape eden basit bir yöntem olduğu için MCU ile modern Linux’u bağlamaya uygun
  • IP, parçalamanın devre dışı olması sayesinde basitleşti; ancak TCP uygulaması bağlantı durumu, yeniden iletim ve istisna işleme gerektirdiği için günler sürdü ve hâlâ hatalar var
  • Dış erişim, yalnızca /mcu isteklerini ileten VPS, WireGuard ve proxy tabanlı dolaylı bir yapı üzerinden sağlanıyor; herkese açık IPv4 maliyeti ve IPv6 eksikliği temel kısıtlar olarak öne çıkıyor

8 bit AVR ile web sitesi barındıran kurulum

  • AVR64DD32, Arduino ile bilinen Atmega328’e benzeyen 8 bit AVR ailesinden bir MCU; aynı bellek düzeyinde daha ucuz ve tek programlama pini ile daha iyi çevre birimleri sunuyor
    • En fazla 24MHz tek 8 bit AVR çekirdeği
    • 8KB statik RAM, 64KB Flash, 256 bayt EEPROM
    • 1.8~5.5V voltaj aralığı, $1~$2 fiyat bandı
  • Yalnızca MCU ile internete doğrudan bağlanmak için Ethernet sinyali üretmek gerekiyor, ancak en yavaş 10BASE-T bile bu ortam için fazla hızlı
    • 10BASE-T, 10Mbit/s hızında çalışır ve Manchester kodlaması nedeniyle gerçek hat üzerinde 20Mbit olur
    • AVR64DD32’nin CPU’su 24MHz’e kadar çıkabilse de çevre birimleri ve IO pinleri en fazla 12MHz saat hızını desteklediğinden sinyali doğrudan üretmek zor
    • Özel bir Ethernet çipi kullanmak standart yaklaşım, ancak projeyi tamamlamak için birkaç hafta beklemek gerekiyordu
  • Alternatif olarak SLIP(Serial Line Internet Protocol, RFC 1055) kullanılarak seri bağlantı üzerinde ağ kuruldu
    • Paketlerin başı ve sonu 0xC0 baytıyla çevrelenir
    • Paket içindeki 0xC0, 0xDB 0xDC olarak; mevcut 0xDB ise 0xDB 0xDD olarak değiştirilerek belirsizlik önlenir
    • Bu, geçmişte çevirmeli ağ modemlerinin telefon hattı üzerinde seri bağlantı kurup bilgisayarın bunun üzerinde ağ işlemesini yaptığı yöntemle devamlılık taşır
    • Modern Linux da SLIP’i desteklediği için USB-Serial adaptörü bir ağ arayüzüne dönüştürülebilir
    • Kullanım örnekleri stty -F /dev/ttyUSB0 115200 raw cs8, slattach -m -F -L -p slip /dev/ttyUSB0 biçimindedir
  • MCU tarafındaki donanım basit ve harici parça olmadan da çalışabiliyor
    • www.c: kaynak kod
    • www.elf: önceden derlenmiş ikili dosya
    • LED ve güç ters bağlama koruması için bir diyot eklendi
    • Güç tüketimi birkaç mW düzeyinde olduğundan, sunucuyu yalnızca USB-Serial adaptörünün 5V hattıyla çalıştırmak mümkün

Protokol uygulaması ve herkese açık erişimin ele alınışı

  • IP uygulaması, modern ortamın kısıtları sayesinde basitleşiyor
    • Web sayfasının kullanıcının bilgisayarına ulaşması için paketlerin birden çok ağdan geçmesi gerekir ve her pakette kaynak ve hedef adres gibi bilgileri içeren 40 baytlık bir IP başlığı bulunur
    • Eski IP, paket parçalama gibi özellikler nedeniyle doğru işlenebilmesi için çok fazla bellek gerektiriyordu
    • Modern işletim sistemleri parçalamayı devre dışı bırakıyor ve IPv6 parçalamayı kaldırdığı için bunun doğrudan ele alınması gerekmiyor
    • Alınan paketin kaynak ve hedefini değiştirip TTL sayacını sıfırlayarak yanıt başlığı oluşturulabiliyor
  • TCP uygulaması, bağlantı durumunun izlenmesi, kayıp paketlerin yeniden gönderimi ve çeşitli istisna durumlarının ele alınmasını gerektirdiği için çok daha zor
    • Özel TCP uygulamasının yeterince çalışır hale gelmesi günler sürdü ve hâlâ bazı hatalar kaldı
    • HTTP ayrıca uygulanmadı; bunun yerine sunucu, istemciye her zaman sabit kodlanmış bir “yanıt” gönderiyor
    • Tek URL’li bir site için bu yaklaşım yeterince işe yarıyor
    • Yükleme süreci Video 3 içinde görülebilir
  • Dış erişim için herkese açık yönlendirilebilir bir IPv4 adresi gerekiyor, ancak maliyet ve ev internet bağlantısının kalitesi engel oluşturuyor
    • Herkese açık yönlendirilebilir adresi olan makine, Helsinki yakınlarındaki bir veri merkezindeki VPS üzerinde bulunuyor
    • Linux’un WireGuard’ı kullanılarak internet üzerinde sanal bir ağ bağlantısı kuruluyor ve taraflardan biri CGNAT arkasında olsa bile çalışıyor
    • Böylece Linux yönlendirici kutusu VPS’e bağlanarak daha uygun bir internet bağlantısı elde ediyor
  • MCU’nun hâlâ kendine ait herkese açık bir IP’si olmadığı için VPS adresine gelen tüm istekleri ona aktarmak mevcut web sitesini bozardı
    • Bunun yerine sunucu, yalnızca /mcu altındaki istekleri yerel adres bloğunu kullanarak MCU sunucusuna proxy edecek şekilde yapılandırıldı
    • Ziyaretçi doğrudan MCU’nun TCP/IP yığınına bağlanmıyor, ancak yöntem Vape Server ile aynı
    • SYN paketleriyle bozmak biraz daha zorlaşıyor, ancak bağlantı pratikte çevirmeli ağa yakın olduğu için DDoS’a karşı savunmasız
  • IPv6 eksikliği, bu dolaylı yapının temel nedeni olarak kalıyor

1 yorum

 
GN⁺ 1 시간 전
Hacker News yorumları
  • 25 yıldan daha uzun süre önce en küçük web sunucusu yapma üzerine gösteriş amaçlı bir yarış vardı: https://web.archive.org/web/20000815063022/http://www-ccs.cs...
    ACE1101 mikrodenetleyicisini kullanan kişi “kazandı”, ama orijinal makaleyi bulamadım; bunun gibi bir şey de var: https://conceptlab.com/fly/
    Sineğin üstündeki web sunucusuydu

    • ACE1101 sürümünü ben yaptım ve önceden programlanmış çipi Saskatoon’daki bir sanatçıya postayla gönderdim. Asıl açıklama Archive.org’da duruyor: https://web.archive.org/web/20020605032321/http://d116.com/a...
      Kodu küçültme süreci gerçekten çok eğlenceliydi; ping’i kaldırınca bit-banging I2C ve EEPROM’a UDP yükleme eklemeye yer açıldı, ama yine de 1024 baytın altındaydı
    • O küçük web sunucusunu birkaç gün önce de düşündüm ve buraya da koydum ama pek tepki gelmedi. O zaman da şimdi de oldukça etkileyici olduğunu düşünüyorum
  • AVR DD, EA, EB serilerini seviyorum, ama Microchip’in son çip duyuruları AVR hayranları için biraz endişe verici görünüyor: https://www.microchip.com/en-us/products/microcontrollers/32...
    PIC32 CM; event system, MVIO, 5V çalışma gibi AVR DD’nin özelliklerinin çoğuna sahipken, daha büyük ve daha standart bir ARM 32-bit M0+ çekirdeği de sunuyor
    Bu yüzden AVR DD biraz demode olmuş gibi geliyor. AVR EA ve AVR EB ise 16x programlanabilir kazançlı 12-bit ADC’ye sahip; biraz gürültülü olsa da yaklaşık 50 mikrovolt seviyesine kadar hassas, yani inanılmaz derecede iyi ADC/akım algılayıcılar olarak güven veriyorlar
    Tersine, bu durum AVR ailesini daha da popüler hale getirebilir. Pin uyumlu bir ARM32 Cortex M0+ olması, AVR platformu üzerinde bir şeyler geliştirme olasılığını artırır mı azaltır mı merak ediyorum
    Benim için en önemli şey çevre birimleri. AVR DD muhtemelen daha düşük güç tüketimine sahip ve özellikle 1.8V çalışmada bu geçerli, ama bunun yeterli olup olmadığını bilmiyorum
    Projenin kendisi çok ilginç ve AVR DD zaten harika bir çip; onu gerçekten kullanımda görmek güzel
    10BASE-T 10 megabit/s hızında çalışıyor ve Manchester encoding yüzünden hat üzerinde 20 megabit oluyor; AVR EB’de x2 PLL timer var, yeterince uğraşılırsa Manchester encoding çıkışı verebilir gibi görünüyor
    LUT, UART çevre birimleri ve PLL ile hızlandırılmış timer devresini birleştirerek yüksek hızlı Manchester encoding itmek mümkün olabilir, ama 20Mbit’e kadar çıkar mı biraz daha düşünmek gerekir

    • Microchip’in, çoğu şirkete kıyasla çiplerini uzun süre desteklediği biliniyor. Talep olduğu sürece fiilen üretimde tutuyorlar ve Dx serisi de oldukça yeni bir ürün
      Cortex-M0 yolunu kurcalamaları, Dx’ten sonraki nesil 8-bit platformları geliştirmeyi sürdürmek istemediklerinin bir işareti olabilir. Aynı özellikleri farklı bir CPU çekirdeğine taşımaları bence sorun değil
  • Sayfada HTML’in gerçek zamanlı olarak akarak gelmesini görmek hoşuma gitti. Eski çevirmeli bağlantı günlerinde görsellerin yukarıdan aşağı yavaş yavaş çizilmesi hissini hatırlattı

    • Anılar canlandı. Okuldaki berbat çevirmeli bağlantı, babamın iş yerindeki 128 ISDN bağlantısına kıyasla dayanılmaz derecede yavaştı
      Orada FTP’den, daha sonra da Napster’dan tek bir oturumda birden fazla şarkı indirebiliyorduk
  • Başlığı görünce ilk düşündüğüm şey “gömülü/IoT cihazlarında bunun gibi şeyler epey yapılıyor” oldu
    10/100 Ethernet yerleşik 8051 örneği: https://www.asix.com.tw/public/index.php/en/product/Microcon...

  • İki şey ilginçti. Birincisi, buradaki www.c içinde yer almayan RFC 1055’in 2025 errata’sı var. Bu errata, decoding algoritmasının nasıl değiştiğini oldukça ikna edici biçimde gösteriyor ve bu durumda bağlantının diğer ucunda gerçekten Linux var
    İkincisi, bir sonraki durak muhtemelen RFC 1144 olur

  • ENC28J60 + PIC18 kombinasyonu, 20 yıl önce Microchip’in sıkça dağıttığı demolarda tam olarak böyle şeyler yapan kurulumdu

  • Proxy’nin sayfadaki server: başlığının üzerine yazmamış olmasını sevdim

  • Daha önce Arduino Mega ile benzer bir şey yapmıştım. İstemcinin işin büyük kısmını üstlenmesi sayesinde bunun oldukça ikna edici görünebilmesi şaşırtıcıydı; denetleyici ise sadece uSD karttan içeriği aktarıyordu