Articles of linux kernel

Justificación del contenedor_de macro en linux / list.h

En la implementación de las listas del kernel de Linux en /include/linux/list.h , ¿cuál es la razón de ser de la primera línea (pegada a continuación) del container_of macro? const typeof( ((type *)0)->member ) *__mptr = (ptr); En un ejemplo de código mío, eliminé esta línea y cambié la definición a #define container_of(ptr, type, member) […]

¿Cómo acceder a mmaped / dev / mem sin colapsar el kernel de Linux?

Tengo un progtwig simple que intenta acceder a la memoria física en el espacio de usuario, donde el núcleo almacena la primera página de la estructura. En una máquina de 64 bits, esta dirección es: dirección virtual del kernel: ffffea0000000000 dirección física: 0000620000000000 Estoy intentando acceder a esta dirección física a través de mmap en […]

Cómo mapear un buffer del kernel de Linux al espacio del usuario?

Digamos que el buffer se asigna usando un esquema basado en página. Una forma de implementar mmap sería usar remap_pfn_range pero LDD3 dice que esto no funciona para la memoria convencional. Parece que podemos evitar esto marcando las páginas reservadas utilizando SetPageReserved para que se bloquee en la memoria. Pero, ¿no es toda la memoria […]

función de gato llamando a read () tiempos infinitos

Estoy trabajando en el controlador de dispositivo de carácter simple. He implementado funciones de lectura y escritura en el módulo, el problema es que cuando trato de leer el archivo del dispositivo usando cat /dev/devicefile , entra en un ciclo infinito, es decir, lee los mismos datos repetidamente. ¿Alguien puede sugerirme alguna solución a este […]

¿Cuál es la función de “(void) (& _min1 == & _min2)” en la macro mínima en kernel.h?

En kernel.h min se define como: #define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) No entiendo cuál es la línea (void) (&_min1 == &_min2); hace. ¿Es algún tipo de comprobación de tipo o algo así?

Comprender container_of macro en el kernel de Linux

Cuando estaba explorando el kernel de Linux, encontré una macro container_of que se define de la siguiente manera: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr – offsetof(type,member) );}) Entiendo qué hace container_of do, pero lo que no entiendo es la última oración, que […]

¿Hay alguna API para determinar la dirección física de la dirección virtual en Linux?

¿Hay alguna API para determinar la dirección física de la dirección virtual en el sistema operativo Linux?

¿Cuál es la diferencia entre vmalloc y kmalloc?

Busqué en Google y descubrí que la mayoría de las personas abogaban por el uso de kmalloc , ya que se garantiza que obtendrás bloques físicos contiguos de memoria. Sin embargo, también parece que kmalloc puede fallar si no se puede encontrar un bloque físico contiguo que desee. ¿Cuáles son las ventajas de tener un […]

¿Qué es “: – !!” en código C?

Me topé con este extraño código de macro en /usr/include/linux/kernel.h : /* Force a comstacktion error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used eg in a structure initializer (or where-ever else comma expressions aren’t permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); […]

¿Cómo saber el intervalo de tiempo del progtwigdor de Linux?

Estoy buscando el valor del segmento de tiempo (o quantum) de mi kernel de Linux. ¿Hay un archivo /proc que expone tal información? (O) ¿Está bien definido en el encabezado de Linux de mis distribuciones? (O) ¿Hay una función C de la API de Linux (tal vez sysinfo) que expone este valor? Gracias por adelantado.