Bir bootloader nasıl yazılır ?

Furkan KELEŞOĞLU

Aktif Üye
Katılım
12 Ekim 2019
Mesajlar
494
1- bootloader nasıl yazılır ? neler referans alınır.
2- hex uzantılı dosya nasıl parcalanıp gönderilecek ?
3- bootloaderi daha fazla acıp hiç olmazsa kullandığımız pic gibi işlemcilerde nasıl calıştığına ne yapmak gerektiğini konuşalım.
4-ICSP programlayıcının pici nasıl programlıyor. ( bir gün logic analyzeri ICSP bağlama fikri geldi böylelikle hex uzantılı dosya ile giden datalar arasındaki bağlantıyı kuracaktım) fakat logic analyzer sacma sapan davranınca o iş yattı.

Bu konu hakkında konuşalım gerekirse bir uygulama yapalım. Çünkü internette pek bilgi bulamıyorum hazır bootloaderler olsa kullansakta iç yapısını bilmediğim hiç bir şeyden zevk alamıyorum.

Mikro Elekktronikanın acık kaynaklı olarak paylaştığı bootloader yazılımı vardı galiba yanlış hatırlamıyor isem orada ki kodu incelediğim de pic ilk enerjiyi yediğinde bootloader kısmına gelip. UART tan veri gelip gelmediğine bakıyor eğer gelmezse programa devam ediyor eğer gelirse ilk hafızayı temizliyor daha sonra block lara kodu yazıyor. koddan bunu anladık ama tam manasıyla nasıl calıştığını bilmem lazım. dediğim gibi hex dosyası neye göre parcalanıyor.
 
Son zamanlarda birkaç projede sahada güncellenmesi gereken PIC'ler kullandık ve bootloader geliştirildi bu iş için. PIC için yazmadım böyle birşey, ama Texas Instruments DSP'leri için yazdım.

Bootloader'in fabrikada programlanmış olduğunu varsayalım, ama güncellenebilir firmware programlanmış da olabilir programlanmamış olabilir. Gene ARM'da çalışan linux işletim sistemi olduğunu ve PIC ile arasında UART bağlantısı olduğunu varsayalım.

PIC boot ederken şu işlem sırasını izlemesi lazım:

1) Firmware programlanmış mı diye kontrol et. Bunu CRC gibi bir checksum ile yapmak lazım ki tamamlanmadan kesintiye uğramış bir güncellemede sadece yarısı gelmiş bir firmware'i çalıştırmayalım. Eğer CRC testini geçen bir firmware mevcut ise onu çalıştır, değil ise bootloader modunda kal ve komut bekle.

Linux boot ederken şu işlem sırasını izlemesi lazım:

1) UART üzerinden PIC'te çalışan firmware versiyonunu sorgula. Eğer henüz firmware programlanmadıysa, bootloader bu komuta cevap verecek ve "firmware yok" diyecek. Eğer firmware programlandıysa, firmware buna cevap verecek ve kendi versiyonunu söyleyecek.

2) Olması gereken versiyon ile PIC'teki versiyonu kıyasla. PIC eski ise PIC'i programlama moduna sok. Bu örneğin bir kesme ile yapılabilir, veya özel bir firmware komutu ile de yapılabilir. Ama kesme daha garanti.

3) hex dosyanın içeriğini işle ve veri bloklarını ilgili adrese programlanmak üzere gönder. Bootloader bunları flash'a programlayacak. En son CRC checksum da gönder. Bootloader bunu da flash'da bir yere yazar.

4) Bootloader'a yeni firmware'i çalıştırmasını söyle.
 
Sahada güncellenebilir MCU işinde en kritik konu, programlama sırasındaki bir kesintinin (elektrik kesintisi veya başka bir sorun) MCU'yu kalıcı bir şekilde çalışmaz hale getirmemesi. Buna çok dikkat etmek lazım. Yoksa müşterinin ürünü firmware'siz kalır (İngilizce buna "bricked" deniyor) ve ürünün servise getirilip ICSP üzerinden tekrar program atılması gerekir.
 
3) hex dosyanın içeriğini işle ve veri bloklarını ilgili adrese programlanmak üzere gönder. Bootloader bunları flash'a programlayacak. En son CRC checksum da gönder. Bootloader bunu da flash'da bir yere yazar.

Heh iste abi burada hex dosyasinin iceriğini
Nasil isliyoruz ? Bunun hakkinda bir dokuman filan varsa incelemek istiyorum. Zaten o hexi neye gore isliyecegimizi bir anlayabilsem bootloaderi yazarim.

Hex dosyasi ile pice program atarken pickit2 arayuzundeki adreslerle karsilastrma yapip bir yerinden yakalamaya calisiyorum ama anlayamadim tam olarak.
 
Sen hex dosyasının yapısını mı öğrenmek istiyorsun, yoksa bu hex dosyasının içeriğini okuyacak, bileşenlerini ayrıştırıp gereğini yapacak bir program nasıl yazılır diye mi soruyorsun?
 
