accéder à la mémoire physique du noyau linux
Peut-on accéder à toute la mémoire physique par le biais de certains de code noyau.? Parce que, j'ai écrit un pilote de périphérique qui n'avait de init_module et exit_module.. le code est le suivant.
int init_module(void) {
unsigned char *p = (unsigned char*)(0x10);
printk( KERN_INFO "I got %u \n", *p);
return 0;
}
et un mannequin exit_module.. le problème est que l'ordinateur est accrochée lorsque je fais un lsmod..
Ce qui se passe? Dois-je obtenir un peu certains autorisation d'accès au mem endroit?
m'expliquer.. je suis un débutant!
C'est un très la programmation compliquée région et que vous n'êtes pas susceptible d'obtenir la réponse dont vous avez besoin dans un tel espace est limité. Avez-vous lu toute la documentation dans ce domaine?
oui, je connais les bases.. la question est de savoir si je peux accéder à la mémoire physique comme un pilote de périphérique. Bu pourquoi mon PC freeze.. après tout, je suis juste en train de lire ; pas écrit. ?
Il est probable que l'adresse 0x10 est un registre spécial que vous ne pouvez pas lire. Vous êtes sur dans des eaux dangereuses, ici. L'arbitraire l'accès à la mémoire peut être dangereux pour votre santé.
Même le noyau a pas d'accès direct à la mémoire physique dans votre façon de penser. Fondamentalement, le type de mémoire que vous semblez l'imaginer (mémoire linéaire avec télévision adressage) est quelque chose qui est construit à l' par le noyau (à partir de la mémoire physique banques) et exporté, il n'est pas "exister". Pour connaître ces choses et sur les modalités d'accès sur les différents types d'adresses le noyau peut gérer vous aurait vraiment de regarder plus profondément dans la documentation du noyau. (Aussi une valeur qui n'est pas divisible par 4 est certainement un mauvais choix de s'attendre à une
Ce code n'est pas de tenter d'accéder à la mémoire physique. Qu'il tente d'accéder à un invalide (non cartographiées) adresse dans la mémoire virtuelle. C'est plutôt mauvais. 🙂
oui, je connais les bases.. la question est de savoir si je peux accéder à la mémoire physique comme un pilote de périphérique. Bu pourquoi mon PC freeze.. après tout, je suis juste en train de lire ; pas écrit. ?
Il est probable que l'adresse 0x10 est un registre spécial que vous ne pouvez pas lire. Vous êtes sur dans des eaux dangereuses, ici. L'arbitraire l'accès à la mémoire peut être dangereux pour votre santé.
Même le noyau a pas d'accès direct à la mémoire physique dans votre façon de penser. Fondamentalement, le type de mémoire que vous semblez l'imaginer (mémoire linéaire avec télévision adressage) est quelque chose qui est construit à l' par le noyau (à partir de la mémoire physique banques) et exporté, il n'est pas "exister". Pour connaître ces choses et sur les modalités d'accès sur les différents types d'adresses le noyau peut gérer vous aurait vraiment de regarder plus profondément dans la documentation du noyau. (Aussi une valeur qui n'est pas divisible par 4 est certainement un mauvais choix de s'attendre à une
unsigned
).Ce code n'est pas de tenter d'accéder à la mémoire physique. Qu'il tente d'accéder à un invalide (non cartographiées) adresse dans la mémoire virtuelle. C'est plutôt mauvais. 🙂
OriginalL'auteur raj | 2011-10-25
Vous devez vous connecter pour publier un commentaire.
À réel d'accès à la mémoire physique, vous devez utiliser phys_to_virt fonction. Dans le cas où il est io de la mémoire (par exemple, mémoire PCI), vous devriez regarder de plus près ioremap.
L'ensemble de ce sujet est très complexe, si vous êtes un débutant, je voudrais suggérer quelques kernel/pilote de livres de développement/doc.
OriginalL'auteur flolo
Je suggère la lecture du chapitre sur la mémoire dans ce livre:
http://lwn.net/Kernel/LDD3/
Il est disponible gratuitement en ligne. Bonnes choses!
OriginalL'auteur hochl
À l'intérieur du noyau, la mémoire est encore mappé pratiquement, tout simplement pas de la même façon que dans l'espace utilisateur.
Les chances sont que 0x10 est dans une page de garde ou quelque chose, pour attraper les pointeurs nuls, de sorte qu'il génère un non gérée défaillance de page dans le noyau lorsque vous le touchez.
Normalement, ce qui provoque un OOPS pas d'un blocage (mais il peut être configuré pour provoquer un mouvement de panique). OUPS inattendu noyau condition qui peut être récupéré à partir, dans certains cas, et n'apporte pas nécessairement une baisse de l'ensemble du système. Normalement, il tue à la tâche (dans ce cas, insmod)
Avez-vous le faire sur un ordinateur de bureau système Linux avec une interface graphique chargé? Je vous recommande de mettre en place une machine virtuelle Linux (Vmware, virtualbox etc) avec un simple (c'est à dire rapide à redémarrer) basée sur le texte de distribution si vous voulez pirater autour avec le noyau. Vous allez crash un peu et vous voulez redémarrer le plus rapidement possible. Aussi en utilisant un texte basé sur la distribution, il est plus facile de voir le crash du noyau messages (Oups ou de panique)
OriginalL'auteur MarkR