Ana içeriğe geç

Doğrulama

Bir ROM'u değiştirdikten sonra ECU onu yine de kabul eder, ama emniyet veya emisyon testlerinden geçemeyebilir. Doğrulama iki işe yarar: yazdığınız verinin ROM içinde doğru yerde olduğunu kanıtlar ve varsa checksum alanlarını yeniden hesaplar.

Checksum nedir?

Birçok ECU, kod ve veri bloklarının üzerinde ya da sonunda bir sağlama değeri taşır. Bu değer değişmediyse ECU "değiştirilmediğim" sanır. Yazma işlemi bu alanları geçersiz kılar; düzeltilmezse ECU kendi kararını verir (genellikle acil durum modu).

Doğrulama ve düzeltme

Proje ▸ Checksum Doğrula — seçili algoritma için tüm blokları kontrol eder. Proje ▸ Checksum Düzelt — hatalı blokları yeniden hesaplar.

Akış:

  1. ECU tipinizi seçin.
  2. Doğrula çalıştırın; hangi blokların hatalı olduğu listelenir.
  3. Önce harita düzenlemelerinizi yapın, en son checksum düzeltmesini uygulayın — aksi hâlde checksum tekrar geçersiz olur.
  4. Düzeltme sonrası tekrar doğrulayın.

Checksum diyaloğu

Proje ▸ Checksum Doğrula/Düzelt, WinOLS tarzı tablo penceresini açar:

Sütun Anlamı
# Satır numarası
Algorithm Algoritma adı
From / To Kapsanan adres aralığı
Manually Elle eklenen kayıt
AutoCorr. Otomatik düzeltme etkin

Düğmeler: Search (ROM üzerinde yeniden tespit), Add… (kurulu listeden elle algoritma ekleme), Properties… (seçili kaydın ayrıntısı), Delete (elle ekleneni silme), Apply (sağlama toplamlarını bellekte yeniden hesaplama) ve Installed plugins… (kurulu checksum modülleri). Apply tek bir geri-alma adımı üretir; iletişim kutusunun altındaki notun söylediği gibi sağlama toplamları dışa aktarımda otomatik yeniden hesaplanır.

Checksums paneli ve durum çubuğu

Proje ▸ Checksums (veya Görünüm ▸ Checksums) sağda kalıcı bir dock açar (varsayılan kapalı). Panel aktif ROM'u otomatik algılar ve her checksum motoru için bir satır gösterir (önce native Spec'ler, sonra DLL algoritmaları):

Sütun Anlamı
# Satır numarası
Algorithm / Engine Algoritma veya motor adı
Family Eşleşen ECU ailesi
From / To Kapsanan adres aralığı
Status ok / mismatch / unknown
Correctable Bu satırın güvenle düzeltilip düzeltilemeyeceği
  • Verify yalnız hesaplar; ROM'a dokunmaz.
  • Correct & Apply yalnız correctable satırları yeniden yazar ve hepsini tek bir geri-alma adımı olarak uygular.
  • Refresh algılamayı yeniden çalıştırır; panel proje değiştiğinde ya da ROM düzenlendiğinde kendini (kısa bir gecikmeyle) tazeler.

Durum çubuğunun sağında WinOLS tarzı canlı bir gösterge bulunur ve düzenlemeler sonrası kendini günceller:

  • All CS ok — Checksum block N: okay — tüm bloklar geçerli,
  • CS mismatch — N issue(s) — uyuşmazlık var,
  • No checksum module — bu aile için motor yok,
  • CS: unknown (no definition) — motor var ama aile tanımı yok.

Dışa aktarmada otomatik düzeltme

Proje ▸ Correct checksums on export (işaretlenebilir) açıkken, bir ROM dışa aktarılırken tespit edilen tüm checksum blokları yalnızca dışa aktarılan kopyada otomatik düzeltilir; projedeki ROM değişmez. Kapalıyken uygulama yazmadan önce düzeltmek isteyip istemediğinizi sorar.

Her ROM dışa aktarımından önce bir önizleme penceresi çıkar: dosya adı, boyut ve o andaki checksum durumu — geçerli, geçersiz — dışa aktarımda düzeltilecek, geçersiz — düzeltmeniz istenecek veya doğrulanamıyor. Algoritma tespit edilemezse düzeltme atlanır ve durum çubuğunda uyarı verilir; dışa aktarma engellenmez.

Aile tanımı ve "doğrulanamadı" durumu

Dışa aktarma öncesi son kontrol, isteğe bağlı ECU ailesi checksum kataloğunu (data/ecukb/checksum_families.json) da kullanır. Bu katalog bir ECU ailesini okunabilir bir algoritma ipucuna eşler. Uygulama iki durumu ayırt eder:

  • Algoritma biliniyor ama tespit edilemedi — katalogda aileye ait bir ipucu vardır; dışa aktarma sürer ve Correct Checksum… önerilir.
  • Aile tanımı yok — katalogda eşleşme yoktur; checksum doğrulanamadı olarak işaretlenir ve ROM değiştirilmeden dışa aktarılır. Bu durumda yazmadan önce checksum'ı kendiniz doğrulamalısınız.

Katalog eksikse bu ayrım yapılamaz ve özellik sessizce devre dışı kalır; dışa aktarma yine engellenmez.

Yerleşik (native) checksum motoru

