linux3.5内核中为所有进程(包括内核进程和用户进程)分配8k或4k的内核栈(可以在内核编译的时候选择),在模块代码中分配的栈内存就是在内核栈中,写模块代码如果要在堆中分配内存,则要使用kmalloc或vmalloc来分配,这是后话。
内核栈的栈底存放这thread_info, 通过获取内核栈,以得到thread_info的信息,thread_info里面有一个指向task_struct (进程描述符, 里面放着进程的各种信息)的指针, 通过这个指针, 就可以获取进程的各种信息了。
先编写获取当前进程名的程序,来更好的了解内核栈。
1 #include <linux/init.h> 2 #include <linux/module.h> 3 #include <asm/thread_info.h> 4 #include <linux/sched.h> 5 6 MODULE_LICENSE("GPL"); 7 MODULE_AUTHOR("BUNFLY"); 8 9 int test_init() 10 { 11 int i = 0; 12