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é?
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 […]
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 […]
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)) […]
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 […]
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 […]
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 […]
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 […]
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 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 = …; […]