2010-03-27 6 views
1

Je voudrais allouer dynamiquement de la mémoire à partir de la fonction machine_init dans mon noyau Linux. Cependant, mes tests indiquent qu'appeler kalloc entraîne parfois un échec complet du système à démarrer. Mes outils de débogage sont très limités, donc je ne peux pas donner beaucoup plus d'informations concernant l'échec.Combien de temps puis-je appeler kalloc dans un noyau Linux?

En termes simples, est-il légal d'appeler kalloc à partir d'une fonction machine_init dans ARM linux, et, si non, existe-t-il une alternative?

Je comprends que dans la plupart des cas, il est malavisé d'allouer de la mémoire si tôt dans le processus de démarrage (ce type de travail devrait être fait par les pilotes de périphériques); Cependant, je suis convaincu que mon projet particulier l'exige.

Répondre

3

Je ne vois pas d'où l'on appelle machine_init, mais je ne peux m'empêcher de penser que vous essayez de faire la mauvaise chose.

Les pilotes de périphériques et autres sous-systèmes ont leur propre temps initial, essayer de faire les choses très tôt est généralement une erreur (parce que quelque chose de requis n'est pas encore lancé). Vous pouvez certainement appeler kmalloc lors de l'initialisation d'un pilote de périphérique (au moins, la plupart, peut-être que le pilote de la console est différent). Dans tous les cas, le fait que votre sur ARM suggère qu'il s'agit d'un système embarqué, il est donc peu probable que vous ayez à faire face à beaucoup de matériel différent. Ne pouvez-vous pas allouer statiquement un tableau avec autant d'éléments que possible (donner une erreur si elle est dépassée)?

0

Kmalloc est une API de noyau sur le travail de cadre de mémoire de dalle/slob/slub. Une fois que l'un de ces framework (celui utilisé par le noyau) est initialisé, kmalloc fonctionne bien. Assurez-vous que votre appel après l'initialisation dalle/slob/slub

acclame

Questions connexes