打印进程号(pid)
我们知道linux是模块化的内核。实现模块、利用kernel提供的接口,
首先了解写模块的基本框架。下面的c文件就是最基本的框架,
当然还有怎样添加一些符号变量,利用的module_param,没用上。
c文件printPid.c
1 #include <linux/kernel.h> 2 #include <linux/module.h> 3 #include <linux/init.h> 4 #include <linux/sched.h> 5 #include <linux/list.h> 6 7 static __init int printPid(void) //安装模块函数 8 { 9 struct task_struct *task,*p; 10 struct list_head *ps; 11 int count=0; 12 printk("begin.\n"); 13 task=&init_task; 14 list_for_each(ps,&task->tasks) 15 { 16 p=list_entry(ps,struct task_struct,tasks); 17 count++; 18 printk("%d\t%s\n",p->pid,p->comm); 19 } 20 printk("Process counts:%d\n",count); 21 return 0; 22 } 23 static __exit void exitPid(void) //卸载函数 24 { 25 printk("exit!\n"); 26 } 27 module_init(printPid); //实现的函数必须放入其中 28 module_exit(exitPid);
makefile:
1 KDIR:=/lib/modules/$(shell uname -r)/build 2 PWD:=$(shell pwd) 3 all: 4 $(MAKE) -C $(KDIR) M=$(PWD) modules 5 clean: 6 $(MAKE) -C $(KDIR) M=$(PWD) modules clean 7 rm -f *.o 8 9 obj-m :=pid.o
make后会生成pid.ko文件。
然后用这几个命令:
#安装模块 sudo insmod pid #显示日志信息 dmesg #显示挂载的挂载的所有模块 lsmod #卸载 sudo rmmod pid
这仅仅是比较简单的,kernel要学还有很长的路......