Veo que se utilizan tipos de datos u8 u16 u32 u64 en el código del kernel. Y me pregunto por qué es necesario usar u8 o u16 o u32 o u64 y no unsigned int .
A menudo, cuando se trabaja cerca del hardware o cuando se intenta controlar el tamaño/formato de una estructura de datos, es necesario tener un control preciso del tamaño de los números enteros.
En cuanto a u8 vs uint8_t , esto se debe simplemente a que Linux es anterior a que <stdint.h> esté disponible en C, que técnicamente es un C99-ismo, pero en mi experiencia está disponible en la mayoría de los compiladores modernos, incluso en sus modos ANSI-C/C89.
Agregando mis 10 centavos a esta respuesta :
u64 significa un valor de '64 bits sin firmar', por lo que, dependiendo de la arquitectura en la que se ejecutará o compilará el código, debe definirse de manera diferente para que realmente tenga una longitud de 64 bits.
Por ejemplo, en una máquina x86, un unsigned long 64 bits, por lo que u64 para esa máquina podría definirse de la siguiente manera:
typedef unsigned long u64;
Lo mismo se aplica para u32 . En una máquina x86, el unsigned int tiene una longitud de 32 bits, por lo que u32 para esa máquina podría definirse de la siguiente manera:
typedef unsigned int u32;
Por lo general, encontrará la declaración typedef para estos tipos en un archivo types.h que corresponde a la arquitectura en la que está compilando su código fuente.