Question

I ai un pilote de périphérique Linux qui assure l'interface pour un dispositif qui, en théorie, peut effectuer DMA en utilisant des adresses de 64 bits. Je voudrais tester pour voir que cela fonctionne réellement.

Y at-il un moyen simple que je peux forcer une machine Linux de ne pas utiliser toute la mémoire ci-dessous l'adresse physique 4G? Il est OK si l'image du noyau est en mémoire basse; Je veux juste être en mesure de forcer une situation où je connais tous mes tampons alloués dynamiquement, et tous les tampons du noyau ou utilisateur attribués pour moi ne sont pas adressables en 32 bits. C'est un peu de force brute, mais serait plus complet que tout ce que je peux penser.

Cela devrait me aider à attraper (1) du matériel qui n'a pas été correctement configuré ou chargé avec l'adresse complète (ou est tout simplement cassé) ainsi que (2) l'utilisation accidentelle et inutile de tampons de rebond (parce qu'il n'y a nulle part où rebond à).

précisions : Je suis en x86_64, donc je ne se soucient pas de la plupart des anciens 32 bits questions d'adressage. Je veux juste tester qu'un pilote peut se connecter correctement avec une multitude de tampons en utilisant des adresses physiques 64 bits.

Était-ce utile?

La solution

/usr/src/linux/Documentation/kernel-parameters.txt

        memmap=exactmap [KNL,X86] Enable setting of an exact
                        E820 memory map, as specified by the user.
                        Such memmap=exactmap lines can be constructed based on
                        BIOS output or other requirements. See the memmap=nn@ss
                        option description.

        memmap=nn[KMG]@ss[KMG]
                        [KNL] Force usage of a specific region of memory
                        Region of memory to be used, from ss to ss+nn.

        memmap=nn[KMG]#ss[KMG]
                        [KNL,ACPI] Mark specific memory as ACPI data.
                        Region of memory to be used, from ss to ss+nn.

        memmap=nn[KMG]$ss[KMG]
                        [KNL,ACPI] Mark specific memory as reserved.
                        Region of memory to be used, from ss to ss+nn.
                        Example: Exclude memory from 0x18690000-0x1869ffff
                                 memmap=64K$0x18690000
                                 or
                                 memmap=0x10000$0x18690000

Si vous ajoutez memmap=4G$0 aux paramètres de démarrage du noyau, plus de 4 Go de mémoire physique ne sera plus accessible. En outre, votre système ne démarrera plus ... mais une certaine variation des présentes (memmap=3584M$512M?) Peut permettre de suffisamment de mémoire ci-dessous pour le système de 4 Go pour démarrer, mais ne suffit pas que les tampons DMA de votre pilote seront alloués là.

Autres conseils

IIRC il y a une option dans la configuration du noyau pour utiliser les extensions PAE qui vous permettront d'utiliser plus de 4 Go (je suis un peu rouillé sur la configuration du noyau - dernier noyau I recompilé était 2.6.4 - donc s'il vous plaît excuser mon manque de rappel ). Vous ne savez comment déclencher une configuration du noyau

make clean && make menuconfig

Hope this helps, Meilleures salutations, Tom.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top