1,tasklet中不能使用使用让系统schedule的函数,如sleep等,因为tasklet 可能运行在ksoftirqd_CPUn内核线程,也有可能运行在中断上下文,如果运行在中断上下文中,tasklet是不能让系统schedule的。
2,中断处理程序中不能使用让kernelschedule的函数,如sleep等。
3,cat /proc/kallsyms 让地址不为0,则必须echo 0 > /proc/sys/kernel/kptr_restrict
4,addr2line通过地址查看所在的函数已经函数所在文件的路径
5,linux kernel三大内存分配器,分别是SLOB,SLAB,SLUB
6,void *kmalloc(size_t size, gfp_t flags)
kmalloc 基于以下几种size的mem cache:32, 64, 128, 256, 512, 1,024, 2,048, 4,096,
8,192, 16,384, 32,768, 65,536 和 131,072 bytes。其本质也是调用kmem_cache_alloc来分配
object。所以kmalloc一次最大可分配的size为128KB。kmalloc分配速度很快,在分配时需注意gfp flag
参数:在不interrupt上下文(ISR, softirq, tasklet)及不可睡眠上下文使用GFP_ATOMIC。
内核还增加了内存清零的分配函数:kzalloc。
7,vmalloc分配的内存物理不一定连续,虚拟地址是连续的,kmalloc分配的内存物理连续,虚拟地址也是连续的。