laserbird 1
Çalışkan
- Katılım
- 20 Mayıs 2026
- Mesajlar
- 7
- Beğeniler
- 6
Rutin bir Cuma günü meşhur Kadıköy Salı pazarını geziyordum, o sırada D-Link marka AX3000 silindirik AP'ye denk geldim ve 100 liraya satın aldım. (Bozuk çıksa bile hurdanın kilosu olmuş 320 TL, çok fazla zarar etmem diye düşünerek). Eve gelip söktüm ve cihazı görünce iş ciddileşti: Qualcomm IPQ5018, 512 MB RAM, 128 MB SPI-NAND. Buna OpenWrt için uğraşmaya değer dedim.
Kurulum: Neyle çalıştım?
- UART köprüsü olarak Flipper Zero. Elimde başka adaptör yok muydu? Tabii ki vardı: Raspberry Pi, Arduino Uno, CH340 USB TTL çeviriciler. Fakat Flipper Zero'nun LED'i ve ekranı sayesinde ekranda akan veriyi canlı olarak görebiliyorsun.
- Derleme ortamı: M1 MacBook. Ama OpenWrt MacOS'ta doğrudan derlenmiyor
(Dosya sistemi büyük/küçük harf duyarsız) ve dahili diskte 22 GB boşluk kalmıştı.
Çözüm: Harici USB NVMe SSD'yi case-sensitive biçimlendirdim, üstüne Lima ile
Ubuntu aarch64 VM kurdum. M1'de ARM VM olduğu için emülasyon yok, native hızda derliyor.
Yani zincir şöyleydi: M1 Mac → harici SSD → VM → OpenWrt derleme ortamı,
Karşıda Flipper ile UART ve bir Ethernet kablosu. Kartta dört pinlik boş header vardı, UART orada kabak gibi görünüyordu. 115200'de açıldı ve karşıma parolasız root Shell çıktı. Bu, işin en şanslı kısmı mıydı — root Shell varsa cihazın içini okuyabilirsin demektir.
Bir şeye dokunmadan önce iki iş yaptım, ikisi de sonradan defalarca kendini ödedi:
Tam flash yedeği (17 Partition, MD5 doğrulamalı) ve **çalışan sistemden device
Tree dökümü**. İkincisi portun en değerli belgesi oldu — boot log'u yalan söylüyordu,
Üç radyo varmış gibi görünüyordu ama device Tree'de sadece iki tanesi aktifti.
1. gün — ortamı kurduk, Boot'ta takıldık.
Snapshot (main dalı) derledim. Neden snapshot: 5 GHz radyonun (QCN6122) desteği kararlı sürümlerde yok, sadece Main'de var. Yani seçenek yoktu. Ağı ayarladım, TFTP sunucusu kurdum, cihazı Flash'a hiç dokunmadan RAM'den (İnitramfs) boot edecek şekilde bir düzen kurdum. Böylece her deneme geri alınabilir oluyor. Ve ilk imaj açılmadı. Boot'un dördüncü saniyesinde sessizce ölüyor. Ne hata mesajı, ne panic, watchdog resetliyor. Günün geri kalanı buna gitti.
2. gün — boot çözüldü ama Wi-Fi yok.
Çözümü getiren fikir şuydu: aynı işlemciyi kullanan, desteklenen başka bir cihazın imajını derleyip kendi kartımda boot ettim. O da tam aynı yerde öldü. Demek ki sorun benim yazdığım dosyalarda değil, çekirdekteydi. Gerçekten de kernel 6.18'de bir regresyon varmış ve OpenWrt tarafında düzeltmesi mevcuttu; onu alınca cihaz açıldı.
Bu numara ("sorun bende mi, genelde mi?") port boyunca üç kez işime yaradı, tavsiye ederim.
Cihaz açıldı ama Wi-Fi yok.Onun yerine Ethernet tarafını bitirdim: İki portun hangisinin nereye bağlı olduğunu tahmin etmek yerine kabloyu takıp hangi portun link verdiğine baktım. LAN/WAN ayrımını da o gün oturttum.
3. gün — Wi-Fi geldi, bu sefer flash kayıp
Wi-Fi için radyoların kalibrasyon ve board data dosyaları lazım. Bunları stock yazılım çalışırken cihazdan çektim. 2.4 GHz kolay geldi. 5 GHz radyo ise sistemi komple çökertiyordu. Sebebi, o radyoyu yanlış yere bağlamamdı. Benzer bir cihazın dosyasından kopyalamıştım. Kendi cihazımın üretici device tree'sine bakınca doğrusu yazıyordu; düzeltince 5 GHz anında geldi.
Bir de web arayüzü yoktu. O bir hata değilmiş: Snapshot imajlarında LuCI gelmiyor, derlemeye eklemek yetti. Günün sonunda iki radyo da yayında, LuCI açık, LAN/WAN çalışıyor. Ama her şey RAM'de cihazın fişini çekince uçuyor. Kalıcı kurulum için Flash'a yazmak lazım ve orada çok tuhaf bir şey vardı: Sistem Flash'ı görüyor, çipi doğru tanıyor ama Flash'tan yapılan her okuma aynı anlamsız 32 Bayt'ı döndürüyordu. Üstelik "Hata var" bile demiyordu. U-Boot ise aynı Flash'ı sorunsuz okuyordu.
4. gün — NAND çözüldü, cihaz kendi flash'ından açıldı
Günün çoğu bu tuhaflığı kovalamakla geçti. Sırayla clock hızlarını, okuma komutlarını, ECC ayarlarını, denetleyicinin bütün register'larını U-Boot ile kernel arasında karşılaştırdım. Hepsi birebir aynıydı ama sonuçlar farklıydı. Ki bu genelde yanlış katmana baktığının işaretidir.
İşi çözen ölçüm şuydu: Çipin ayar register'ına bir değer yazıp geri okudum ve yazdığım değerin bir sonraki okumada geldiğini gördüm. Yani her ayar yazması bir işlem geriden uygulanıyordu.
Sürücüye bakınca sebep ortadaydı: Komut, yazılacak değerden önce çalıştırılıyor.
Bunun cihazı öldürmesinin sebebi ise kernel 6.18 ile gelen yeni bir özellikti.
Sistem açılışta çipin özel bir alanını (OTP) okuyup kapatıyor ama "kapat" komutu bir işlem geriden uygulandığı için çip o modda kilitli kalıyordu. Bütün okumaların döndürdüğü o anlamsız veri, meğer o alanmış.
Bu hata Upstream'de zaten düzeltilmiş (aynı sorunu bir TP-Link modelinde bulmuşlar) ama OpenWrt'nin kullandığı çekirdek sürümünde henüz yoktu. Düzeltmeyi alınca flash içeriği yedeğimle bit bit aynı okundu.
Sonrasında kurulum tarafında üç küçük engel daha çıktı ve çözüldü. Sysupgrade başarıyla bitti, fişi çekip taktım ve cihaz kendi flash'ından açıldı.
Bugün
Cihaz fişe takınca açılıyor: İki radyo da yayında, LuCI çalışıyor, LAN/WAN ayrımı duruyor, ayarlar kalıcı. Cihazı hala toplamadım
.
Kurulum: Neyle çalıştım?
- UART köprüsü olarak Flipper Zero. Elimde başka adaptör yok muydu? Tabii ki vardı: Raspberry Pi, Arduino Uno, CH340 USB TTL çeviriciler. Fakat Flipper Zero'nun LED'i ve ekranı sayesinde ekranda akan veriyi canlı olarak görebiliyorsun.
- Derleme ortamı: M1 MacBook. Ama OpenWrt MacOS'ta doğrudan derlenmiyor
(Dosya sistemi büyük/küçük harf duyarsız) ve dahili diskte 22 GB boşluk kalmıştı.
Çözüm: Harici USB NVMe SSD'yi case-sensitive biçimlendirdim, üstüne Lima ile
Ubuntu aarch64 VM kurdum. M1'de ARM VM olduğu için emülasyon yok, native hızda derliyor.
Yani zincir şöyleydi: M1 Mac → harici SSD → VM → OpenWrt derleme ortamı,
Karşıda Flipper ile UART ve bir Ethernet kablosu. Kartta dört pinlik boş header vardı, UART orada kabak gibi görünüyordu. 115200'de açıldı ve karşıma parolasız root Shell çıktı. Bu, işin en şanslı kısmı mıydı — root Shell varsa cihazın içini okuyabilirsin demektir.
Bir şeye dokunmadan önce iki iş yaptım, ikisi de sonradan defalarca kendini ödedi:
Tam flash yedeği (17 Partition, MD5 doğrulamalı) ve **çalışan sistemden device
Tree dökümü**. İkincisi portun en değerli belgesi oldu — boot log'u yalan söylüyordu,
Üç radyo varmış gibi görünüyordu ama device Tree'de sadece iki tanesi aktifti.
1. gün — ortamı kurduk, Boot'ta takıldık.
Snapshot (main dalı) derledim. Neden snapshot: 5 GHz radyonun (QCN6122) desteği kararlı sürümlerde yok, sadece Main'de var. Yani seçenek yoktu. Ağı ayarladım, TFTP sunucusu kurdum, cihazı Flash'a hiç dokunmadan RAM'den (İnitramfs) boot edecek şekilde bir düzen kurdum. Böylece her deneme geri alınabilir oluyor. Ve ilk imaj açılmadı. Boot'un dördüncü saniyesinde sessizce ölüyor. Ne hata mesajı, ne panic, watchdog resetliyor. Günün geri kalanı buna gitti.
2. gün — boot çözüldü ama Wi-Fi yok.
Çözümü getiren fikir şuydu: aynı işlemciyi kullanan, desteklenen başka bir cihazın imajını derleyip kendi kartımda boot ettim. O da tam aynı yerde öldü. Demek ki sorun benim yazdığım dosyalarda değil, çekirdekteydi. Gerçekten de kernel 6.18'de bir regresyon varmış ve OpenWrt tarafında düzeltmesi mevcuttu; onu alınca cihaz açıldı.
Bu numara ("sorun bende mi, genelde mi?") port boyunca üç kez işime yaradı, tavsiye ederim.
Cihaz açıldı ama Wi-Fi yok.Onun yerine Ethernet tarafını bitirdim: İki portun hangisinin nereye bağlı olduğunu tahmin etmek yerine kabloyu takıp hangi portun link verdiğine baktım. LAN/WAN ayrımını da o gün oturttum.
3. gün — Wi-Fi geldi, bu sefer flash kayıp
Wi-Fi için radyoların kalibrasyon ve board data dosyaları lazım. Bunları stock yazılım çalışırken cihazdan çektim. 2.4 GHz kolay geldi. 5 GHz radyo ise sistemi komple çökertiyordu. Sebebi, o radyoyu yanlış yere bağlamamdı. Benzer bir cihazın dosyasından kopyalamıştım. Kendi cihazımın üretici device tree'sine bakınca doğrusu yazıyordu; düzeltince 5 GHz anında geldi.
Bir de web arayüzü yoktu. O bir hata değilmiş: Snapshot imajlarında LuCI gelmiyor, derlemeye eklemek yetti. Günün sonunda iki radyo da yayında, LuCI açık, LAN/WAN çalışıyor. Ama her şey RAM'de cihazın fişini çekince uçuyor. Kalıcı kurulum için Flash'a yazmak lazım ve orada çok tuhaf bir şey vardı: Sistem Flash'ı görüyor, çipi doğru tanıyor ama Flash'tan yapılan her okuma aynı anlamsız 32 Bayt'ı döndürüyordu. Üstelik "Hata var" bile demiyordu. U-Boot ise aynı Flash'ı sorunsuz okuyordu.
4. gün — NAND çözüldü, cihaz kendi flash'ından açıldı
Günün çoğu bu tuhaflığı kovalamakla geçti. Sırayla clock hızlarını, okuma komutlarını, ECC ayarlarını, denetleyicinin bütün register'larını U-Boot ile kernel arasında karşılaştırdım. Hepsi birebir aynıydı ama sonuçlar farklıydı. Ki bu genelde yanlış katmana baktığının işaretidir.
İşi çözen ölçüm şuydu: Çipin ayar register'ına bir değer yazıp geri okudum ve yazdığım değerin bir sonraki okumada geldiğini gördüm. Yani her ayar yazması bir işlem geriden uygulanıyordu.
Sürücüye bakınca sebep ortadaydı: Komut, yazılacak değerden önce çalıştırılıyor.
Bunun cihazı öldürmesinin sebebi ise kernel 6.18 ile gelen yeni bir özellikti.
Sistem açılışta çipin özel bir alanını (OTP) okuyup kapatıyor ama "kapat" komutu bir işlem geriden uygulandığı için çip o modda kilitli kalıyordu. Bütün okumaların döndürdüğü o anlamsız veri, meğer o alanmış.
Bu hata Upstream'de zaten düzeltilmiş (aynı sorunu bir TP-Link modelinde bulmuşlar) ama OpenWrt'nin kullandığı çekirdek sürümünde henüz yoktu. Düzeltmeyi alınca flash içeriği yedeğimle bit bit aynı okundu.
Sonrasında kurulum tarafında üç küçük engel daha çıktı ve çözüldü. Sysupgrade başarıyla bitti, fişi çekip taktım ve cihaz kendi flash'ından açıldı.
Bugün
Cihaz fişe takınca açılıyor: İki radyo da yayında, LuCI çalışıyor, LAN/WAN ayrımı duruyor, ayarlar kalıcı. Cihazı hala toplamadım
Dosya Ekleri
Son düzenleyen: Moderatör: