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