Red de conocimiento informático - Consumibles informáticos - Al hacer una pregunta sobre la programación de controladores en Linux integrado, hay un módulo static int _init embed_hello_init (void)

Al hacer una pregunta sobre la programación de controladores en Linux integrado, hay un módulo static int _init embed_hello_init (void)

1) embed_hello_init no es un nombre de estructura, sino un nombre de función

2) Parte int _init, int representa el tipo de valor de retorno de la función, que es un número entero

Deducción Mire _init, static int embed_hello_init (void) es para definir una función estática sin parámetros y el valor de retorno es un número entero. Estos conceptos no tienen nada que ver con Linux integrado o controladores. Son conceptos de sintaxis de C.

Volviendo a _init, esta es una macro especial para la programación del kernel de Linux. La expansión es una sintaxis de atributo extendido de gcc que limita la sección donde se coloca el archivo elf cuando se vincula la función.

La definición es aproximadamente la siguiente (las diferentes versiones del kernel pueden diferir):

#define __init __attribute__((__section__(".init")))

Al poner La función init se limita a una sección fija. Una función es simplemente atravesar la sección y llamar a la función de inicialización al inicio. La otra función es liberar inmediatamente el espacio ocupado por la sección para el uso del sistema una vez completada la inicialización. porque la función de inicialización generalmente solo se ejecuta una vez después del inicio del sistema).