< < fuga > > episodio tercer trimestre, finalmente, al final de la muy esperada, scofid golpeándolo con una sabiduría se salvó el día, pero en la prisión sona mal cómo iba a escapar? No sabemos esto, pero podemos analizar controlador de red Linux es cómo conseguir que los paquetes de datos a través de esta capa física de interfaz y " la cárcel y " obligado a lograr el propósito de la comunicación :-) I: conocimiento previo de la asignación de memoria de E /S. Aparatos conectados al bus de datos a través del bus de control, el estado del bus y la CPU. El número total de señal de control de transferencia de control, por ejemplo, permitir que la tarjeta de red. Un bus de datos para controlar la transmisión de datos, por ejemplo, tarjetas de transmisión de datos, el número total de estados son generalmente leer el estado actual del dispositivo, tal como la dirección MAC de la tarjeta de lectura. En funcionamiento convencional, el valor leído se consigue mediante un dispositivo se registra. Sin embargo, esto consume reloj de la CPU. Y toma un valor de cada registro debe dispositivo de lectura, lo que resulta en una baja eficiencia. En la moderna
el sistema operativo. Cita mapeo de memoria I /O. Es decir, el valor del registro a la memoria principal del cuerpo mapeado. El funcionamiento de los registros del dispositivo, para convertir el funcionamiento de la memoria principal, mejorando así la eficiencia. Esta es una manera de la DMA en el aparato de procesamiento de datos. método de procesamiento convencional: Cuando un dispositivo recibe los datos, la interrupción informó a la CPU. proceso de interrupción de la CPU, los datos en la memoria. DMA introducido en el sistema operativo moderno significa, el dispositivo de recepción de los datos, los datos se puso a la memoria DMA, la CPU genera una interrupción de nuevo. Esto ahorra una gran cantidad de tiempo de CPU en interrupción suave y NAPI en los sistemas operativos modernos, la velocidad de procesamiento de interrupción se han vuelto cada vez más exigente. En respuesta a las interrupciones que se divide en dos partes, a saber, la mitad superior y la mitad inferior. Empujando la mitad superior de la cola de procesamiento de datos, en respuesta a la interrupción. Y luego completar las tareas que quedan por la mitad inferior de la programación. NAPI es 2.6 introdujo un nuevo concepto, que ocurrió en el momento de la interrupción, deshabilitando las interrupciones. A continuación, procesar los datos. Después de eso, en un momento determinado, tomará la iniciativa si hay datos para ser procesados por la consulta dispositivo. I /O, DMA se discutirá en linux2.6.21 implementadas en el posterior análisis del código. NAPI conocimiento detallado y suave interrupción interrumpirá la manipulación en el momento del análisis, y once a ustedes dos: Hablando desde el controlador de la tarjeta de red. En el Ejemplo Intel controlador 100M NIC recibe una breve visión general de la transmisión de flujo de paquetes. Ver el código (drivers /net /e100.c) tarjeta es un dispositivo PCI pertenece, su inscripción en el registro promedio de dispositivo PCI no es diferente. e100_init_module static int __init (void) {if (((1 < < debug) - 1) &NETIF_MSG_DRV) {printk (KERN_INFO PFX "% s,% s \\ n ", DRV_DESCRIPTION, DRV_VERSION); printk (KERN_INFO PFX "% s \\ n ", DRV_COPYRIGHT);} //registrar PCIreturn pci_module_init (&e100_driver);} donde e100_driver correspondió a pci_driver.static e100_driver struct pci_driver = {//NIC nombre de controlador correspondiente .name = DRV_NAME, //tipo de concordancia .id_table = e100_id_table, //función de detección de .probe = e100_probe, //función quitar, esta función se llama .Remove = __devexit_p (e100_remove) cuando se retira el dispositivo, #ifdef CONFIG_PM.suspend = e100_suspend,. reanudar = e100_resume, #endif}
cuando el número total detectada dispositivo PCI cumple con los parámetros e100_id_table serán llamados e100_probe, inicializar el dispositivo se inició en e100_probe en: static int __devinit e100_probe (struct pci_dev * pdev, const struct pci_device_id * ent) {struct net_device * netdev; struct nic * nic; int err; //asignar y asignar //alloc_etherdev net_device función de distribución net_device para la interfaz Ethernet. Es alloc_netdev función de contenedor si {if (((1 < < depuración) - 1) &NETIF_MSG_PROBE) (! (Netdev = alloc_etherdev (sizeof (nic struct)))) printk (KERN_ERR PFX " fallido Etherdev alloc ., abortar \\ n "); -ENOMEM retorno;}
//valor inicial del puntero de función en netdev netdev- > = abrir e100_open; netdev- > stop = e100_close; netdev- > //el ethtool soporte de la herramienta; hard_start_xmit = e100_xmit_frame; netdev- > get_stats = e100_get_stats; netdev- > set_multicast_list = e100_set_multicast_list; netdev- > set_mac_address = e100_set_mac_address; netdev- > change_mtu = e100_change_mtu; netdev- > do_ioctl = e100_do_ioctl SET_ETHTOOL_OPS eficaces (netdev, &e100_ethtool_ops); netdev- > tx_timeout = e100_tx_timeout; netdev- > watchdog_timeo = E100_WATCHDOG_PERIOD; //función de sondeo netdev- > sondeo = e100_poll; netdev- > peso = E100_NAPI_WEIGHT; #ifdef CONFIG_NET_POLL_CONTROLLERnetdev - > = poll_controller e100_netpoll; #endif //obtener net_device área de datos privada, y su asignación
//tamaño de los datos privados es alloc_ etherdev () parámetro especificado nic = netdev_priv (netdev); NIC- > netdev = netdev; NIC- > PDEV = PDEV; NIC- > msg_enable = (1 < < debug) - 1; pci_set_drvdata (PDEV , netdev); //prepararse para la tarjeta después de la DMA de inicio, I /O de memoria mapeado control de registro //en realidad está asignado a PCI logrado si ((err = pci_enable_device (PDEV))) {DPRINTK (sonda. , ERR, ". no se puede habilitar el dispositivo PCI, abortando \\ n ");
Linux ha creado un entorno amigable que nos da la posibilidad de elegir. Por ejemplo, la mayoría d
En los problemas de seguridad de la red cada vez más importantes de la actualidad, ¿cómo garantizar
Al leer un apue, la explicación del área de almacenamiento compartido es inútil. Por esta razón, e
STM32 tres medios de almacenamiento correspondientes de modo de arranque son tres incorporados en mo
Detalles del desarrollo del controlador de Linux
Enlace de tarjeta de red dual de Linux (enlace) para equilibrio de carga o failover
Utilización real de la memoria de consulta de Linux
Linux, dos alternativas simples al software "shell de maní"
Cómo hacer falta de espacio en el disco, método de limpieza del disco de Linux
El formato detallado de partición de Linux y Win
Cómo encontrar conflictos de direcciones IP en Linux
¿Cuál es la razón del sistema operativo Linux no necesita desfragmentación es?
¿Cuál es la diferencia entre Linux y BSD?
El sistema Win10 abre un comando del sistema truco
¿Cómo libera Win7 la velocidad?
Explicar los servicios que se pueden desactivar en Windows XP
¿Cómo mejorar el rendimiento del sistema win7? Se introdujeron las habilidades de uso de Win7.
¿Linux le pregunta cuando usa Mkdir no puede crear el directorio 'prueba'?
El sistema Win7 Ultimate se debe volver a cargar en cuatro casos
Evite que los niños tengan problemas con la computadora Ocultar el gráfico del disco C tutorial
¿Cómo instalar el paquete de idioma chino para Win10 11103 versión en inglés?