驅動程式 - VxWorks - 使用範例 - C/C++ - Hello, world!



參考資訊:
https://zhuanlan.zhihu.com/p/597577575
https://studies.ac.upc.edu/doctorat/ENGRAP/VxWorks-device-drivers.htm
https://forums.windriver.com/t/vxworks-software-development-kit-sdk/43
https://mail.prz-rzeszow.pl/~ssamolej/vxworks/vxworks_kernel_programmers_guide_6.6.pdf
https://d13321s3lxgewa.cloudfront.net/downloads/wrsdk-vxworks7-docs/2309/README_qemu.html
https://learning.windriver.com/path/vxworks7-essentials-workbench-and-tools/vxworks-kernel-shell

main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iosLib.h>

static int drvNum = 0;
static DEV_HDR hdr = {0};

int myProbe(void)
{
    drvNum = iosDrvInstall(NULL, NULL, NULL, NULL, NULL, NULL, NULL);
    iosDevAdd(&hdr, "/dev/hello", drvNum);
    printf("Hello, world!\n");
    return OK;
}

編譯

$ wr-cc main.c -o hello -dkm

執行

-> ld < hello

-> moduleShow
            MODULE NAME             MODULE ID        GROUP #      SEGMENT ADDRESSES
    --------------------------- -------------------- ------- -------------------------
    hello                       0x00ffff800006720500       1 0xffffffff8c5a6000 (TEXT)
                                                             0xffffffff8c5a7000 (DATA)
                                                             0xffffffff8c5a7030 (BSS)

-> myProbe
    Hello, world!

-> devs
    drv refs name
     22 [ 5] /dev/hello
     13 [ 5] /dev/random
     13 [ 5] /dev/urandom
     12 [ 5] /dev/zero
     11 [ 5] /fifos
     16 [ 5] /host.host
     14 [ 5] /input/event
      0 [ 7] /null
      5 [ 5] /ram
     10 [ 5] /ram0
      9 [ 5] /romfs
      3 [ 5] /shm
     10 [ 5] /tmp
      2 [ 7] /ttyS0
    value = 0 = 0x0

-> unld "hello"