Uygulama, DLL'siz çalışan config-driven native checksum motoruna sahiptir. Aile→algoritma eşlemesi data/ecukb/native_checksums.json dosyasından okunur (tools/dataset/build_native_checksums.py ile üretilir). Motor toplama (Sum8/16/32), XOR ve CRC (CCITT/IBM/IEEE + özel parametreli) türlerini destekler.

  • Native öncelik, DLL yedek: bir aile native tanıma sahipse önce native motor denenir; tanım yoksa Windows modül kütüphanesine düşülür.
  • Güvenli düzeltme: native motor yalnızca correctable işaretli ve blokları ROM sınırları içinde kalan Spec'lerde yazar; bilinmeyen ailede doğrulama known=false döner ve hiçbir bayt değişmez.

Bosch MED17/EDC17 doğrulaması ve düzeltmesi de uygulama içinde gömülüdür; ek DLL gerekmez. Bu aile dışındaki algoritmalar için Windows modül kütüphanesi kullanılır.

Checksum kapsamı

Aile→algoritma bilgisi WinOLS checksum modülleri, Ecus.txt/Modelle.txt, FTAG ve web araştırmasıyla zenginleştirilmiştir. Mevcut kapsam: 152 aile (checksum_families.json), 113 WinOLS ailesi (winols_checksum_families.json) ve 13 native algoritma (native_checksums.json). Kapsam verisi opsiyoneldir; yoksa gösterge "tanım yok" der (kurulum için bkz. DATASET_SETUP.md).

148 modüllük Windows kütüphanesi

ChecksumDLL/ klasöründe 148 adet 32-bit modül bulunur. Bunlar 32-bit Windows üzerinde çalışır ve 64-bit uygulamanın içinden checksumhelper.exe yardımcı süreci aracılığıyla çağrılır.

Gerekli çalışma zamanı

Modüller Microsoft Visual C++ 2005 SP1 (x86) çalışma zamanına bağlıdır. Bu çalışma zamanı kurulu değilse modüller yüklenemez. Uygulama bu durumu açık bir mesajla bildirir.

Modüller yalnız Windows üzerinde kullanılır; Linux ve macOS'ta yalnızca yerleşik MED17/EDC17 yolu çalışır.

Bir checksum modülü yüklerken neden ayrı süreç var?

checksumhelper.exe 32-bit bir yardımcı süreçtir. ROM verisi geçici dosyalar üzerinden iki süreç arasında aktarılır. Bu sayede 64-bit uygulama, 32-bit bir DLL'i kendi adres alanına yüklemeden çalıştırabilir.

Version Overview (sürüm karşılaştırma matrisi)

Görünüm ▸ Version Overview…, satırları haritalar ve sütunları sürümler olan bir matris açar: her hücre, o haritanın o sürümde orijinale göre kaç baytının değiştiğini gösterir. Üstteki sürüm seçici + not satırından her sürüme yorum (not) yazılır. Proje ▸ Sürüm Anlık Görüntüsü alırken not otomatik üretilir — "N map, M byte changed" biçiminde kaç harita ve kaç baytın değiştiğini özetler; sonradan dilediğiniz gibi düzenlersiniz.

Accept changes (başka projeden işlem aktarma)

Proje ▸ Accept Changes from Project…, başka bir .mtrp projesindeki düzenlemeleri mevcut projeye aktarır. Eşleştirme adrese değil, değer örüntüsüne göre yapılır; yani kaynak projedeki haritalar farklı adreslerde olsa bile benzer içerik bulunur ve işlemler konumdan bağımsız uygulanır.

Watermark (dijital imza)

Proje ▸ Sign ROM (Watermark)…, ROM'un en büyük boş (0x00/0xFF) bölgesine görünmez bir sahiplik imzası gömer; normal okuma ve sürüş davranışını değiştirmez. Proje ▸ Verify Watermark imzayı bulup doğrular. Böylece bir dosyanın sizin tezgâhınızdan çıkıp çıkmadığı sonradan kanıtlanabilir.

İşlemci tanıma

Diğer ▸ Detect processor…, ROM içindeki bilinen imzaları tarayıp CPU ailesi tahminini güven yüzdesiyle bildirir (ör. hangi üretici ailesine benzediği). Checksum algoritması seçmeden önce ECU tipinden emin olmak için hızlı bir ön kontroldür.

Harici kontrol ile karşılaştırma

Uygulamanın verdiği sonucu her zaman bir bağımsız kaynakla doğrulayın:

  • ECU yazılımının kendi araç seti,
  • Üreticinin checksum/doğrulama yazılımı,
  • Dinamometre ve emisyon testi sonuçları.

Uygulama "başarılı" dese bile haritalar yanlış yere yazılmışsa sonuç anlamsızdır. Doğrulama zincirinin en zayıf halkası checksum değil, adres eşleştirmesidir.

A2L taban adresi doğrulaması

Bir A2L dosyasındaki adresler bir taban adresine göre verilir. Yanlış taban adresi seçildiğinde haritalar yanlış yere açılır — checksum doğrulaması bunu yakalayamaz. İlk çalışmada:

  1. Tanıdığınız bir haritanın adresini A2L ile karşılaştırın.
  2. ROM'da o adresin anlamlı veri içerdiğini doğrulayın.
  3. Gerekirse taban adresi listesini elle düzeltin.

Kaydedip yeniden açma testi

En basit bütünlük testi:

  1. Değişiklikleri kaydedin.
  2. Projeyi kapatın.
  3. Dosyayı yeniden açın.
  4. Doğrula çalıştırın ve düzenlediğiniz haritaların değerlerini kontrol edin.