源代码在最后面

实验题目:

源代码打包下载
链接: 点击此处下载 密码: i2ev

(第一部分实验是虚拟机上操作,第二部分是真机操作)
1,创建内核模块

编译模块

2,加载与卸载内核模块
加载

删除内核模块

第二部分

几个主要内核函数的功能
1,brithday_init():向内核注册模块的入口点
2,list_for_each_entry(ptr, &birthday_list, list):一个 for 循环,利用传入的 pos 作为循环变量,从表头 &birthday _list开始,逐项向后移动 ptr,并遍历每一个ptr的list子项直至又回&birthday_list
3,birthday_exit():向内核注册模块的退出点
1,编译模块,生成brithday.ko文件
命令行:make

2,调用内核函数并查看日志
命令行1:sudo insmod brithday.ko
命令行2:dmesg

退出内核函数调用并查看日志,最后清除内核日志
命令行1:sudo rmmod brithday 命令行2:dmesg命令行3:sudo dmesg -c

代码一
代码名称:birthday.c

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/list.h>
#include <linux/init.h>
//声明一个list_head对象static LIST_HEAD(brithday_list);
//定义插入链表的结构
struct brithday {int day;int month;int year;struct list_head list;
};
//brithday()将实例添加到链表中,(通过list_add_tail()函数),通过引用函数避免代码重复
void brithday(int day, int month, int year, struct brithday *person)
{person->day=day;person->month=month;person->year=year;INIT_LIST_HEAD(&person->list);list_add_tail(&person->list, &brithday_list);
}
//内核模块入口函数
int brithday_init(void){//创建并初始化struct brithday的实例struct brithday *person;struct brithday *ptr;char n[5]={'a','b','c','d','e'};int i=0;
//设置五个人的名字,便于区分person = kmalloc(sizeof(*person)*5, GFP_KERNEL);brithday(1,10,2020,person);person=person+1;brithday(2,9,2021,person);person=person+1;brithday(3,8,2022,person);person=person+1;brithday(4,7,2023,person);person=person+1;brithday(5,6,2024,person);//遍历链表并循环输出五个人的出生日期到缓冲区list_for_each_entry(ptr, &brithday_list, list) {printk(KERN_INFO "%c 的出生日期是: %d 年 %d月 %d 日.\n",n[i],ptr->year,ptr->month,ptr->day);i=i+1;}
printk(KERN_INFO "Loading Module\n");return 0;
}
//内核注册模块的退出函数
void brithday_exit(void)
{struct brithday *ptr, *next;list_for_each_entry_safe(ptr, next, &brithday_list, list){list_del(&ptr->list);kfree(ptr);}printk(KERN_INFO "Removing Moudle\n");
}
module_init(brithday_init);
module_exit(brithday_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Birthday Module");
MODULE_AUTHOR("SGG");

代码二
文件名:makefile

obj-m += birthday.o
all:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

操作系统概念第九版编程项目:Linux内核模块相关推荐

  1. 添加简单的linux内核模块,操作系统实践 第12章-添加最简单的Linux内核模块.ppt

    操作系统实践 第12章-添加最简单的Linux内核模块.ppt 文档编号:310662 文档页数:16 上传时间: 2018-07-21 文档级别: 文档类型:ppt 文档大小:2.00MB 第12章 ...

  2. 【Linux驱动】linux内核模块简介

    一. 摘要 这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程.主要从模块开发中的常用指令.内核模块程序的结构.模块使用计数以及模块的编译等角度对内核模块进行介绍.在Linux系统 ...

  3. LINUX内核模块上下文,飞凌嵌入式知识分享-Linux内核模块编译

    本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用.功能及基本编程方法,以便于读者能快速理解什么是Linux内核,能看懂Linux内核. 拥有超过1300万行的代码,Linux ...

  4. Linux内核模块简介

    一. 摘要 这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程.主要从模块开发中的常用指令.内核模块程序的结构.模块使用计数以及模块的编译等角度对内核模块进行介绍.在Linux系统 ...

  5. linux c编程项目实例,Linux c编程实例_例子

    例一:字符与整型变量的实现 #include int main() { int c1,c2; char c3; c1='a'-'A'; c2='b'-'B'; c3='c'-; printf(&quo ...

  6. c语言编程操作系统,操作系统下c语言编程入门.doc

    操作系统下c语言编程入门 linux操作系统下c语言编程入门 1)Linux程序设计入门--基础知识? 2)Linux程序设计入门--进程介绍? 3)Linux程序设计入门--文件操作? 4)Linu ...

  7. Linux内核模块的概念和基本的编程方法

    Linux内核模块的概念和基本的编程方法 标签: Linux内核模块 2013-06-14 18:29 1864人阅读 评论(0) 收藏 举报 分类: linux内核(34) 版权声明:本文为博主原创 ...

  8. [Operating.System.Concepts(9th,2012.12)].Abraham.Silberschatz.文字版(恐龙书——操作系统概念 原书第九版)课后习题 参考答案

    目录 Chap01 导论 Chap02 OS结构 Chap03 进程 Chap04 线程 Chap05 同步(Synchronization) Chap06 CPU调度 Chap07 死锁 Chap0 ...

  9. 杭电操作系统实验二 --- Linux 内核模块编程(arm架构华为云)

    一.题目介绍 掌握Linux 内核模块的基本概念 ·阅读教材7.3.2节Linux内核模块简介 ,网上查找资料,了解Linux内核模块的基本概念. ·阅读教材7.3.3内核模块编程基础 ,网上查找资料 ...

  10. java大作业私人管家系统_操作系统概念(Operating System Concepts)第十版期中大作业...

    更正: 第一题中,哲学家就餐问题中的哲学家的状态state[i]应属于临界区变量,是可能会产生读写冲突的,所以对其进行读写的时候均需要加一把互斥锁. 非常感谢不听不听不听的指正. ---------- ...

