el desarrollo de controladores Linux 1

controladores de Linux en tres categorías: dispositivos de caracteres, dispositivos de bloque, dispositivos de red.

Dispositivos de caracteres: el mismo dispositivo puede ser como un flujo de bytes que se accede, se accede a través de un archivo de dispositivo de caracteres en / dev.

Bloquear dispositivo: de acuerdo con los datos de acceso en unidades de bloques, tal como un 512KB, se accede a través de un nodo de sistema de archivos en / dev que es. La diferencia entre dispositivos de caracteres son diferentes interfaces, además de proporcionar el mismo con las interfaces de dispositivo de caracteres, sino que también proporcionan específicamente para una interfaz de dispositivo de bloque, dispositivo de bloque debe soportar montar sistemas de archivos, aplicaciones típicamente a contenido de acceso en el dispositivo de bloque a través del sistema de archivos en lugar de tratar directamente con el dispositivo de bloque.

dispositivo de red: no utiliza / dev en el nodo del archivo de operar, pero operado por la interfaz eth0 red separada, eth1 similares. Kernel interfaces de red y equipos en un diferentes dispositivos de caracteres y de bloque, un conjunto de funciones especializadas.


Operación del módulo de comando:

1 módulos de carga insmod

   #sudo insmod ./scull.ko

2 se descarga rmmod el módulo

3 listas lsmod los módulos utilizados en la actualidad por el kernel, o cheque / proc / modules archivo

4 depmod Scan / lib / modules / <núcleo versión> / directorio de todos los módulos del núcleo, generando de este modo dependencias / lib / modules / módulo al kernel <kernel versión> /modules.dep

La sonda 5 modprobe depmod modules.dep generados y los módulos del núcleo cargados, nombre del módulo se dan sólo para encontrar un módulo automático de documentos adecuados, las necesidades del módulo que ha de darse el camino insmod

Información básica 6 modinfo archivo Ver módulo

   #sudo modinfo scull.ko


Método de compilar el módulo del kernel:

En primer lugar, para obtener el código fuente del núcleo, y después de kernel compilado con éxito ha sido compilado árbol de origen, es decir, realizado con éxito hacer uImage árbol de fuentes del núcleo. A continuación, después de que el código del controlador de escritura, si el árbol de fuentes del núcleo compilado es esta necesidad de conducir para ejecutar el kernel, puede escribir Makefile para compilar los módulos de código del módulo:

ifeq ($ (KERNELRELEASE),)

  KERNELDIR? = /Work/sysbuild/linux-2.6.22.6

  PWD: = $ (shell pwd)

  $ M = $ módulos (MAKE) $ -C (KERNELDIR) (PWD)

más

  obj-m: = hello.o

terminara si

La ejecución puede hacer

En el que el núcleo de árbol de directorio de origen compilado: /work/sysbuild/linux-2.6.22.6, módulo de obj es hola.o, el compilador genera hello.ko


El ejemplo más simple de módulo:

#include <linux / init.h>

#include <linux / module.h>

MODULE_LICENSE ( "Dual BSD / GPL");

stataic int hello_init (void)

{

  printk ( "hola mundo \ r \ n");

  return 0;

}

hello_exit estática (void)

{

  printk ( "adiós, mundo cruel \ r \ n");

}

module_init (hello_init);

module_exit (hello_exit);


Cuando se pueden pasar los parámetros del módulo de carga, utilizar el module_param macro (nombre de la variable, tipo de variable, los permisos) parámetros de declarar durante parámetros de funcionamiento del módulo de variables aparecerá como un archivo en el directorio / sys, por ejemplo #ls / sys / módulo / hola / parámetros / -l

Los tipos de variables: a corto, ushort, int, uint larga, ulong, charp, bool

Modo de empleo:

static char * chp = "test_char_p";

int num estática = 1;

module_param (num, int, S_IRUGO | S_IWUSR);

module_param (chp, charp, S_IRUGO);

#insmod hello.ko num = 3 chp = "test"


El módulo está integrado en el kernel

1 Asegúrese de que el módulo está funcionando correctamente

archivo de módulo 2 hola.c copia en el directorio especificado del núcleo, por ejemplo, / drivers / char

3 KConfig modificar el directorio especificado y Makefile

   Kconfig: config HOLA tres estados "Nueva hola"

   Makefile: obj - $ (CONFIG_HELLO) + = hola.o

4 reconfigurar la función del núcleo seleccionado será compilado en el núcleo, en lugar del módulo compilado

5 recompilar el kernel para obtener el nuevo núcleo

6 Prueba nuevo kernel, los módulos del núcleo para asegurar una integración exitosa


Ver sistema de equipamiento:

1 Ver controlador de dispositivo de caracteres del sistema, y ​​el conductor número importante de dispositivos de bloque

   #cat / proc / dispositivos

2 Ver el inicio del sistema de información

  #dmesg

3 Ver dispositivo de dirección de memoria física IO

  #cat / proc / iomem

4 Ver número de interrupción se utiliza

  #cat / proc / interrupciones


controladores de dispositivos carácter experimentan:

#insmod ./scull.ko

#cat / proc / devices | grep scull

252 scull

#sudo mknod scull0 c 252 0

#sudo chmod 666 scull0

#cat scull0

#sudo eco prueba >> scull0

#cat scull0

Después de buscar número mayor del dispositivo después de scull.ko carga, crear el dispositivo de archivo de dispositivo (c para un dispositivo de caracteres, 0 representa el primer número de esclavos), cambiar el dispositivo de manipulación atributo de archivo



Publicado 30 artículos originales · ganado elogios 21 · Vistas de 140.000 +

Supongo que te gusta

Origin blog.csdn.net/oushaojun2/article/details/62871412
Recomendado
Clasificación