????dev_init()?????豸?????????????£?


/*
 * Initialize the DEV module. At boot time this walks the device list and
 * unhooks any devices that fail to initialise (normally hardware not
 * present) and leaves us with a valid list of present and active devices.
 *
 * The PCMCIA code may need to change this a little?? and add a pair
 * of register_inet_device() unregister_inet_device() calls. This will be
 * needed for ethernet as modules support.
 */
 
void dev_init(void)
{
 struct device *dev?? *dev2;

 /*
  * Add the devices.
  * If the call to dev->init fails?? the dev is removed
  * from the chain disconnecting the device until the
  * next reboot.
  */
 
 dev2 = NULL;
 for (dev = dev_base; dev != NULL; dev=dev->next) //???????豸??豸??ev_base?????????豸????
 {
  if (dev->init && dev->init(dev)) //????豸?г???????????????????????????????豸??init()???????????0??
  {
   /*
    * It failed to come up. Unhook it.???????????м??????????????????豸????費(fèi)??????豸?????????
    */
   
   if (dev2 == NULL)
    dev_base = dev->next;
   else
    dev2->next = dev->next;
  }
  else
  {
   dev2 = dev;
  }
 }
}
 


????????????????dev_base???????????ζ??????????????????eth????????巽?????


/* "eth0" defaults to autoprobe (== 0)?? other use a base of 0xffe0 (== -0x20)??
   which means "don't probe".  These entries exist to only to provide empty
   slots which may be enabled at boot-time. */

static struct device eth3_dev = {
    "eth3"?? 0??0??0??0??0xffe0 /* I/O base*/?? 0??0??0??0?? NEXT_DEV?? ethif_probe };
static struct device eth2_dev = {
    "eth2"?? 0??0??0??0??0xffe0 /* I/O base*/?? 0??0??0??0?? eth3_dev?? ethif_probe };
static struct device eth1_dev = {
    "eth1"?? 0??0??0??0??0xffe0 /* I/O base*/?? 0??0??0??0?? eth2_dev?? ethif_probe };

static struct device eth0_dev = {
    "eth0"?? 0?? 0?? 0?? 0?? ETH0_ADDR?? ETH0_IRQ?? 0?? 0?? 0?? eth1_dev?? ethif_probe };

#   undef NEXT_DEV
#   define NEXT_DEV (eth0_dev)
 


???????????eth????????豸??init?????????ethif_probe()???ú???????t????????????????????????? NS8390 ethernet??????????????????????????????????drivers/net/ne.c

????ethif_probe()????????ú???ne_probe()??????????ú??????豸??????м??????ne_probe1()?????????幤????ne_probe1()??????ɡ?