最新文章

  1. PHP读取MySQL数据生成Excel文件实例
  2. ubuntu16.04装机:网易云+搜狗拼音+chrome+uGet+caffe(openCV3.1+CUDA+cuDNN+python)
  3. SpringBoot-服务端参数验证-JSR-303验证框架
  4. JavaScript实现完整的ComplexNumber复数类(附完整源码)
  5. java中do loop的使用_Java中do-while循环——通过示例学编程(11)
  6. 2.1php标签,语法,注释
  7. mysql远程访问时间长无反应_远程MySQL访问需要很长时间
  8. 【竞赛题解】第22次CCF计算机软件能力认证 B
  9. lvs,haproxy实现负载均衡
  10. 线程演示生产者和消费者的一个例子
  11. java cache system_JCS(Java Cache System)基本结构分析和使用
  12. BigDecimal 转 String
  13. [惊!] IE 10.0,你没看错! IE10 Platform Preview 1出来啰~
  14. 构建一个可靠的分布式计数器--memcached之incr/decr操作实战分析
  15. Jeecg-Boot前后端分离版
  16. HttpClient 该知道一些概念
  17. c++ strcmp函数
  18. python七夕表白代码(转载)
  19. python匿名函数调用_python之内置函数,匿名函数
  20. 疾病研究:重症肌无力医师指南

热门文章

  1. 无法创建java虚拟机_创建java虚拟机失败的解决方法
  2. 电子游戏理论基础初探
  3. 身份证(省市)编码表
  4. Ubuntu安装gcc编译器
  5. 系统集成项目管理工程师真的好考吗?
  6. Android 开发一定要看的15个实战项目
  7. mysql 管理工具—phpmyadmin docker 版使用
  8. 诺禾--分子生物学常用小软件分享
  9. 【虎牙直播源】浏览器抓取真实直播源地址(纯前端JS解析源码)
  10. 2020 cr节目源_2020年四款最新直播软件汇总,频道多,画质流畅节目源超级稳定!...