booting

linux icin:

linux_booting

yani rom’da bir init kodu var mcu ile birlikte gelen. bu kod flash’ta yuklu olan ubl’i cagirip mcu icindeki ram’de calistiriyor. calisan bu ubl yine flash’ta ubl’den sonraki adreste yuklu olan uboot’u cagirip, bu boot’u harici ram’e atiyor. ram’de calisan uboot da yine flash’tan uboot’tan sonraki adreslerde yuklu olan kernel’i alip harici ram’e atiyor ve calistiriyor.

uboot prompt’una düsme isi flash’ta kernel’in olup olmamasina göre degişiyor. yani uboot’a girmeden once flash temizlenirse uboot prompt’una dusuyor cunku uboot flash’ta kernel’i bulamiyor. ama uboot flash’ta kernel’i bulursa; uboot, uboot prompt’una dusmeden direkt kernel’i flash’tan ram’e cekiyor. Ya da uboot bir muddet keystroke bekliyor ki keystroke gelirse uboot prompt’a dusuyor.

yukaridaki senaryo uboot’un ve kernel’in flash’tan alinip harici ram’e kopyalanmasini gosteriyor. bu senaryonun haricinde ubl uboot’u ve kernel’i baska haberlesme peripheral’larindan da cagirabilir. ethernet, can, usb ya da uart gibi.

kaynak


microchip mcu’lari icin:

asagida anlatilan ise gomulu low level programlama icin (interrupt base sistemler icin)(gomulu sistemler icin) asagidaki cizim microchip dokumanlarindan:

karta reset atinca program counter reset vector’e gider. asagidaki ornekte karta bir de jumper konulmus. jumper 1. pozisyonda iken reset vector program counter’i user reset vector’e atlatir ve flash’taki eski firmware’i run eder. jumper 2. pozisyonda iken reset vector program counter’i bootloader’in oldugu adrese atlatir ve bootloader firmware’in download edilmesini bekler. download bittikten sonra bootloader program counter’i user reset vector’e atlatir ve flash’a yeni download edilmis olan firmware run edilir.

mcu_booting

kaynak


STM mcu’lari icin:

asagida anlatilan da gomulu low level programlama icin, yukaridaki gibi. bunlar STM mcu’lari icin:

stm32f4’un STM3240G-EVAL isimli kitinde boot pinleri var. bu pinleri ayarlayarak ubl’in nereye dusurulecegi ayarlanabiliyor. mesela stm32f427’nin datasheet’inde boot modes isminde bir baslik var. burada 3 boot option’ından bahsediliyor.

  • (1)Boot from user Flash
  • (2)Boot from system memory
  • (3)Boot from embedded SRAM

mcu ister flash’tan, ister system memory’den ister SRAM’den boot edilebiliyor. bunlar IO’larla seciliyor. STM mcu’larinin icinde default olarak gelen bir bootloader var. bu 2 seceneginde belirtilen system memory icinde tutuluyor.

SRAM’ bataryaya ihtiyac duyan bir flash gibidir. bataryadan guc aldigi muddetce icindeki bilgileri muhafaza eder. adina ram denilmesinin sebebi ram gibi hizli olmasidir. bununla ilgili bilgi buraya

bu ubl ile normal kodlarin cekilmesi icin ise uart, can, usb ya da ethernet gibi haberlesme peripheral’lari kullanilabiliyor. fakat sistem memory icinde gelen default ubl ile bu boot secenekleri kisitli kaliyor. adamlar sadece can ve usart’i koymus olabiliyorlar. o yuzden bu adamlarin verdigi ubl’i kullanacaksak mecburen bu adamlarin haberlesme protokollerine de muhtaciz. cunku sistem acilisinda adamlarin ubl’ini cagirmissan adamlarin haberlesmesini kullanmak zorundasin.

ama kendi ubl’ini yazarsan istedigin haberlesme peripheral’i ile asil programini cagirabilirsin.