编写设备驱动程序

动态内存分配

必须将设备驱动程序设计为可以同时处理驱动程序声明要驱动的所有连接设备。驱动程序处理的设备数不应受到限制。必须动态分配所有每设备信息。

void *kmem_alloc(size_t size, int flag);

标准内核内存分配例程为 kmem_alloc(9F)kmem_alloc() 与 C 库例程 malloc(3C) 类似,前者添加了 flag 参数。flag 参数可以是 KM_SLEEPKM_NOSLEEP,用于指示没有所需大小的内存空间时调用者是否要阻塞。如果设置了 KM_NOSLEEP 并且内存不可用,kmem_alloc(9F) 将返回 NULL

kmem_zalloc(9F)kmem_alloc(9F) 类似,但前者还可以清除已分配内存的内容。


注 –

内核内存是有限资源,并且不可分页,它还会与用户应用程序和内核其余部分争用物理内存。分配大量内核内存的驱动程序可导致系统性能降低。


void kmem_free(void *cp, size_t size);

可使用 kmem_free(9F) 将通过 kmem_alloc(9F)kmem_zalloc(9F) 分配的内存返回到系统。kmem_free() 与 C 库例程 free(3C) 类似,但前者添加了 size 参数。驱动程序必须跟踪每个已分配对象的大小,以便在以后调用 kmem_free(9F)