Abi iki yildir kendi capimda yaziyorum ama bir assembly komutunun 1 ve 0 karsiligi nedir derleyici bunu 1 ve 0 lara cevirirken nasil yapiyor yani kesinlikle bir standardi ve derlenecegi islemciye gore derlenme sekli degisiyor. Hem bunu merak ediyorum hemde bootloader yazarken hex dosyasindan veriyi nasil ayirip hangi kurallara uyarak gonderecegimi merak ediyorum. Heralde hex dosyasini acio bir bir peşine 1 ve 0 lari yollamiyoruzdur
 
Abi iki yildir kendi capimda yaziyorum ama bir assembly komutunun 1 ve 0 karsiligi nedir derleyici bunu 1 ve 0 lara cevirirken nasil yapiyor yani kesinlikle bir standardi ve derlenecegi islemciye gore derlenme sekli degisiyor. Hem bunu merak ediyorum hemde bootloader yazarken hex dosyasindan veriyi nasil ayirip hangi kurallara uyarak gonderecegimi merak ediyorum. Heralde hex dosyasini acio bir bir peşine 1 ve 0 lari yollamiyoruzdur

Wikipedia'daki konu, hex file formatını tam olarak anlatıyor, okuyunca göreceksin zaten. Onun dışında da baya kaynak var :)
 
Bir de şu konuya istersen bir bak. Makina dilinden başlayıp script dillerine kadar programlama dili sınıflandırmalarını anlattım

 
  • Beğen
Reactions: nt
Bir de şu konuya istersen bir bak. Makina dilinden başlayıp script dillerine kadar programlama dili sınıflandırmalarını anlattım



Abi Şimdi eve geldim VPN acıp wikipedia bir dalış yaptım. Ve bunun üzerine oradaki bilgiler ile google bilgi avına cıktım bir kaç pdf ve yabancı forumlardan bir şeyler avladım :D

Ama sana son kez şunu sormak istiyorum eğer kafamda ki gibiyse bundan sonrasını ben getirebilirim sanırım. INTEL hex standartı tüm mikro denetleyiciler için geçerli mi ? Gerçi microchip sayfasında benim gibi meraklı biri daha sormuş intel hex formatını incelemesini istemişler ve biraz da anlatmışlar. eğer sadece burayı inceleyceksem.

Kabaca incelememe göre biraz kolay geldi fakat kolay geldiyse kacırdığım bir yer vardır muhakkak bu kadar kolay olmaması gerekirdi :D
 
Son düzenleme:
Intel hex formatının dışında başka formatları da var, ama en yaygın olan intel hex. İşlemciler arasında da hafif farklılıklar olabiliyor (adres genişliği farklı olabilir), artık onları da değişik hex file'lar gördükçe tam olarak çözersin.
 
İntel hex formatını inceliyorum. Şuanlık fark ettiğim şey şu . 32 bit 16 bit ve 8 bitlik mikro işlemcileri için format farklı bazı formatlar sadece 32 bit için geçerliliği varken bazı formatlar 8,16 veya 32 bit için geçerli olabiliyor. Ben 8 bitlik ile ilgilendiğim için şuan 8 bitlik formatı inceliyorum.

aslında genel bir format var fakat dediğim gibi değişiyor. Bu okuduklarımı da hali hazırda 8 bitlik bir pic için yazılmış programın hex dosyasını inceleyerek teyit etip neyin ne olduğunu daha iyi anlamaya calışıyorum.

8 bit için olan format cok uzun olmasada 32 bitlik bir işlemci için oluşturulacak hex dosyası spesifik bir yapı icerebiliyor ve bazı adreslemeler daha farklı yapılabiliyor.
 
Şimdi baktım'da İntel hex formatı kabul görmüş bir format fakat Microhip bu formatı INHX8M diye format olarak özelleştirmiş. ve bazı değişiklikler getirmiş yavaş yavaş kaynağa ilerliyoruz. :D Çünkü İntelin hex formatına bakıyorum birde hali hazırda hex dosyasına uyuşmayan yerler var. demek ki INHX8M formatı üzerine gitmek lazım.
 
Sanki asıl madeni bulmuşsun :D

Evet hocam böyle araştırdıkca dahada yaklaşılıyor. aslında bir tane ASM yazılmış kod buldum dün gece fakat o sadece picin icindeki flash hafızayı okuyarak uarttan gönderip arayüzde hex oluşturmak adına yazılmış. tam tersi yükleme işlemidir de :D Şimdi pic tarafında nasıl bir algoritma izlenmeli bununla ilgili registerler neler. Memeroy map te hangi vektör de hangi adresten başlayıp nereye kadar yazdırıcaz. birde bunları point göstericileri filan var. işte araştırdıkca buraya ekliyeceğim en sonunda elimizde tamamiyle bir kaynak oluşmuş olucak benim gibi merak edenler içinde iyi bir konu olmuş olur. :D
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,839
Mesajlar
99,581
Üyeler
2,479
Son üye
yiyehuoxing32

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top