VxWorks使用一个双向链表管理所有的设备,每个节点包含以下内容
typedef struct dev_hdr
{
DL_NODE node; /* device linked list node */
const char *name; /* device name */
int drvRefCount;/* counter of concurrent driver invocations */
UINT32 drvRefFlag; /* driver reference flags */
void * pDrvEntry; /* driver table of this device */
FUNCPTR deleteDrv; /* driver called upon device delete */
short drvNum; /* driver number for this device */
} DEV_HDR;
下面的函数实现和devs相同的功能,打印出所有的设备的名字,以及设备使用的驱动号
#include<ioLib.h>
extern DL_LIST iosDvList;
void listDev(void)
{
DEV_HDR * pDevHdr;
for (pDevHdr = (DEV_HDR *) DLL_FIRST (&iosDvList);
pDevHdr != NULL;
pDevHdr = (DEV_HDR *) DLL_NEXT (&pDevHdr->node))
{
printf("pDevHdr->name=%s,drvId=%d\n",pDevHdr->name,pDevHdr->drvNum);
}
}