操作系统概念——编程项目二

第一部分:

/**
 * simple.c
 *
 * A simple kernel module. 
 * 
 * To compile, run makefile by entering "make"
 *
 * Operating System Concepts - 10th Edition
 * Copyright John Wiley & Sons - 2018
 */

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

/* This function is called when the module is loaded. */
int simple_init(void)
{
    
    
       printk(KERN_INFO "Loading Module\n");

       return 0;
}

/* This function is called when the module is removed. */
void simple_exit(void) {
    
    
	printk(KERN_INFO "Removing Module\n");
}

/* Macros for registering module entry and exit points. */
module_init( simple_init );
module_exit( simple_exit );

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Simple Module");
MODULE_AUTHOR("SGG");

第二部分:

#include<linux/list.h>
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/init.h>
#include<linux/types.h>
#include<linux/slab.h>
struct birthday{
    
    
	int day;
	int month;
	int year;
	struct list_head list;
};

static LIST_HEAD(birthday_list);

void add_birthday_list(int day, int month, int year){
    
    

	struct birthday *person;

	person = kmalloc(sizeof(*person), GFP_KERNEL);
	person->day = day;
	person->month = month;
	person->year = year;
	INIT_LIST_HEAD(&person->list);

	list_add_tail(&person->list, &birthday_list);
}

int simple_init(void){
    
    
	add_birthday_list(23, 1, 2003);
	add_birthday_list(12, 5, 2001);
	add_birthday_list(5, 9, 1994);
	add_birthday_list(3, 8, 1950);
	add_birthday_list(5, 12, 1920);
	
	printk(KERN_INFO "Loading Module");
	struct birthday *ptr;
	list_for_each_entry(ptr ,&birthday_list , list){
    
    
		printk(KERN_INFO "his irthday: %d/%d/%d", ptr->day, ptr->month, ptr->year);
	}
	return 0;
}

void simple_exit(void){
    
    
	struct birthday *ptr, *next;
	list_for_each_entry_safe(ptr, next, &birthday_list, list){
    
    
		list_del(&ptr->list);
		kfree(ptr);
	}
	printk(KERN_INFO "Removing Module\n");	
}

module_init(simple_init);
module_exit(simple_exit);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Simple Module");
MODULE_AUTHOR("SGG");

修改Makefile:
在这里插入图片描述
运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45773137/article/details/127451654