C++ Applications / Downloadable Kernel Modules (DKMs)


Indledning

C++ applikationer til VxWorks kan oprettes som kørende i enten User space (med begrænset adgang til HW) elller i Kernel space (med fuld adgang til HW). I mange professionelle projekter vil man vælge at lave "applikationslaget" af et projekt som en User space-applikation, og kun lade drivere etc. have fuld adgang til HW som en Kernel space-applikation.

User space-applikationer hedder Real-Time Processes. Kernel space-applikationer hedder Downloadable Kernel Modules

I vores tilfælde vil vi som regel vælge at oprette applikationer som VxWorks Downloadable Kernel Module-projekter, altså med fuld adgang til HW. Følg nedenstående procedure:

Oprettelse

For at oprette et DKM, følg nedenstående procedure:
  1. Start Workbench
  2. Opret et nyt ”VxWorks Downloadable Kernel Module Project” (File → New → VxWorks Downloadable Kernel Module Project).
  3. Project: Navngiv projektet. Vælg ”Next”
  4. Project Structure: Fjern eventuelle flueben. Vælg ”Next”
  5. Build Defaults: Vælg ”Next”
  6. Build Support: Vælg ”Next”
  7. Build Specs: Klik ”Deselect All”, vælg derefter PENTIUMdiab og evt. SIMNTdiab. Vælg ”Next”
  8. Build Target: Vælg ”Next”
  9. Indexer: Vælg ”Finish”
  10. Tilføj nye source-filer og editer dem som ønsket.
  11. Build projektet (Højreklik, vælg ”Build Project”)

Eksekvering

Kernemoduler kan enten linkes sammen med et eksisterende image og eksekveres automatisk ved opstart, eller downloades dynamisk til et kørende image og eksekveres fra VxWorks kommandoprompten (anbefales kraftigt til udvikling!)

Dynamisk download

Følg nedenstående procedure for at eksekvere kernemodulet ved dynamisk download (forudsætter at der er forbindelse til target via en Target Server):
  1. Ekspandér "Build Targets"
  2. Højreklik på .out-filen, vælg "Download"
  3. Start applikationen ved at kalde dens startfunktion fra VxWorks-prompten

Statisk build med eksisterende image

Følg nedenstående procedure for at linke til et eksisterende image. Applikation og image bliver ved denne metode buildet sammen til ét image:
  1. Træk projektfolderen for applikationen op på imaget’s projektfolder
  2. I kernens usrAppInit.c indsættes et kald til kernemodulets startfunktion. Denne skal være en C-funktion, evt. med brug af ”#ifdef _cplusplus extern ”C” { #endif <kode> #ifdef _cplusplus } #endif”
  3. Build image-projektet. Dette medfører et rekursivt build af kernemodulet.
  4. Flyt imaget (se VxWorks Image)