开发者

How early can I call kalloc in an arm linux kernel?

开发者 https://www.devze.com 2022-12-24 15:41 出处:网络
I would like to dynamically allocate memory from the machine_init function in my arm linux kernel. However, my tests indicate that calling kalloc sometimes results in a complete failure of the system

I would like to dynamically allocate memory from the machine_init function in my arm linux kernel. However, my tests indicate that calling kalloc sometimes results in a complete failure of the system to boot.

My debugging tools are very limited so I can't give much more information regarding the failure.

Simply put, is it legal to call kalloc from a machine_init function in ARM linux, and, if开发者_开发技巧 not, is there an alternative?

I understand that in most cases it is wrong-headed to be allocating memory this early in the boot process (this kind of work should be done by the device drivers); however, I am convinced that my particular project requires it.


I can't see where machine_init is called from, but I can't help thinking you're trying to do the wrong thing.

Device drivers and other subsystems have their own init time, trying to do things very early on is usually a mistake (because something required isn't started yet). You can definitely call kmalloc during the initialisation of a device driver (at least, most. Maybe the console driver is different).

In any case, the fact that your on ARM suggests that it's an embedded system, so you're unlikely to have to deal with a lot of different hardware. Can't you just statically allocate an array with as many elements as could possibly be required (give an error if it is exceeded) ?


Kmalloc is a kernel API on top slab/slob/slub memory frame work. Once any of these framework(one which used by kernel) is initialized kmalloc works fine. Make sure your call after the slab/slob/slub initialization

cheers

0

精彩评论

暂无评论...
验证码 换一张
取 消