先总的说明一下数据通路:
ps2KBD -> tty -> m6845 -> m6845WriteString 就写到vga设备上了。
首先系统使用了LOCAL PC_CON_DEV ** ppConsoleList这样的一个指针来记录系统中的PC_CON_DEV设备。这里PC_CON_DEV泛指就是关于vga显示的设备。
首先说一下m6845和vga的挂接:
LOCAL void m6845vxbInstConnect
(
VXB_DEVICE_ID pDev
)
{
M6845_CON_DEV * pDrvCtrl = pDev->pDrvCtrl;
pDrvCtrl->pTyDev = pcConDevBind (pDev->unitNumber,
m6845WriteString, (void *) pDrvCtrl);
}
当到第三阶段初始化时,6845的写函数m6845WriteString和ppConsoleLis的第unitNumber个成员挂接。(这里说一下,这里的6845其实就是vga的驱动文件的简称),代码如下:
TY_DEV * pcConDevBind
(
int arg,
FUNCPTR pFunc,
void * pArg
)
{
if ((arg >= 0) && (arg < consoleListSize))
if (ppConsoleList[arg]->created)
{
if (pFunc != NULL)
{
ppConsoleList[arg]->pWriteFunc = pFunc;
ppConsoleList[arg]->pWriteArg = pArg;
}
return ((TY_DEV *) ppConsoleList[arg]);
}
return (NULL);
}
ps2键盘的第三阶段初始化同样也时挂接:
LOCAL void i8042vxbInstConnect
(
VXB_DEVICE_ID pDev
)
{
KBD_CON_DEV * pDrvCtrl = pDev->pDrvCtrl;
pDrvCtrl->pTyDev = pcConDevBind (pDev-