GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je réserver un bloc de mémoire à partir du noyau Linux ?

Si vous voulez que le système d'exploitation soit totalement ignorez-le, vous devez faire un trou de mémoire en utilisant "memmap ." Voir cette référence. Par exemple, si vous voulez 512M à la barrière de 2 Go, vous pouvez mettre "memmap=512M$2G " sur la ligne de commande de votre noyau.

Vous devrez vérifier votre dmesg pour trouver un trou contigu à voler afin de ne piétiner aucun appareil ; qui est spécifique à votre carte mère + cartes.

Ce n'est pas la manière recommandée de faire les choses - voir la réponse de Warren Young pour savoir comment le faire correctement (pilotes du noyau + DMA). Je réponds exactement à la question que vous avez posée. Si vous prévoyez de faire cela pour les utilisateurs finaux, ils vont détester vous si vous leur faites ça... croyez-moi, c'est la seule raison pour laquelle je connaissais cette réponse.

Modifier :si vous utilisez grub2 avec grubby (par exemple, CentOS 7), vous devez vous assurer d'échapper au $. Il devrait y avoir un seul \ avant $ . Exemple :

$ sudo -v
$ sudo grubby --update-kernel=ALL --args=memmap='128M\\$0x57EF0000'
$ sudo grubby --info $(sudo grubby --default-kernel) | grep memmap
args="ro crashkernel=auto ... memmap=128M\$0x57EF0000"

Ce que vous demandez s'appelle DMA. Vous devez écrire un pilote pour réserver cette mémoire.

Oui, je me rends compte que vous avez dit que vous ne vouliez pas que le système d'exploitation intervienne et qu'un pilote fasse partie du système d'exploitation, mais en l'absence de réservation de pilote, le noyau pense que toute la mémoire lui appartient. (À moins que vous ne disiez au noyau d'ignorer le bloc de mémoire, selon la réponse d'Aaron, c'est-à-dire.)

Le chapitre 15 (PDF) de "Linux Device Drivers, 3/e" par Rubini, Corbet et Kroah-Hartmann couvre le DMA et des sujets connexes.

Si vous voulez une version HTML de ceci, j'ai trouvé la deuxième édition du chapitre ailleurs en ligne. Attention, la 2e édition a maintenant plus de dix ans, étant sortie lorsque le noyau 2.4 était nouveau. Il y a eu beaucoup de travail sur le sous-système de gestion de la mémoire du noyau depuis ces jours, il se peut donc qu'il ne s'applique plus très bien.


Pour réserver un bloc de mémoire à partir du noyau sous Linux basé sur ARM, vous pouvez également utiliser un reserved-memory noeud dans votre fichier d'arborescence de périphériques (dts). Dans la documentation du noyau (voir ici), il y a un exemple :

memory {
    reg = <0x40000000 0x40000000>;
};

reserved-memory {
    #address-cells = <1>;
    #size-cells = <1>;
    ranges;

    /* global autoconfigured region for contiguous allocations */
    linux,cma {
        compatible = "shared-dma-pool";
        reusable;
        size = <0x4000000>;
        alignment = <0x2000>;
        linux,cma-default;
    };

    display_reserved: [email protected] {
        reg = <0x78000000 0x800000>;
    };

    multimedia_reserved: [email protected] {
        compatible = "acme,multimedia-memory";
        reg = <0x77000000 0x4000000>;
    };
};

Linux
  1. Linux - Comment déterminer quel module corrompt le noyau ?

  2. Comment enregistrer la consommation de mémoire sous Linux ?

  3. Comment un noyau Linux peut-il être si petit ?

  4. Comment puis-je copier un dossier à partir de la ligne de commande Linux ?

  5. Comment puis-je répertorier les attributs d'utilisateur Active Directory à partir d'un ordinateur Linux ?

Comment le noyau Linux gère les interruptions

Comment compiler un noyau Linux au 21e siècle

Comment construire le noyau Linux à partir de zéro {Guide étape par étape}

Comment vérifier la version du noyau sous Linux

Comment construire le noyau Linux à partir de zéro

Comment compiler le noyau Linux à partir de la source pour créer un noyau personnalisé