Step 1.
下载RTL81X9驱动源代码。
Step 2.
复制一个BSP包,并且修改名称,例如,我复制了一个PC486的BSP包,改名为i486bsp,如图所示:
Step 3.
修改复制的BSP里面的Makefile文件,修改文件内容的如下:
TARGET_DIR = i486bsp
MACH_EXTRA =rtl81x9.o ;添加rtl81x9.o到系统中
Step 4.
复制RTL81X9的驱动代码rtl81x9.h、 rtl81x9.c、sysRtl81x9End.c文件到你的bsp包中。
Step 5.
修改BSP包中的Config.h文件。在文件如下部分添加黄色标记的内容
#define INCLUDE_PCI
/* Network driver options */
#define INCLUDE_END /* Enhanced Network Driver Support */
#undef INCLUDE_DEC21X40_END /* (END) DEC 21x4x PCI interface */
#undef INCLUDE_EL_3C90X_END /* (END) 3Com Fast EtherLink XL PCI */
#undef INCLUDE_ELT_3C509_END /* (END) 3Com EtherLink III interface */
#undef INCLUDE_ENE_END /* (END) Eagle/Novell NE2000 interface */
#undef INCLUDE_FEI_END /* (END) Intel 8255[7/8/9] PCI interface */
#undef INCLUDE_GEI8254X_END /* (END) Intel 82543/82544 PCI interface */
#undef INCLUDE_LN_97X_END /* (END) AMD 79C97x PCI interface */
#undef INCLUDE_ULTRA_END /* (END) SMC Elite16 Ultra interface */
#define INCLUDE_RTL_81X9_END
Step 6.
修改ConfigNet.h文件,在文件如下部分添加黄色标记的部分添加:
/* Intel 82543/82544 PCI (gei) driver defines */
#ifdef INCLUDE_GEI8254X_END
#define GEI8254X_LOAD_FUNC sysGei8254xEndLoad
#define GEI8254X_BUFF_LOAN TRUE
#define GEI8254X_LOAD_STR ""
IMPORT END_OBJ * GEI8254X_LOAD_FUNC (char *, void *);
#endif /* INCLUDE_GEI8254X_END */
#ifdef INCLUDE_RTL_81X9_END
#define RTL_81X9_LOAD_FUNC sysRtl81x9EndLoad
#define RTL_81X9_LOAD_LOAN TRUE
#define RTL_81X9_LOAD_STRING ""
IMPORT END_OBJ * RTL_81X9_LOAD_FUNC (char *, void *);
#endif /* INCLUDE_RTL_81X9_END */
END_TBL_ENTRY endDevTbl [] =
{
#ifdef INCLUDE_EL_3C90X_END
{0, EL_3C90X_LOAD_FUNC, EL_3C90X_LOAD_STR, EL_3C90X_BUFF_LOAN,
NULL, FALSE},
#endif /* INCLUDE_EL_3C90X_END */
#ifdef INCLUDE_LN_97X_END
{0, LN_97X_LOAD_FUNC, LN_97X_LOAD_STR, LN_97X_BUFF_LOAN,
NULL, FALSE},
#endif /* INCLUDE_LN_97X_END */
#ifdef INCLUDE_FEI_END
{0, FEI82557_LOAD_FUNC, FEI82557_LOAD_STRING, FEI82557_BUFF_LOAN,
NULL, FALSE},
#endif /* INCLUDE_FEI_END */
#ifdef INCLUDE_DEC21X40_END
{0, END_DC_LOAD_FUNC, END_DC_LOAD_STRING, END_DC_BUFF_LOAN,
NULL, FALSE},
#endif /* INCLUDE_DEC21X40_END */
#ifdef INCLUDE_ELT_3C509_END
{0, END_3C509_LOAD_FUNC, END_3C509_LOAD_STRING, END_3C509_BUFF_LOAN,
NULL, FALSE},
#endif /* INCLUDE_ELT_3C509_END */
#ifdef INCLUDE_ULTRA_END
{0, END_ULTRA_LOAD_FUNC, END_ULTRA_LOAD_STRING, END_ULTRA_BUFF_LOAN,
NULL, FALSE},
#endif /* INCLUDE_ULTRA_END */
#ifdef INCLUDE_ENE_END
{0, END_ENE_LOAD_FUNC, END_ENE_LOAD_STRING, END_ENE_BUFF_LOAN,
NULL, FALSE},
#endif /* INCLUDE_ENE_END */
#ifdef INCLUDE_GEI8254X_END
{0, GEI8254X_LOAD_FUNC, GEI8254X_LOAD_STR, GEI8254X_BUFF_LOAN,
NULL, FALSE},
#endif /* INCLUDE_GEI8254X_END */
#ifdef INCLUDE_RTL_81X9_END
{0, RTL_81X9_LOAD_FUNC, RTL_81X9_LOAD_STRING, RTL_81X9_LOAD_LOAN,
NULL, FALSE},
#endif /* INCLUDE_RTL_81X9_END */
{0, END_TBL_END, NULL, 0, NULL, FALSE}
};
Step 7.
最后,修改sysLib.c文件,在文件中如下部分中添加黄色标示的部分:
/* imports */
IMPORT char end; /* linker defined end-of-image */
IMPORT GDT sysGdt[]; /* the global descriptor table */
IMPORT void elcdetach (int unit);
IMPORT VOIDFUNCPTR intEoiGet; /* BOI/EOI function pointer */
IMPORT void intEnt (void);
IMPORT int sysCpuProbe (void); /* set a type of CPU family */
IMPORT VOID sysUsbOhciPciInit (void); /* USB OHCI Init */
/* include rtl81x9End driver support routines */
#ifdef INCLUDE_RTL_81X9_END
IMPORT STATUS sysRtl81x9PciInit (void);
#endif /* INCLUDE_RTL_81X9_END */
#ifdef INCLUDE_PCI /* BSP PCI bus & config support */
# include "pciCfgStub.c" /* customize pciConfigLib for BSP */
# include "pci/pciConfigLib.c"
# include "pciCfgIntStub.c" /* customize pciIntLib for BSP */
# include "pci/pciIntLib.c"
# if (defined(INCLUDE_PCI_CFGSHOW) && !defined(PRJ_BUILD))
# include "pci/pciConfigShow.c"
# endif /* (defined(INCLUDE_PCI_CFGSHOW) && !defined(PRJ_BUILD)) */
#if (PCI_CFG_TYPE == PCI_CFG_AUTO)
# include "pci/pciAutoConfigLib.c"
# include "sysBusPci.c"
#endif /* (PCI_CFG_TYPE == PCI_CFG_AUTO) */
#endif /* INCLUDE_PCI */
#ifdef INCLUDE_PCMCIA
# include "pcmcia/pccardLib.c"
# include "pcmcia/pccardShow.c"
#endif /* INCLUDE_PCMCIA */
#ifdef INCLUDE_NETWORK
# include "sysNet.c" /* network driver support */
#endif /* INCLUDE_NETWORK */
#ifdef INCLUDE_RTL_81X9_END
#include "sysRtl81x9End.c"
#endif /* INCLUDE_RTL_81X9_END */
#ifdef INCLUDE_PCI
pciConfigLibInit (PCI_MECHANISM_1, PCI_CONFIG_ADDR, PCI_CONFIG_DATA, NONE);
sysPciIntInit (); /* it does pciIntLibInit() */
#ifdef INCLUDE_RTL_81X9_END
sysRtl81x9PciInit ();
#endif /* INCLUDE_RTL_81X9_END */
#endif /* INCLUDE_PCI */
/* initialize the PIC (Programmable Interrupt Controller) */
sysIntInitPIC (); /* should be after the PCI init for IOAPIC */
intEoiGet = sysIntEoiGet; /* function pointer used in intConnect () */
/* initialize PCI devices */
#ifdef INCLUDE_PCI
到此,RTL81X9的驱动程序就添加到你的BSP中去了。