Giriş
Havacılık dünyasında en çok kullanılan iki işletim sistemi var. İlki Green Hills Integrity, diğeri ise Wind River VxWorks. Benim gördüğü kadarıyla Türkiye'de Integrity daha fazla pazar payına sahip ve tercih ediliyor. VxWorks ise bir çok firma için bir muamma. Bu yüzden WxWorks'ü tanıtıcı bir yazı hazırladım. İleride Integrity için de bir yazı hazırlamayı planlıyorum.
Bu yazıyla ilgili olarak ARINC 653 başlıklı yazıya da göz atabilirsiniz.
IMA Nedir?
Integrated Moduler Avionics (IMA) yeni gelişmekte olan bir kavram. Havacılıkta sıkça görülen "Federated" mimarinin yerine almaya başladı. Federated mimaride her üretici kendi Line Replaceable Unit (LRU) veya Line Replaceable Module (LRM) birimi ile geliyor ve bunlar hava aracından birleştiriliyordu. Ancak bu yöntemde her birim kendi işlecisi, kartı ve donanımı ile geldiği için, hem aracın ağırlığı hem de güç tüketimi artıyor. Yani kaynaklar verimsiz kullanılıyordu. IMA yapısında donanım - yani bellek, işlemci gibi kaynaklar - bir nevi sanallaştırılarak, farklı emniyet seviyesindeki uygulamalar aynı donanım üzerinde koşabilmesi sağlanıyor. Tek bir uygulama tüm belleği, kaynakları ve işlemciyi (cpu starvation) tüketemiyor.
Aşağıdaki şekilde durum görülebilir.
IMA yapısının bir diğer artısı ise yazılımı donanımdan soyutluyor. Donanım eskide bile, kolaylıkla değiştirilebiliyor.
IMA Yapısından Önce Durum Nasıldı ?
Kernel ve uygulama aynı address alanı içinde koşuyordu. Sağlamlık (Robustness) için farklı kutular koymaktan başka çare kalmıyordu. Kutuları koşturmak için havacılık uygulaması için bir çok firma ya kendi gerçek zamanlı işletim sistemini geliştirmişti. ya da gerçek zamanlı bir işletim sistemini sertikasyona uygun olacak hale getirmişti.
Havacılık UygulamalarındaWind River Ne Sunuyordu?
VxWorks 653'ten önce havacılık uygulamaları için VxWorks Cert vardı. Bu işletim sistemi VxWorks 6.x tabanlı ve DO-178B Seviye A sertifikasyona sahip multitasking kabiliyetli bir işletim sistemi. Aşağıda broşürünü görebilirsiniz.
VxWorks 653 Nedir ?
VxWorks 653 havacılık ve savunma sanayi için özel olarak tasarlanmış bir işletim sistemi. Ares I sisteminde "Flight and command computer" olarak ta kullanıldığı yazıyor. Sanıyorum uzay sistemlerinde de kendine yer bulan/bulmaya başlayan bir işletim sistemi. VxWorks 653 de kendi içinde sürümlere sahip. VxWorks 653 2.1 veya VxWorks 653 3.2 gibi sürümlere denk gelebilirsiniz.
En önemli özelliği Integrated Moduler Avionics (IMA) yapısını desteklemesi. Şekilde bu durum görülebilir.
IMA'yı destelemek için VxWorks 653 işletim sistemi iki farklı parçaya bölünmüş. İlk parça "Module OS", diğeri ise "Partition OS". Tüm gömülü sistemlerde olduğu gibi her iki parça da projeyle beraber derlenip bir boot edilebilir bir halde karta yükleniyorlar.
Module OS
Module OS Board Support Package (BSP) aracılığıyla donanım ile konuşuyor ve "Partition OS"'lerin zamanlamasından (scheduling) sorumlu. Burada dikkat edilmesi gereken nokta VxWorks dokümanları bazen Module OS yerine Core OS kelimesini de kullanıyor. Module OS ARINC 653 terminolojisinden geliyor. Core OS ise VxWorks 653 terminolojisi. Her iki kelime de aslında eş anlamlı. Core OS bölümlenmeler arası mesajlaşmadan sorumlu.
CoreOS başlarken terminale
Module OS ve Scheduler
Aşağıdaki cümle önemli. Module OS ve Partition OS arasındaki temel farkı özetliyor.
Partition OS
"Partition OS" ise bölümlenmeden sorumlu ve uygulamayı koşturuyor.Bölümlenme içinde koşan uygulamalar işletim sistemine erişmek için belli standartlar ile belirlenmiş arayüzler kullanıyorlar. "Partition OS" bu standartları sağlamaktan sorumlu. Bu standartlar ARINC 653 API, POSIX API veya VxWorks Native API'den biri olabilir.
Partition OS threadlerine vThreads deniliyor. vThreads user-level thread'ler. Partition OS aslında VxWorks 5.x veya VxWorksCert mikrokernel'ine benziyor. vThreads başka bir bölümlenmeye ait kernel nesnelerine erişemez. Sadece kendi bölümlenmesinin kernel nesnelerine erişebilir.
Partition OS donanımdan hiçbir şekilde kesme (interrupt) almaz. Core OS pseudo interrupt gönderir.
Eğer kendi Partition OS'umuzu geliştirmek istersek VxWorks COIL (Core OS Interface Library) isimli bir altyapı sağlıyor.
Partition OS'a bileşenler eklemek için PartitionOS.xml dosyasına bileşenin xml'ini eklemek lazım.
Partition OS ve Scheduler
Aşağıdaki cümledeki bilgi önemli.
Uygulama Partition OS header dosyalarını kullanıyor ve Partition OS ile linkleniyor. Uygulama projesi BSP ve donanımdan iyice yalıtıldığı için, donanımla alakalı herhangi bir ayar yapmak gerekmiyor. Sadece hangi CPU mimarisine göre derleneceği seçilebilir. Böylece uygulama projesi, farklı bir kart için derlenmek istenirse, rahatlıkla gerçekleştirilebilir.
VxWorks 653 Cert Nedir
VxWorks653 ile çalışırken oluşturulan proje Cert ise , burada yazdığına göre DO 178B Level A için gerekli isterleri karşılıyor.
VxWorks 653 ile bir çok ayar XML vasıtasıyla yapılıyor. Daha sonra XML derleyicisi, XML dosyalarını binary veri haline getiriyor. Buradaki sunumda işleyiş görülebilir.
Bazı vThreads Bileşenleri
Konuyu VxWorks653 ve Partition OS Bileşenleri başlıklı yazıya taşıdım.
Core OS Bileşenleri
Core OS bileşenleri bir sihirbaz aracılığıyla eklenip çıkarılabilir.
Target resident shell
Linux'takine benzer bir kabuk çalıştırabilme imkanı sağlar.
Health Monitor
Konu uzun ve karışık olduğu için VxWorks 653 Health Monitor başlıklı yazıya taşıdım.
WorkBenchWorkbench kurulum dizininden itibareb workbenc-xy\wrwb\platform\x86-win32\eclipse\wrwb-x86-win32.exe
VxWorks 653 Integration Project
Yukarıda anlatılan VxWorks 653 projesini oluşturmak için "Integration Project" sihirbazını kullanıyoruz. Örnek:
Şekilde Module OS ve Partition OS projelerini ayrı ayrı görmek mümkün. Ayrıca yaratılan partitionlar da görülebilir. Config record içinde bazı ayarların yapıldığı XML dosyaları var ancak bu dosyalar Module OS içinmi yoksa Partition OS içinmi kullanılıyor bilmiyorum.
Workbench ve Debug
Remote System Sekmesi
Workbench'te "Remote System" sekmesi target'a bağlantı kurmak için kullanılır. Açıklaması şöyle: "A connection to a target must be defined and established before tools can communicate with a target system. You establish this connection in the Remote Systems View." Bu sekmedeki bağlantıya sağ tıklayarak File alanına imajın yüklendiği boot.txt dosyasını göstermek lazım.
Bağlanıldığı zaman aşağıdaki yol takip edilerek örneğin Partition1'e target'a attach edilir.
Board Name -> Wind Reiver Target Debugger -> VxWorks 653 -> protection domains -> Partition 1 -> protection domain tasks
Bu menüye sağ tıklanır ve Debug -> Attach to all Protection domain taks veya Attach to all Protection domain taks and Threads (Task Mode) menüsü seçilir. İkisi arasındaki farktan çok emin değilim ancak ikincisini seçersek işletim sisteminin kendi yarattığı taskları da gösteriyor.
Debug Sekmesi
Breakpoint koymak için kaynak dosyaların path'inin belirtilmesi gerekir. Bu sekmede sağ tıklayıp "Edit Source Lookup" menüsü ile kaynak dosyaların dizini belirtilir.
Terminate and Relaunch ile tekrar başlatılan target'a eski breakpointler yerleştirilir. Breakpoint koyarken eğer kaynak kod ile yüklenen binary (image) arasında uyumsuzluk varsa Workbench uyarı verir.
WDB
Wind Debug Agent target üzerinde debug yapılabilmesine imkan tanıyan bir Remote Debugger. UDP veya TCP 17185 numaralı portu kullanır. Aşağıda bir açıklama mevcut.
WDB'nin VxWorks'e erişebilmesi için, işletim sisteminin arayüzler (remote debugging interface routines) sağlaması gerekiyor.
Target açılırken VxWorks ASCII Art logosunun altın
CPU : ...
Memory Size : ...
WDB : Ready
yazar
Makefile
Projeyi yarattıktan sonra yukarıdaki örnektede görüldüğü gibi, Eclipse tabanlı WorkBench'i kullanılabileceği gibi, istenirse komut satırından make yapabilmek te mümkün.
makefile kullanabilmek için workbench'in kurulduğu dizindeki wrenv komutunu çalıştırmak gerekir. Bu komut Windows ve Unix için farklı dosyalar. Bu komut ile kabuktaki (shell) ortam değişkenleri (environment variables) atanıyor. Böylece mutlak dizinleri make dosyasında kullanmak zorunda kalmayız. Örnek kullanım şekli.
make dosyamıza VxWorks kurulumunda gelen Makefile.vars dosyasınıa dahil etmek gerekli. Bu dosya işlemci mimarisini tanımlıyor. Örneğin PPC604 gibi. Seçilen işlemciye göre projeyi derlerken kullanılacak işlemci ve ortama mahsus ayarları içeren diğer dosyalar dahil ediliyor. Yukarıdaki örnek için Makefile.vars.PPC604 dahil edilir. Makefile.vars.PPC604 dosyasında TOOLARCH = ppc olarak tanımlı. Dolayısıyla CC = ccppc değerini alır.
Derleyiciler kurulumda gnu\x.y.z-vxworks653\x86-win32\bin dizininde. İşlemciye göre derleyiciler mevcut. PowerPC için ccppc.exe, c++ppc.exe, cppppx.exe, g++ppc.exe gibi derleyiciler mevcut. Aralarındaki farkı bilmiyorum ancak makefile yukarıda da anlattığım gibi ccppc.exe'yi kullanıyor. ccppc "GNU C Compiler for PowerPC" imiş. ccppc.exe Wind River firması tarafından değiştirilmiş gcc tabanlı bir derleyici. Normal gcc sürümünü oldukça gerilden takip ediyor. Örneğin gcc sürümü 4.8 iken, firma 3.3.2 tabanlı bir derleyici sunuyor. Dosya uzantısı .c veya .cpp olmayan ya da tanıyamadığı dosyalar içinse g++ppc'yi kullanmaya çalışıyor. (Bu cümleyi daha sonra açıkla)
Not 1:
nmppc için buraya bakabilirsiniz.
Not 2 : make sonucunda çıkan elf dosyasının sembollerine objdumpppc ile bakılabilir. Bu program derleyici ile aynı dizinde bulunuyor yani gnu\x.y.z-vxworks653\x86-win32\bin dizininde. Uzantısı .sm olan dosyalar için kullanılıyor. Komutun bir çok seçeneği var. Örneğin sembolleri görmek için aşağıdaki gibi yapılabilir.
linkerscript
linkerscript'in tanımı burada. Konuyu sonra yazacağım.
Config Record XML'i
BlackBox
Bu xml içinde ELF formatında kullanılacak alanların büyüklüklerini ayarlıyoruz. Konuyla ilgili olarak VxWorks 653 ve Blackbox başlıklı yazıya göz atabilirsiniz.
Portlar
Konuyu VxWorks 653 ve Portlar başlıklı yazıya taşıdım.
Config Record XML'i İle Bölümlenme Zamanı
Bölümlenmelere ayrılan zamanı tanımlamak için kullanılan XML tag'leri ARINC 653 standardına uyumlu değil. Ancak bence anlaması daha kolay. Örnek:
ARINC 653 standardı ile kullanılan XML formatı ise aşağıda. Hiç benşmediklerini göstermek için ekledim. Örnek:
Main Metodu
VxWorks'te ile alışageldiğimiz main metodu yok. Programınız void usrAppInit (void) metodu ile başlıyor. Uygulamaya argv,arc parametreleri geçilmiyor. Örnek:
Eğer Linux'ta da çalışmak istersek aşağıdaki gibi yapabiliriz.
Linux projesindeki main dosyasında ise
system clock
Standart VxWorks'te iki çeşit clock var. Bunlar "system clock" ve aux clock". VxWorks 653'te bunlar kullanılabiliyormu bilmiyorum.
Ağdan boot
boot.txt aşağıdaki gibi olmalı
#Boot30
pwd://coreOS.sm -> Core OS için
pwd://vxSysLib.sm -> Sanırım Partition OS için
pwd://configRecord.reloc
pwd://partition1.sm -> Benim partitionım için
pwd://partition2.sm -> Benim partitionım için
Buradaki soruda ağdan ftp ile indirilen yazılımı boot ederken verdiği çıktı var. boot device : mottsec ethernet arayüzünü kullanarak boot et anlamına geliyor sanırım.
__ctypePtrGet
ctype.h dosyasında tanımlı olan isLower() benzeri karakterlerle ilgili olan metodların çalışabilmesi için lazım. Örnek:
__ctypePtrGet() meodu vThreadsData.h dosyasında tanımlı. Bu yüzden bu dosyayı da #include <vThreadsData.h> satırı ile include etmek gerekiyor. Buradaki ve buradaki örneklerde görüldüğü gibi, ctype.h dosyasında extern olarak tanmlı olan bir değişkeni, kendi kaynak dosyamızda tanımlamak ve ilklemek gerekiyor. Sebebini ben de çok anlamadım ancak, gördüğüm örnekler böyleydi.
taskLock
taskLock() kilit bırakılıncaya kadar başka bir şeyin çalışmasına müsade etmez. Ancak burada problemli olduğu yazıyor. Sebebi ise açıklanmamış.
CDF Dosyaları
Module OS içindeki cdf dosyası derlenecek sürücü hakkında bilgi verir. CDF dosyasının içi:
CONFIGLETTES : Sürücünün kaynak kodunu içeren dosyaların isimleri.
INIT_RTN : Sürücünü etkinleşmesi için çağırılacak ilk metodun ismi
PROTOTYPE: İlk metodun imzası. Örnek: void myDriverInit(void);
Fault Tolerant Software
Kavramlar
Tanımlar ise aşağıda :
Detection Patterns başlığı altında eğer hatadan kurtulmak mümkün değilse Fail Silent'ın tercih edilmesi önerilmiş.
The most desirable means of failure handling in a computing system is when the error is detected automatically and corrected before it beceoms a failure. If this is not possible and a failure occurs, then the next most favorable are the Fail Silent and then the Crash Failure mode.
Fail Silent Nedir ?
A Fail-Silent failure is one in which the failing unit either presents the correct result or no result at all. A Crash Failure is one where the unit stops after the first silent failure.
Fail Silent Durumu İletilir mi ?
Bir başka paragrafta ise Fail Silent moduna giren birimin, durumunu başka birimlere bildirmemesi gerektiği anlatılmış.
When failing silently the erroneous element immediately stops processing without corrupting any of its peers. To ensure peers do not corrupt other peers through the error propagating, the failing element stops without informing them that it is stopping. The problem of detecting that an element has stopped functioning is a totally different and easier problem than the problem of determining if an element has stopped operating correctly.
VME
Askeri havacılıkta kullanılan sistemler bazen güçlendirilmiş VME kasa içine konulup, hava aracına takılıyor. Aşağıda sökmesi takması ve taşıması kolay olan ruggidized vme için bir örnek şekil var.
Havacılık dünyasında en çok kullanılan iki işletim sistemi var. İlki Green Hills Integrity, diğeri ise Wind River VxWorks. Benim gördüğü kadarıyla Türkiye'de Integrity daha fazla pazar payına sahip ve tercih ediliyor. VxWorks ise bir çok firma için bir muamma. Bu yüzden WxWorks'ü tanıtıcı bir yazı hazırladım. İleride Integrity için de bir yazı hazırlamayı planlıyorum.
Bu yazıyla ilgili olarak ARINC 653 başlıklı yazıya da göz atabilirsiniz.
IMA Nedir?
Integrated Moduler Avionics (IMA) yeni gelişmekte olan bir kavram. Havacılıkta sıkça görülen "Federated" mimarinin yerine almaya başladı. Federated mimaride her üretici kendi Line Replaceable Unit (LRU) veya Line Replaceable Module (LRM) birimi ile geliyor ve bunlar hava aracından birleştiriliyordu. Ancak bu yöntemde her birim kendi işlecisi, kartı ve donanımı ile geldiği için, hem aracın ağırlığı hem de güç tüketimi artıyor. Yani kaynaklar verimsiz kullanılıyordu. IMA yapısında donanım - yani bellek, işlemci gibi kaynaklar - bir nevi sanallaştırılarak, farklı emniyet seviyesindeki uygulamalar aynı donanım üzerinde koşabilmesi sağlanıyor. Tek bir uygulama tüm belleği, kaynakları ve işlemciyi (cpu starvation) tüketemiyor.
Aşağıdaki şekilde durum görülebilir.
IMA yapısının bir diğer artısı ise yazılımı donanımdan soyutluyor. Donanım eskide bile, kolaylıkla değiştirilebiliyor.
IMA Yapısından Önce Durum Nasıldı ?
Kernel ve uygulama aynı address alanı içinde koşuyordu. Sağlamlık (Robustness) için farklı kutular koymaktan başka çare kalmıyordu. Kutuları koşturmak için havacılık uygulaması için bir çok firma ya kendi gerçek zamanlı işletim sistemini geliştirmişti. ya da gerçek zamanlı bir işletim sistemini sertikasyona uygun olacak hale getirmişti.
Havacılık UygulamalarındaWind River Ne Sunuyordu?
VxWorks 653'ten önce havacılık uygulamaları için VxWorks Cert vardı. Bu işletim sistemi VxWorks 6.x tabanlı ve DO-178B Seviye A sertifikasyona sahip multitasking kabiliyetli bir işletim sistemi. Aşağıda broşürünü görebilirsiniz.
VxWorks 653 Nedir ?
VxWorks 653 havacılık ve savunma sanayi için özel olarak tasarlanmış bir işletim sistemi. Ares I sisteminde "Flight and command computer" olarak ta kullanıldığı yazıyor. Sanıyorum uzay sistemlerinde de kendine yer bulan/bulmaya başlayan bir işletim sistemi. VxWorks 653 de kendi içinde sürümlere sahip. VxWorks 653 2.1 veya VxWorks 653 3.2 gibi sürümlere denk gelebilirsiniz.
En önemli özelliği Integrated Moduler Avionics (IMA) yapısını desteklemesi. Şekilde bu durum görülebilir.
IMA'yı destelemek için VxWorks 653 işletim sistemi iki farklı parçaya bölünmüş. İlk parça "Module OS", diğeri ise "Partition OS". Tüm gömülü sistemlerde olduğu gibi her iki parça da projeyle beraber derlenip bir boot edilebilir bir halde karta yükleniyorlar.
Module OS
Module OS Board Support Package (BSP) aracılığıyla donanım ile konuşuyor ve "Partition OS"'lerin zamanlamasından (scheduling) sorumlu. Burada dikkat edilmesi gereken nokta VxWorks dokümanları bazen Module OS yerine Core OS kelimesini de kullanıyor. Module OS ARINC 653 terminolojisinden geliyor. Core OS ise VxWorks 653 terminolojisi. Her iki kelime de aslında eş anlamlı. Core OS bölümlenmeler arası mesajlaşmadan sorumlu.
CoreOS başlarken terminale
[coreOS] -> Loading symbol table for PartitionOS from PartitionOS.sym... doneyazar. Daha sonra her partition için
Loading symbol table for PartitionX from PartitionX.sym... doneyazar.
Module OS ve Scheduler
Aşağıdaki cümle önemli. Module OS ve Partition OS arasındaki temel farkı özetliyor.
By default the Core OS schedules partitions by time-preemptive scheduling (TPS) and in partition order.Yani her bölümlenme kendisine verilen zaman kadar çalışıyor. Aralarında öncelik farkı yok. Tek istisnai durum ise yine aşağıda açıklanmış.
If a partition is enabled for priority-preemptive scheduling, the Core OS considers the partition for scheduling during the idle time within the TPS schedule.Yani eğer idle zaman varsa, Core OS bu boşluğu bir bölümlenmeyi fazladan çalıştırmak için kullanabilir.
Partition OS
"Partition OS" ise bölümlenmeden sorumlu ve uygulamayı koşturuyor.Bölümlenme içinde koşan uygulamalar işletim sistemine erişmek için belli standartlar ile belirlenmiş arayüzler kullanıyorlar. "Partition OS" bu standartları sağlamaktan sorumlu. Bu standartlar ARINC 653 API, POSIX API veya VxWorks Native API'den biri olabilir.
Partition OS threadlerine vThreads deniliyor. vThreads user-level thread'ler. Partition OS aslında VxWorks 5.x veya VxWorksCert mikrokernel'ine benziyor. vThreads başka bir bölümlenmeye ait kernel nesnelerine erişemez. Sadece kendi bölümlenmesinin kernel nesnelerine erişebilir.
Partition OS donanımdan hiçbir şekilde kesme (interrupt) almaz. Core OS pseudo interrupt gönderir.
Eğer kendi Partition OS'umuzu geliştirmek istersek VxWorks COIL (Core OS Interface Library) isimli bir altyapı sağlıyor.
Partition OS'a bileşenler eklemek için PartitionOS.xml dosyasına bileşenin xml'ini eklemek lazım.
Partition OS ve Scheduler
Aşağıdaki cümledeki bilgi önemli.
The vThreads scheduler is a priority preemptive scheduler (PPS) that allocates CPU to the highest priority thread that is ready to run.Uygulama
Uygulama Partition OS header dosyalarını kullanıyor ve Partition OS ile linkleniyor. Uygulama projesi BSP ve donanımdan iyice yalıtıldığı için, donanımla alakalı herhangi bir ayar yapmak gerekmiyor. Sadece hangi CPU mimarisine göre derleneceği seçilebilir. Böylece uygulama projesi, farklı bir kart için derlenmek istenirse, rahatlıkla gerçekleştirilebilir.
VxWorks 653 Cert Nedir
VxWorks653 ile çalışırken oluşturulan proje Cert ise , burada yazdığına göre DO 178B Level A için gerekli isterleri karşılıyor.
VxWorks Cert Platform is backed by the industry’s most comprehensive set of certification artifacts, which support all RTCA DO-178B and EUROCAE ED-12B Level A requirements.VxWorks 653 ve XML Derleyicisi
VxWorks 653 ile bir çok ayar XML vasıtasıyla yapılıyor. Daha sonra XML derleyicisi, XML dosyalarını binary veri haline getiriyor. Buradaki sunumda işleyiş görülebilir.
Bazı vThreads Bileşenleri
Konuyu VxWorks653 ve Partition OS Bileşenleri başlıklı yazıya taşıdım.
Core OS Bileşenleri
Core OS bileşenleri bir sihirbaz aracılığıyla eklenip çıkarılabilir.
Target resident shell
Linux'takine benzer bir kabuk çalıştırabilme imkanı sağlar.
devs : Sistemdeki yüklü aygıt sürücülerini gösterirr.
Health Monitor
Konu uzun ve karışık olduğu için VxWorks 653 Health Monitor başlıklı yazıya taşıdım.
WorkBenchWorkbench kurulum dizininden itibareb workbenc-xy\wrwb\platform\x86-win32\eclipse\wrwb-x86-win32.exe
VxWorks 653 Integration Project
Yukarıda anlatılan VxWorks 653 projesini oluşturmak için "Integration Project" sihirbazını kullanıyoruz. Örnek:
Şekilde Module OS ve Partition OS projelerini ayrı ayrı görmek mümkün. Ayrıca yaratılan partitionlar da görülebilir. Config record içinde bazı ayarların yapıldığı XML dosyaları var ancak bu dosyalar Module OS içinmi yoksa Partition OS içinmi kullanılıyor bilmiyorum.
Workbench ve Debug
Remote System Sekmesi
Workbench'te "Remote System" sekmesi target'a bağlantı kurmak için kullanılır. Açıklaması şöyle: "A connection to a target must be defined and established before tools can communicate with a target system. You establish this connection in the Remote Systems View." Bu sekmedeki bağlantıya sağ tıklayarak File alanına imajın yüklendiği boot.txt dosyasını göstermek lazım.
Bağlanıldığı zaman aşağıdaki yol takip edilerek örneğin Partition1'e target'a attach edilir.
Board Name -> Wind Reiver Target Debugger -> VxWorks 653 -> protection domains -> Partition 1 -> protection domain tasks
Bu menüye sağ tıklanır ve Debug -> Attach to all Protection domain taks veya Attach to all Protection domain taks and Threads (Task Mode) menüsü seçilir. İkisi arasındaki farktan çok emin değilim ancak ikincisini seçersek işletim sisteminin kendi yarattığı taskları da gösteriyor.
Debug Sekmesi
Breakpoint koymak için kaynak dosyaların path'inin belirtilmesi gerekir. Bu sekmede sağ tıklayıp "Edit Source Lookup" menüsü ile kaynak dosyaların dizini belirtilir.
Terminate and Relaunch ile tekrar başlatılan target'a eski breakpointler yerleştirilir. Breakpoint koyarken eğer kaynak kod ile yüklenen binary (image) arasında uyumsuzluk varsa Workbench uyarı verir.
WDB
Wind Debug Agent target üzerinde debug yapılabilmesine imkan tanıyan bir Remote Debugger. UDP veya TCP 17185 numaralı portu kullanır. Aşağıda bir açıklama mevcut.
WDB'nin VxWorks'e erişebilmesi için, işletim sisteminin arayüzler (remote debugging interface routines) sağlaması gerekiyor.
Target açılırken VxWorks ASCII Art logosunun altın
CPU : ...
Memory Size : ...
WDB : Ready
yazar
Makefile
Projeyi yarattıktan sonra yukarıdaki örnektede görüldüğü gibi, Eclipse tabanlı WorkBench'i kullanılabileceği gibi, istenirse komut satırından make yapabilmek te mümkün.
makefile kullanabilmek için workbench'in kurulduğu dizindeki wrenv komutunu çalıştırmak gerekir. Bu komut Windows ve Unix için farklı dosyalar. Bu komut ile kabuktaki (shell) ortam değişkenleri (environment variables) atanıyor. Böylece mutlak dizinleri make dosyasında kullanmak zorunda kalmayız. Örnek kullanım şekli.
wrenv -p vxworks653.x.y.zwrenv komutu kendi shell'ini çalıştırıyor. Eğer sadece ortam değişkenlerini almak ve yeni bir shell açmadan kullanmak istersek aşağıdaki komut ile wrenv'in atadığı değişkenleri almak mümkün.
wrenv -p vxworks653-2.3.0.1 -o print_env -f bat > env.bat
make dosyamıza VxWorks kurulumunda gelen Makefile.vars dosyasınıa dahil etmek gerekli. Bu dosya işlemci mimarisini tanımlıyor. Örneğin PPC604 gibi. Seçilen işlemciye göre projeyi derlerken kullanılacak işlemci ve ortama mahsus ayarları içeren diğer dosyalar dahil ediliyor. Yukarıdaki örnek için Makefile.vars.PPC604 dahil edilir. Makefile.vars.PPC604 dosyasında TOOLARCH = ppc olarak tanımlı. Dolayısıyla CC = ccppc değerini alır.
Derleyiciler kurulumda gnu\x.y.z-vxworks653\x86-win32\bin dizininde. İşlemciye göre derleyiciler mevcut. PowerPC için ccppc.exe, c++ppc.exe, cppppx.exe, g++ppc.exe gibi derleyiciler mevcut. Aralarındaki farkı bilmiyorum ancak makefile yukarıda da anlattığım gibi ccppc.exe'yi kullanıyor. ccppc "GNU C Compiler for PowerPC" imiş. ccppc.exe Wind River firması tarafından değiştirilmiş gcc tabanlı bir derleyici. Normal gcc sürümünü oldukça gerilden takip ediyor. Örneğin gcc sürümü 4.8 iken, firma 3.3.2 tabanlı bir derleyici sunuyor. Dosya uzantısı .c veya .cpp olmayan ya da tanıyamadığı dosyalar içinse g++ppc'yi kullanmaya çalışıyor. (Bu cümleyi daha sonra açıkla)
Not 1:
nmppc için buraya bakabilirsiniz.
Not 2 : make sonucunda çıkan elf dosyasının sembollerine objdumpppc ile bakılabilir. Bu program derleyici ile aynı dizinde bulunuyor yani gnu\x.y.z-vxworks653\x86-win32\bin dizininde. Uzantısı .sm olan dosyalar için kullanılıyor. Komutun bir çok seçeneği var. Örneğin sembolleri görmek için aşağıdaki gibi yapılabilir.
objdump -t x.smNot 3 : Aynı gcc'deki gibi hata alınan adresin hangi kaynak koda denk geldiğine aşağıdaki gibi bakabiliriz. Bu program derleyici ile aynı dizinde bulunuyor yani gnu\x.y.z-vxworks653\x86-win32\bin dizininde. Uzantisi .sm olan dosyalar için kullanılıyor.
addr2lineppc -e path/to/binary 0xHATAADDRESS
linkerscript
linkerscript'in tanımı burada. Konuyu sonra yazacağım.
Config Record XML'i
BlackBox
Bu xml içinde ELF formatında kullanılacak alanların büyüklüklerini ayarlıyoruz. Konuyla ilgili olarak VxWorks 653 ve Blackbox başlıklı yazıya göz atabilirsiniz.
Portlar
Konuyu VxWorks 653 ve Portlar başlıklı yazıya taşıdım.
Config Record XML'i İle Bölümlenme Zamanı
Bölümlenmelere ayrılan zamanı tanımlamak için kullanılan XML tag'leri ARINC 653 standardına uyumlu değil. Ancak bence anlaması daha kolay. Örnek:
<Schedules>PartitionNameRef alanı ile verilen bölümlenme ismi daha önce tanımlanmış bir bölümlenme olmalı. Duration ile verilen süre saniye cinsinden. ReleasePoint ne işe yarar bilmiyorum.
<!- First partition->
<Schedule Id="0">
<PartitionWindow PartitionNameRef="Partition1" Duration="0.25" ReleasePoint="1">
</Schedule>
<!- Nth partition->
<Schedule Id="1">
<PartitionWindow PartitionNameRef="PartitionN" Duration="0.25" ReleasePoint="1">
</Schedule>
</Schedules>
ARINC 653 standardı ile kullanılan XML formatı ise aşağıda. Hiç benşmediklerini göstermek için ekledim. Örnek:
<ModuleSchedule><!- First partition-><Partition_Schedule><Window_Schedule></ModuleSchedule>
</Partition_Schedule>
<!- Nth partition->
<Partition_Schedule><Window_Schedule>
</Partition_Schedule>
Main Metodu
VxWorks'te ile alışageldiğimiz main metodu yok. Programınız void usrAppInit (void) metodu ile başlıyor. Uygulamaya argv,arc parametreleri geçilmiyor. Örnek:
Eğer Linux'ta da çalışmak istersek aşağıdaki gibi yapabiliriz.
extern void myMainEntryPoint ();
void usrAppInit (void){
/*add application specific code here*/
myMainEntryPoint();
}
Linux projesindeki main dosyasında ise
void myMainEntryPoint(){
}
int main (int argc,char* argv[]){
myMainEntryPoint();
}
system clock
Standart VxWorks'te iki çeşit clock var. Bunlar "system clock" ve aux clock". VxWorks 653'te bunlar kullanılabiliyormu bilmiyorum.
Ağdan boot
boot.txt aşağıdaki gibi olmalı
#Boot30
pwd://coreOS.sm -> Core OS için
pwd://vxSysLib.sm -> Sanırım Partition OS için
pwd://configRecord.reloc
pwd://partition1.sm -> Benim partitionım için
pwd://partition2.sm -> Benim partitionım için
Buradaki soruda ağdan ftp ile indirilen yazılımı boot ederken verdiği çıktı var. boot device : mottsec ethernet arayüzünü kullanarak boot et anlamına geliyor sanırım.
ctype.h dosyasında tanımlı olan isLower() benzeri karakterlerle ilgili olan metodların çalışabilmesi için lazım. Örnek:
__ctypePtrGet() meodu vThreadsData.h dosyasında tanımlı. Bu yüzden bu dosyayı da #include <vThreadsData.h> satırı ile include etmek gerekiyor. Buradaki ve buradaki örneklerde görüldüğü gibi, ctype.h dosyasında extern olarak tanmlı olan bir değişkeni, kendi kaynak dosyamızda tanımlamak ve ilklemek gerekiyor. Sebebini ben de çok anlamadım ancak, gördüğüm örnekler böyleydi.
taskLock
taskLock() kilit bırakılıncaya kadar başka bir şeyin çalışmasına müsade etmez. Ancak burada problemli olduğu yazıyor. Sebebi ise açıklanmamış.
CDF Dosyaları
Module OS içindeki cdf dosyası derlenecek sürücü hakkında bilgi verir. CDF dosyasının içi:
CONFIGLETTES : Sürücünün kaynak kodunu içeren dosyaların isimleri.
INIT_RTN : Sürücünü etkinleşmesi için çağırılacak ilk metodun ismi
PROTOTYPE: İlk metodun imzası. Örnek: void myDriverInit(void);
Fault Tolerant Software
Kavramlar
Patterns for Fault Tolerant Software kitabında Fault Tolerance'ı açıklamak için 3 kavram kullanılmış. Bunlar birbirleri ile ilintili.
Fault (Hata) -> Error (Türkçesi Nedir ? Yanlış?)-> Failure (Başarısızlık)Kitapta verilen örneklerden birinde fatura hesaplarken yanlış fatura çıkması bir Failure, başarısızlığa sebep ise hatalı CDR gelmesi (Fault) ve hatalı CDR'ın hesaba geçirilmesi (Error) olarak tanımlanmış.Örneğin metni aşağıda.
A misrouted telephone call is an example of a failure. Telephone system requirements specify that calls should be delivered to the correct recipient. When a faulty system prevents them from being delivered correctly, the system has failed. In this case the fault might have been an incorrect call routing data being stored in the system. The error occurs when the incorrect data is accessed and an incorrect network path is computed with that incorrect data.
The preparation of an incorrect bill for service is another example of a failure.The system requirements specify that the customer will be accurately charged for service received. A faulty identifi cation received in a message by a billing system can result in the charges being erroneously applied to the wrong account. The fault in this case might have been in the communications channel (a garbled message),or in the system component that prepares the message for transmission. The error was applying the charges to the wrong account. The fact that the customer receives an incorrect charge is the failure, since they agreed with the carrier to pay for the service that they used and not for unused service.
A fault is the defect that is present in the system that can cause an error. It is the actual deviation from correctness.
An error is the incorrect behavior from which a failure may occur. Erros can be categorized into two types : timing or value
A failure is system behavior that does not conform to the system specification.Detection Patterns
Detection Patterns başlığı altında eğer hatadan kurtulmak mümkün değilse Fail Silent'ın tercih edilmesi önerilmiş.
The most desirable means of failure handling in a computing system is when the error is detected automatically and corrected before it beceoms a failure. If this is not possible and a failure occurs, then the next most favorable are the Fail Silent and then the Crash Failure mode.
Fail Silent Nedir ?
A Fail-Silent failure is one in which the failing unit either presents the correct result or no result at all. A Crash Failure is one where the unit stops after the first silent failure.
Fail Silent Durumu İletilir mi ?
Bir başka paragrafta ise Fail Silent moduna giren birimin, durumunu başka birimlere bildirmemesi gerektiği anlatılmış.
When failing silently the erroneous element immediately stops processing without corrupting any of its peers. To ensure peers do not corrupt other peers through the error propagating, the failing element stops without informing them that it is stopping. The problem of detecting that an element has stopped functioning is a totally different and easier problem than the problem of determining if an element has stopped operating correctly.
VME
Askeri havacılıkta kullanılan sistemler bazen güçlendirilmiş VME kasa içine konulup, hava aracına takılıyor. Aşağıda sökmesi takması ve taşıması kolay olan ruggidized vme için bir örnek şekil var.
Hiç yorum yok:
Yorum Gönder