Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

LINUXÏÂUSB1.1É豸ѧϰС¼Ç(4)_uhci(2)


 
LINUXÏÂUSB1.1É豸ѧϰС¼Ç(4)_uhci(2)
 
À´Ô´: ChinaUnix²©¿Í ¡¡ÈÕÆÚ£º 2009.03.14 16:44¡¡(¹²ÓÐÌõÆÀÂÛ) ÎÒÒªÆÀÂÛ
 
ºÃ~ ÏÖÔÚÍòʾ㱸,ֻǷuhciÓ²¼þµÄ×¢²áÁË
ÏÖÔÚ̸һÏÂuhciÓ²¼þµÄ×é³É,uhciµÄÓ²¼þ·ÖΪÁ½¸ö´óµÄ²¿·Ö,Ö÷»ú¿ØÖÆÆ÷ºÍ¸ù¼¯Ï߯÷,ÈçÏÂͼ
µ±Ìá½»uhciÓ²¼þµÄ×¢²áµ½pci×ÜÏߺó,¾­¹ýÒ»ÂÖÆ¥Åä,ÖÕÓÚÕÒµ½ÁËuhci,½øÈëµ½uhci_pci_driver->probeÕâ¸öº¯ÊýÏÂ
usb_hcd_pci_probeÔÚ/drivers/usb/host/uhci-hcd.cÖÐ
int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
struct hc_driver *driver;
struct usb_hcd *hcd;
int retval;
//ÅжÏÄں˲ÎÊýÊÇ·ñÆôÓÃUSB
if (usb_disabled())
  return -ENODEV;
//ÅÐ¶ÏÆ¥Åä±íÊÇ·ñ´æÔÚ,¸Ã±íΪuhci_pci_driver->id_tableÖеÄÄÚÈÝ
if (!id)
  return -EINVAL;
//È¡µÃÆ¥Åä±íÖеÄ˽Óнṹ,Ϊuhci_driver
driver = (struct hc_driver *)id->driver_data;
//˽Óнṹ²»´æÔÚÔò·µ»Ø´íÎó
if (!driver)
  return -EINVAL;
//ʹÄÜpciÉ豸
if (pci_enable_device(dev)  0)
  return -ENODEV;
//ÉèÖõçԴΪÕý³£×´Ì¬
dev->current_state = PCI_D0;
//¼ì²âÊÇ·ñÓÐÖжϺÅ
if (!dev->irq)
{
  dev_err(&dev->dev,"Found HC with no IRQ. Check BIOS/PCI %s setup!\n",pci_name(dev));
  retval = -ENODEV;
  goto err1;
}
//´´½¨usb_hcd½á¹¹
hcd = usb_create_hcd(driver, &dev->dev, pci_name(dev));
//¼ì²â´´½¨ÊÇ·ñ³É¹¦
if (!hcd)
{
  retval = -ENOMEM;
  goto err1;
}
//¼ì²âÊÇ·ñÐèÒªÓ³ÉäI/OÄÚ´æ¿Õ¼ä,EHCIºÍOHCIÕâÁ½¸öÖ÷»ú¿ØÖÆÆ÷ÓÐ×Ô¼ºµÄÄÚ´æ¿Õ¼ä,·ÃÎʵÄʱºòÐèÒªÓ³Éäµ½¼ÆËã»úµÄÄÚ´æ¿Õ¼äÖвÅÄܶÔÉ豸½øÐвÙ×÷,¶øUHCIûÓÐ×Ô¼ºµÄÄÚ´æ¿Õ¼ä,¶ÔUHCIµÄ²Ù×÷ÊǶÔIO¶Ë¿ÚµÄ·ÃÎÊ,ËùÒÔUHCIÐèÒª·ÖÅäIO¶Ë¿Ú¿Õ¼ä
if (driver->flags & HCD_MEMORY)
{
  /* EHCI, OHCI */
  //ÕâÁ½¸öÉ豸ÐèÒªÓ³ÉäI/OÄÚ´æ¿Õ¼ä
  hcd->rsrc_start = pci_resource_start(dev, 0);
  hcd->rsrc_len = pci_resource_len(dev, 0);
  if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len,driver->description))
  {
   dev_dbg


Ïà¹ØÎĵµ£º

linux ÃüÁ½õ

×î½üÔÚLinux×°oracle ÔÚÍøÉÏËÑÁ˵ã×ÊÁϺʹó¼Ò·ÖÏí
linuxÏÂÃüÁîºÍÎļþ¼°Ä¿Â¼Ãû¶¼·Ö´óСд
//²é¿´ÀúÊ·Êý¾Ý
history
history |grep mount
°´"ÉÏϼü"Ñ¡ÒÔǰÇùýµÄÃüÁî
//¿½±´Îļþ
cp /usr/local/tomcat4/temp/func.class /usr/local/tomcat4/webapps/photoblog/WEB-INF/classes/framework/utils/
cp -Rf /photodataold ......

linuxÄÚºËϵãÁÁled(δʹÓÃÖжϰ汾)

Í·Îļþ£º
#ifndef _LED_CONFIG_H
#define _LED_CONFIG_H
#define LED_CON 0
#define LED_ON  1
#define LED_OFF 2
#endif
ÄÚºËÏÂÃæµÄÇý¶¯Ä£¿é£º
#include <linux/module.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/cdev.h>
#include <linux/fs.h> ......

ר·ÃLinuxºËÐĺڿÍÖ®Ò»Robert Love (»¹ÊÇ´óѧʱ´ú)

ÈËÎïר·Ã£ººËÐĺڿÍϵÁÐÖ®Ò»Robert Love ÿ¸öÐÇÆÚ£¬ÎÒÃǶ¼²É·ÃÒ»¸öÄں˱àдÉçÇøµÄÈË£¬ËäÈ»ÕâÑùµÄ²É·Ã»áºÜ²àÖØ¼¼Êõ£¬µ«ÊÇÎÒÃǵÄÁ¢×ãµãÊÇΪÁËÈÃËùÓÐÈ˶¼ÄܽÓÊÜ¡£±¾ÖÜÎÒÃDzɷÃÁËRobert Love£¬ÏÖÔÚËûÕýÔÚά»¤“¿ÉÇÀÕ¼Äں˔µÄÉý¼¶°üºÍÆäËûһЩÊ¡£ËûʹÓÃLinuxÒѾ­7ÄêÁË£¬¶ÔÓÚÏÖÔÚµÄÄÚºËÓкܶ๱Ïס£ËùÓÐÕâЩ×îºóÓÃËû× ......

Linux USB Host ControllerµÄ³õʼ»¯´úÂë¿ò¼Ü·ÖÎö

usb_hcd_omap_probe (const struct hc_driver *driver) (dev/ohci/ohci-omap.c)
ÔÚÄ£¿é³õʼ»¯Ê±±»platform_driver_register()µ÷Óã¬ÓÃÀ´³õʼ»¯Óëohci_hcd_omap_driver
ÏàÆ¥ÅäµÄusbÖ÷¿ØÖÆÆ÷.
->usb_create_hcd(driver); ´´½¨Ò»¸ö´ú±íhost-controllerµÄÊý¾Ý½á¹¹(struct usb_hcd)²¢³õʼ»¯ core/hcd.h
->hcd = kz ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