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ış:
- ECU tipinizi seçin.
- Doğrula çalıştırın; hangi blokların hatalı olduğu listelenir.
- Önce harita düzenlemelerinizi yapın, en son checksum düzeltmesini uygulayın — aksi hâlde checksum tekrar geçersiz olur.
- 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
correctablesatı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
correctableişaretli ve blokları ROM sınırları içinde kalan Spec'lerde yazar; bilinmeyen ailede doğrulamaknown=falsedö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:
- Tanıdığınız bir haritanın adresini A2L ile karşılaştırın.
- ROM'da o adresin anlamlı veri içerdiğini doğrulayın.
- Gerekirse taban adresi listesini elle düzeltin.
Kaydedip yeniden açma testi¶
En basit bütünlük testi:
- Değişiklikleri kaydedin.
- Projeyi kapatın.
- Dosyayı yeniden açın.
Doğrulaçalıştırın ve düzenlediğiniz haritaların değerlerini kontrol edin.