Linux device driver base

  

controlador de dispositivo es la interfaz entre el kernel y el hardware de la máquina, el controlador del dispositivo protege los detalles de hardware de la aplicación, de modo que en la vista de la aplicación, el dispositivo de hardware Solo un archivo de dispositivo, una aplicación puede operar en un dispositivo de hardware al igual que un archivo normal. El controlador del dispositivo es parte del núcleo. Sus funciones principales son: inicializar y liberar el dispositivo, transferir datos del núcleo al hardware y leer datos del hardware, leer los datos transmitidos por la aplicación al archivo del dispositivo y devolver la aplicación Los datos solicitados y los errores en los equipos de detección y procesamiento.


Linux divide los dispositivos en dos categorías básicas: uno es un dispositivo de caracteres y el otro es un dispositivo de bloque. La principal diferencia entre un dispositivo de caracteres y un dispositivo de bloque es que la E /S de hardware real suele ocurrir inmediatamente después de que se realiza una solicitud de lectura /escritura al dispositivo de caracteres. Los dispositivos de caracteres realizan operaciones de lectura y escritura secuenciales en un solo byte, generalmente sin almacenamiento en búfer, los dispositivos de bloque se almacenan y leen y escriben con bloques de tamaño fijo, como discos duros, disquetes, etc., y utilizan una memoria del sistema como un búfer. Distrito Para mejorar la eficiencia, el sistema proporciona un mecanismo de almacenamiento en caché para la lectura y escritura de dispositivos de bloque. Debido a los problemas que involucran la administración del búfer, la programación y la sincronización, es mucho más complicado de implementar que los dispositivos de caracteres. Se accede a la pantalla LCD y se administra como un dispositivo de caracteres. Linux trata al controlador de pantalla como un dispositivo de caracteres y envía los datos que se mostrarán al byte byte del controlador LCD.


La administración de dispositivos de Linux está estrechamente integrada con el sistema de archivos. Varios dispositivos se almacenan en el directorio /dev como archivos, llamados archivos de dispositivos. Las aplicaciones pueden abrir, cerrar, leer y escribir estos archivos de dispositivo para completar la operación del dispositivo, al igual que trabajar con archivos de datos normales. Para administrar estos dispositivos, el sistema ha numerado los dispositivos y cada número de dispositivo se divide en un número de dispositivo primario y un número de dispositivo secundario. El número de dispositivo primario se usa para distinguir entre diferentes tipos de dispositivos, mientras que el número de dispositivo secundario se usa para distinguir múltiples dispositivos del mismo tipo. Para dispositivos comunes, Linux tiene un número personalizado, como el número de dispositivo principal del disco duro es 3. Linux proporciona una interfaz de función operativa uniforme para todos los archivos de dispositivo mediante el uso de la estructura de datos struct file_operations. Esta estructura de datos incluye varios punteros a las funciones de operación, como abrir (), cerrar (), leer () y escribir (), pero debido a la variedad de periféricos, la operación es diferente. Los miembros de la estructura Struct file_operations son una serie de funciones de interfaz, como las funciones de lectura /escritura para lectura /escritura y ioctl para control. Abrir un archivo es llamar a la operación abierta en este archivo file_operations. Los diferentes tipos de archivos tienen diferentes funciones miembro de operaciones de archivo, como archivos de datos de disco ordinarios, funciones de interfaz para completar las operaciones de lectura y escritura del bloque de datos de disco, y para varios archivos de dispositivo, la llamada final a la función de E /S en el controlador respectivo para dispositivos específicos La operación De esta manera, la aplicación no tiene que considerar si el dispositivo está funcionando o si es un archivo normal, y puede tratarse como un archivo, con una interfaz de E /S muy clara y unificada. Así que file_operations es una interfaz de E /S a nivel de archivo.

Second Started to write

Usó el método de agregar comentarios en el código, y cargó varios archivos al mismo tiempo, como los amigos pueden descargar como plantilla. Cada archivo está separado por ==

Un total de 3 archivos, 1 archivo de encabezado de controlador, 1 archivo de controlador y un archivo de programa de prueba de controlador

son test.h. , test.c y ledtest.c

Simplemente hable acerca de lo que hace el controlador, cómo hacerlo

1 Controlador de carga del sistema

2 Abra el dispositivo (archivo) en la aplicación < Br>

3 Funcionamiento de la aplicación al dispositivo

4 Dispositivo de cierre de la aplicación (archivo)

5 Dispositivo de apagado del sistema

¿Cómo funciona la aplicación en el dispositivo?

¿Recuerdas cómo escribir archivos en lenguaje C? Es muy similar aquí. Para los dispositivos generales de caracteres (también dispositivos de bloque, dispositivos de red, etc.) Hay tres funciones principales (hay muchos, se pueden ver) llseek lectura: escritura: ioctl: Aquí sólo se ioctl: la función de control, por supuesto, también se puede utilizar para leer y escribir La función opera en el puerto IO, pero ioctl: parece ser más adecuado.

La implementación específica puede ver el archivo ledtest.c.

Principalmente, hay varias funciones en test.c que se encargan de la inicialización y la limpieza, la apertura y el cierre. Y ioctl escribe algunos datos en el registro del puerto serie.

Inicialización y limpieza, hay una oración principal en la función que se abre y se cierra, y los comentarios se han hecho por separado. Solo recuérdalo.

La operación de registro no está sola, debe consultar la hoja de datos 44B0. Ok, veamos el resto del código.

==============================

======== == test.h ==================

===================== =========

/********************************** ****** Copyright (c) **************************************** **********

**


**

** -------------- Archivo Información -------------------------------

** Nombre del archivo: config.h

** Última fecha de modificación: 2006-9-9

** Última versión: 1.0

** Descripciones: Archivo configurable por el usuario

**

** ---------------------------------------------- ------

** Creado por: ZLG CHENMINGJI

** Fecha de creación: 2006-9-9

** Versión: 1.0

** Descripciones: Primera versión

**

** -------------------------- -----------------------

** Modificado por: MAMAJINCO

** Fecha de modificación: 2006-9- 9

** Versión: 1.0

** Descripción: en esta plantilla ZLG fiel a las gracias a mi sentido del origen de esta alta calidad de la programación

**

************************************************ ***** /

//Evita que los duplicados contengan este archivo Ajuste macro

#ifndef __CONFIG_H

#define __CONFIG_H

//incluyen los archivos de cabecera necesarios

#i NCLUDE

# i NCLUDE //archivo de cabecera módulo debe ser incluido
función

#i NCLUDE /* printk (), información para * /

a las salidas principales #i NCLUDE /* contiene importantes la otra estructura de esta estructura file_opration archivo de interfaz de capa * /

#i NCLUDE /* Código de error * /

#i NCLUDE

#i NCLUDE

#i NCLUDE

#i NCLUDE

/***************************** *** /

/* Configuración de la aplicación * /

/************************** ****** /

//siguientes modificaciones

//define el número requerido de nombre de dispositivo maestro

#define LED_MAJOR_NR 231 //231 239 ~ 240 ~ 255.

#define DEVICE_NAME " conducido " /* nombre para la mensajería * /

#define SET_LED_OFF 0

#define SET_LED_ON 1 |

# Endif

/************************ End Of File

********* **************************** /

============= FIN ===============

========== ======== ============

============ test.c ================

==============================

/******** ***** Copyright (c) **************************

Copyright © Conocimiento de Windows All Rights Reserved