¿Cómo implementar la función ioctl en el sistema Linux?

  
                

La función ioctl se usa principalmente para controlar dispositivos de E /S. Puede implementar el método común de espacio de usuario para intercambiar datos con el kernel. ¿Cuáles son las funciones de la función ioctl en Linux? La siguiente pequeña serie le presentará el uso específico de la función ioctl en Linux.

Linux kernel concepto

Linux es el más popular núcleo del sistema operativo del ordenador libre. Es un sistema operativo similar a Unix escrito en C y que cumple con el estándar POSIX. Linux fue desarrollado por primera vez por el hacker finlandés Linus Torvalds para tratar de proporcionar un sistema operativo tipo Unix gratuito y gratuito en la arquitectura Intel x86. El programa comenzó en 1991, con la ayuda de los piratas informáticos de Minix al principio del programa, y ​​hoy en día, innumerables programadores de todo el mundo están ayudando al programa de forma gratuita. Técnicamente hablando, Linux es un núcleo. "Kernel" se refiere a un software de sistema que proporciona hardware de capa de abstracción, control de disco y sistema de archivos, multitarea y más. Un kernel no es un sistema operativo completo. Un sistema operativo completo basado en el kernel de Linux se llama sistema operativo de Linux, o GNU /Linux.

La función ioctl está en el controlador, porque no sé si hay otras ocasiones en las que se utiliza ioctl, por lo que se especifica el alcance de nuestra discusión. ¿Por qué quieres escribir un artículo? Es porque estaba confundido por ioctl hace un tiempo. Solo lo descubrí en unos días, así que limpié mi mente aquí.

Primero, que es ioctl.

ioctl es una función en el controlador de dispositivo que administra los canales de E /S del dispositivo. La llamada gestión de canales de E /S consiste en controlar algunas de las características del dispositivo, como la velocidad de transmisión del puerto serie, la velocidad del motor, etc. El número de llamadas es el siguiente:

int ioctl (int fd, ind cmd, …);

donde fd es el identificador de archivo que devuelve la función open cuando el programa de usuario abre el dispositivo, cmd Es el comando de control del programa de usuario al dispositivo. En cuanto a los siguientes puntos suspensivos, se trata de algunos parámetros complementarios, generalmente uno como máximo, con o sin el significado de cmd.

La función ioctl es un componente de propiedad en la estructura del archivo. Es decir, si su controlador proporciona soporte para ioctl, el usuario puede usar la función ioctl en el programa del usuario para controlar el canal de E /S del dispositivo.

En segundo lugar, la necesidad de ioctl

Si no necesita ioctl, también puede controlar el canal de E /S del dispositivo, pero está bastante limitado. Por ejemplo, podemos verificar si hay un flujo especial de datos contratados al implementar la escritura en el controlador, si existe, luego seguir el comando de control (generalmente se realiza en la programación de socket). Sin embargo, si lo hace, provocará una división de código desconocida, un programa confuso y el programador estará mareado.

Por lo tanto, usamos ioctl para implementar la función de control. Tenga en cuenta que lo que hace el programa de usuario es decirle al conductor qué quiere hacer con el código de comando. En cuanto a cómo interpretar estos comandos y cómo implementarlos, esto es lo que hace el controlador.

Tercero, cómo lograr ioctl

Este es un problema muy problemático, puedo salvar la provincia. Para dejarlo en claro, no se pueden decir cuatro o cinco mil palabras, por lo que no puedo dejarlo muy claro aquí, pero si los lectores están interesados ​​en cómo el programa de usuario está relacionado con el controlador, puede verme antes. El "Misterio de la Escritura" escrito por el público. El lector simplemente reemplaza la escritura con ioctl y sabe cómo el programa ioctl del usuario está asociado con la implementación ioctl en el controlador.

Estoy aquí para decir una idea general, porque creo que el libro "Controladores de dispositivos Linux" ha sido muy claro, pero tomará algún tiempo mirarlo.

En el cuerpo de la función ioctl implementada en el controlador, en realidad hay una estructura de switch {caso}, cada caso corresponde a un código de comando, para realizar algunas operaciones correspondientes. Cómo lograr estas operaciones, este es el propio negocio del programador, porque el equipo es específico, no hay manera de decirlo. La clave es cómo organizar el código de comando, porque el código de comando en ioctl es la única manera de contactar a los comandos del programa de usuario y al soporte del controlador.

La organización del código de comando es algo exquisita, ya que debemos hacer una correspondencia uno a uno entre el comando y el dispositivo, para que el comando correcto no se envíe al dispositivo incorrecto, o el error será El comando se envía al dispositivo correcto o el comando incorrecto se envía al dispositivo incorrecto. Estos errores pueden llevar a cosas impredecibles, y cuando el programador encuentra estas cosas extrañas, es muy difícil depurar el programa para encontrar el error.

Entonces, en el kernel de Linux, defina un código de comando como este:

____________________________________

Copyright © Conocimiento de Windows All Rights Reserved