Articles of linux kernel

Qui appelle la fonction «sonde» dans le code du conducteur?

J’essaie de comprendre ce code de pilote de mcspi pour omap2 panda board. Je ne comprends pas qui appelle la fonction de probe et quelle est la chaîne d’appels dans ce code de pilote? Comment le pilote est-il informé lorsque le périphérique est connecté?

Abstruse #define macro rencontrée dans la source du kernel Linux

Le get marcro get_cpu_var qui est défini comme suit 29 #define get_cpu_var(var) (*({ \ 30 extern int simple_identifier_##var(void); \ 31 preempt_disable(); \ 32 &__get_cpu_var(var); })) Cela me semble incompréhensible. Je suppose qu’il s’agissait d’un type de macro de fonction renvoyant un pointeur de variable (basé sur l’astérisque) ou d’un type de pointeur de fonction.Je suis […]

Comment fonctionne CLFLUSH pour une adresse qui n’est pas encore en cache?

Nous essayons d’utiliser l’instruction Intel CLFLUSH pour vider le contenu du cache d’un processus sous Linux dans l’espace utilisateur. Nous créons un programme C très simple qui accède d’abord à un grand tableau, puis appelle CLFLUSH pour vider l’espace adresse virtuel de tout le tableau. Nous mesurons le temps de latence nécessaire à CLFLUSH pour […]

Lecture et écriture de l’implémentation d’opération atomique dans le kernel Linux

Récemment, j’ai examiné l’implémentation dans le kernel Linux d’une lecture et d’une écriture atomiques et quelques questions ont été soulevées. Commençons par le code correspondant de l’architecture ia64: typedef struct { int counter; } atomic_t; #define atomic_read(v) (*(volatile int *)&(v)->counter) #define atomic64_read(v) (*(volatile long *)&(v)->counter) #define atomic_set(v,i) (((v)->counter) = (i)) #define atomic64_set(v,i) (((v)->counter) = (i)) […]

RDTSCP versus RDTSC + CPUID

Je fais des timings du kernel Linux, en particulier dans le chemin de traitement des interruptions. J’utilise RDTSC pour les chronomètres, mais j’ai récemment appris que ce n’était pas nécessairement exact, car les instructions pourraient être erronées. J’ai alors essayé: RDTSC + CPUID (dans l’ordre inverse, ici) pour vider le pipeline et encourt jusqu’à 60 […]

Différence entre LIST_HEAD_INIT et INIT_LIST_HEAD

J’essaie de comprendre l’API de liste liée du kernel Linux. Selon la liste liée du kernel Linux, je devrais initialiser la tête de liste avec INIT_LIST_HEAD mais ici (programme du kernel Linux), il est suggéré d’utiliser LIST_HEAD_INIT place. Voici un code de travail que j’ai écrit, mais je ne suis pas sûr de l’avoir fait […]

À quoi sert le modificateur ‘asmlinkage’?

J’ai lu qu’il est utilisé pour les fonctions qui implémentent les appels système sous Linux. Par exemple: asmlinkage long sys_getjiffies( void ) { return (long)get_jiffies_64(); } et qu’il indique au compilateur de transmettre tous les arguments de la fonction sur la stack. Mais n’est-ce pas déjà le cas? Les arguments de fonction sont généralement passés […]

Android: Killing (tous) Premier plan en cours d’exécution App

Je cherche un moyen de supprimer l’application Dalvik de premier plan (en cours d’exécution) à partir du kernel Linux (à l’aide de son ID de processus)? Comment puis-je atteindre cet objective? des idées? Le kernel voit-il le pid d’une application en cours d’exécution? Comment fait par exemple. gestionnaire de processus / gestionnaire de tâches dans […]

Activation et test de la boucle locale pour UART

J’essaie de faire des tests de boucle interne UART et de proposer les modifications ci-dessous. #include #include #include #include #include #include #include #include #include #define CCSR_BASE 0xfe000000 #define UART1_BASE 0x11c000 #define UART1_LEN 0x1000 static volatile unsigned long *uartReg = MAP_FAILED; /* Map in registers. */ static unsigned long *initMapMem(int fd, unsigned long addr, unsigned long […]

Si je n’ai que l’adresse physique du tampon de périphérique (PCIe), comment puis-je mapper ce tampon sur l’espace utilisateur?

Si je ne dispose que de l’adresse physique de la mémoire tampon sur laquelle est mappée la mémoire tampon du périphérique via la barre PCI-Express BAR, comment puis-je mapper cette mémoire tampon sur l’espace utilisateur ? Par exemple, à quoi le code devrait-il normalement ressembler dans le kernel Linux? unsigned long long phys_addr = …; […]