最近接到hr的实习面试通知,是一份内核模块编写的实习吧。(其实这也是我最喜欢从事的工作,因为我很喜欢kernel)
因为明天就要去面试了。这两天重新熟悉了一下模块的编写。闲来无事,随便写写以备以后再次重温,哈哈
感觉人的热情总是会改变的,看了一段时间内核,看源码看的头疼,于是乎转向网络安全去看iptables等防火墙协议去了(以至于电面的时候问我虚拟地址与物理地址是什么的时候我竟然第一反应是mac与ip等待,而且傻兮兮的问考官是不是网络安全方面的,我也是醉了)
闲话不多说了,回顾一下我模块编程的学习
#include <linux/init.h>
#include <linux/module.h>
#include <linux/sched.h>
MODULE_LICENSE("Dual BSD/GPL");
static int showtask_init(void) {
struct task_struct *task;//一个task_strcut结构体的对象指针
task = current;//这个current返回当前进程号
printk( "current pid=%i command=%s ",current->pid,current->comm);
printk(KERN_NOTICE "\n");
for_each_process(task)//这个是看深入理解linux内核时发现的一个宏
{
printk(KERN_INFO "process id = %d tpid= %s ",task->pid,task->comm);
}
printk(KERN_NOTICE "\n");
return 0;
}
static void showtask_exit(void) {
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(showtask_init);
module_exit(showtask_exit);
额,这个是按我老师要求仿写的第一个.c文件
makefile
obj-m := showtask.o
KERNELBUILD :=/lib/modules/`uname -r`/build
default:
make -C $(KERNELBUILD) M=$(shell pwd) modules
clean:
rm -rf *.o *.ko *.mod.c .*.cmd .tmp_versions
编译连接
make
insmod showtask.ko
dmesg
会显示些进程号,进程名啊
然后就是
make clean
rmmod showtask