参考:http://stackoverflow.com/questions/116343/what-is-the-difference-between-vmalloc-and-kmalloc
vmalloc 很少用,因为kernel中很少用虚拟内存 (返回的是逻辑地址)
kmalloc 的地址是连续的
kmalloc is the preferred way, as long as you don't need very big areas. The trouble is, if you want to do DMA from/to some hardware device, you'll need to use kmalloc, and you'll probably need bigger chunk.
当你需要大块内存的时候推荐用kmalloc , 且你使用DMA来与硬件设备交换数据的时候也需要用kmalloc(物理地址是连续的)
更详细的参看可以查看:
Linux Kernel Development by Robert Love (Chapter 12, page 244 in 3rd edition) answers this very clearly.