Как рано я могу назвать kalloc в ядре arm linux? - PullRequest
1 голос
/ 27 марта 2010

Я хотел бы динамически распределять память из функции machine_init в моем ядре linux arm. Однако мои тесты показывают, что вызов kalloc иногда приводит к полному отказу системы в загрузке.

Мои инструменты отладки очень ограничены, поэтому я не могу дать больше информации о сбое.

Проще говоря, законно ли вызывать kalloc из machine_init функции в ARM linux, и, если нет, есть ли альтернатива?

Я понимаю, что в большинстве случаев неправильно распределять память так рано в процессе загрузки (такую ​​работу должны выполнять драйверы устройств); однако я убежден, что мой конкретный проект требует этого.

Ответы [ 2 ]

3 голосов
/ 28 марта 2010

Я не могу понять, откуда вызывается machine_init, но я не могу не думать, что вы пытаетесь поступить неправильно.

Драйверы устройств и другие подсистемы имеют свое собственное время инициализации, попытка сделать что-то очень рано - обычно ошибка (потому что что-то необходимое еще не запущено). Вы можете определенно вызвать kmalloc во время инициализации драйвера устройства (по крайней мере, большинство. Возможно, драйвер консоли отличается).

В любом случае, тот факт, что ваш ARM предполагает, что это встроенная система, поэтому вам вряд ли придется иметь дело с большим количеством различного оборудования. Разве вы не можете просто статически выделить массив с таким количеством элементов, которое может потребоваться (выдать ошибку, если она превышена)?

0 голосов
/ 22 сентября 2014

Kmalloc - это API-интерфейс ядра для работы с фреймами памяти slab / slob / slub. Как только любой из этих фреймворков (тот, который используется ядром) инициализируется, kmalloc работает нормально. Убедитесь, что ваш звонок после инициализации slab / slob / slub

ура

...