22 Haziran 2014 Pazar

VxWorks 653 ve BlackBox

Giriş
Blackbox VxWorks dokümanlarında şöyle tanımlanmış.

Pre-determined memory configuration is achieved using black boxes. A black box is a section of memory set aside for a component of the system (core OS, shared library, application, partition or shared region)

Config Record Application BlackBox Nedir?
BlackBox "VxWorks 653 Integration Project" tipi projelerde, Partition'a ne kadar hafıza ayrılma gerektiği belirtir.

Nasıl Tanımlarız?
"Application" tipindeki Partition projemize sağ tıklarız ve (örneğin projemizin ismi Partition1 olsun) Properties menüsünü seçeriz. Açılan kutudan aşağıdaki şekilde gösterildiği gibi "Build Macros" sekmesine geliriz ve BlackBox alanına, ConfigRecord projesinde bu partition için tanımları içeren XML dosyasındaki Application tag'i içindeki Name değerini gireriz (BSPİsmi_default.xml dosyası örneğin wrSbc8641d_default.xml gibi)


XML'i gösteren bir başka belge burada.

ConfigRecord projesinin görünüşü mevcut.

BSP XML İçinde Yapılan Ayarlar

Blackbox ve Elf Dosyası Formatı
Üretilen elf dosyasının bazı ayarları XML ile yapılablir.

ELF Formatı Nedir?
VxWorks ile derlenen yazılım ELF formatında oluyor. Bu formattaki bazı segmentlerin isimler ve işlevleri aşağıda. Daha detay bilgi için C Programlarının hafıza yerleşimi başlıklı yazıya göz atabilirsiniz.

Bazen link esnasında section .rodata overlaps section .text gibi hata mesajları alabiliriz. Bu mesaj tanımladığımız .text alanının küçük geldiğini ve .rodata alanına taştığını ifade ediyor. .text için ayrılmış alanı artırmak lazım. Aşağıdaki Gcc Exception alanı başlığında bir tanımlama örneği var.

Böylece partition için elf dosyasında ne kadar yer ayrılması gerektiğini belirtmiş oluruz.
Bir başka örnek:
<MemorySize
    MemorySizeHeap="0x100000"
    MemorySizeBss="0x80000"
    MemorySizeText="0x100000"
    MemorySizeData="0x100000"
    MemorySizeRoData="0x20000"
    MemorySizePersistentData="0x10000"
    MemorySizePersistentBss="0x10000">
    <AdditionalSection Name=".gcc_except_table" Size="0x10000" Type="DATA"/>
</MemorySize>

Gcc Exception Alanı

Buradaki örnekte GCC ile C++ kullanılırken exception alanı için aşağıdaki kodu eklemek gerektiği görülüyor.

Buradaki soruda da C++ kodu kullanan ELF dosyaları için bu alanın gerekli olduğu belirtilmiş ancak neden gerekli olduğunu anlayamadım, çünkü VxWorsk 653 ile exception kullanılmadığını sanıyordum.

Shared IO Alanı

<CoreOSDescription>
  <KernelConfiguration ... />
  <MemorySize ... />
  <HardwareConfiguration>
    <PhysicalMemory .../>
    <kernelIO .../>
    <SharedIO PoolName="MyRegion" Size="0x00020000" Base_Address="0x60500000"/>
  </HardwareConfiguration>
  <Extensions />
</CoreOSDescription>

Config Record İçinde Yapılan Ayarlar
Heap Nedir?
Uygulama heap yetmezse new, malloc ile bellek ayıramaz ve açılmaz. Heap aşağıdaki XML ile ayarlanır.

<Partition Name =".." Id="..">
  <PartitionDescription>
    <Application NameRef=".."/>
    <SharedLibraryRegion NameRef=".."/>
    <Settings
      RequiredMemorySize ="0x200000" //Heap
      ...
      numStackGuardPages="0xffffffff"
  </PartitionDescription>
</Partition>

Shared Data Region Nedir?
VxWorks 653 introduces two types of shared data regions: the "shared data" to share memory between partitions and "shared I/O" to map hardware resources.

Örnek:

<SharedDataRegions>
   <SharedData Name="MyRegion"><!--BSP XML'deki isim ile aynı olmalı -->
   <SharedIODescription VirtualAddress="0" CachePolicy="IO" SystemAccess="READ_WRITE"/>
  </SharedData>
</SharedDataRegions>


Hiç yorum yok:

Yorum Gönder