操作系统概念第九版编程项目:Linux内核模块
源代码在最后面
实验题目:
源代码打包下载
链接: 点击此处下载 密码: 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内核模块相关推荐
- 添加简单的linux内核模块,操作系统实践 第12章-添加最简单的Linux内核模块.ppt
操作系统实践 第12章-添加最简单的Linux内核模块.ppt 文档编号:310662 文档页数:16 上传时间: 2018-07-21 文档级别: 文档类型:ppt 文档大小:2.00MB 第12章 ...
- 【Linux驱动】linux内核模块简介
一. 摘要 这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程.主要从模块开发中的常用指令.内核模块程序的结构.模块使用计数以及模块的编译等角度对内核模块进行介绍.在Linux系统 ...
- LINUX内核模块上下文,飞凌嵌入式知识分享-Linux内核模块编译
本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用.功能及基本编程方法,以便于读者能快速理解什么是Linux内核,能看懂Linux内核. 拥有超过1300万行的代码,Linux ...
- Linux内核模块简介
一. 摘要 这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程.主要从模块开发中的常用指令.内核模块程序的结构.模块使用计数以及模块的编译等角度对内核模块进行介绍.在Linux系统 ...
- linux c编程项目实例,Linux c编程实例_例子
例一:字符与整型变量的实现 #include int main() { int c1,c2; char c3; c1='a'-'A'; c2='b'-'B'; c3='c'-; printf(&quo ...
- c语言编程操作系统,操作系统下c语言编程入门.doc
操作系统下c语言编程入门 linux操作系统下c语言编程入门 1)Linux程序设计入门--基础知识? 2)Linux程序设计入门--进程介绍? 3)Linux程序设计入门--文件操作? 4)Linu ...
- Linux内核模块的概念和基本的编程方法
Linux内核模块的概念和基本的编程方法 标签: Linux内核模块 2013-06-14 18:29 1864人阅读 评论(0) 收藏 举报 分类: linux内核(34) 版权声明:本文为博主原创 ...
- [Operating.System.Concepts(9th,2012.12)].Abraham.Silberschatz.文字版(恐龙书——操作系统概念 原书第九版)课后习题 参考答案
目录 Chap01 导论 Chap02 OS结构 Chap03 进程 Chap04 线程 Chap05 同步(Synchronization) Chap06 CPU调度 Chap07 死锁 Chap0 ...
- 杭电操作系统实验二 --- Linux 内核模块编程(arm架构华为云)
一.题目介绍 掌握Linux 内核模块的基本概念 ·阅读教材7.3.2节Linux内核模块简介 ,网上查找资料,了解Linux内核模块的基本概念. ·阅读教材7.3.3内核模块编程基础 ,网上查找资料 ...
- java大作业私人管家系统_操作系统概念(Operating System Concepts)第十版期中大作业...
更正: 第一题中,哲学家就餐问题中的哲学家的状态state[i]应属于临界区变量,是可能会产生读写冲突的,所以对其进行读写的时候均需要加一把互斥锁. 非常感谢不听不听不听的指正. ---------- ...
最新文章
- PHP读取MySQL数据生成Excel文件实例
- ubuntu16.04装机:网易云+搜狗拼音+chrome+uGet+caffe(openCV3.1+CUDA+cuDNN+python)
- SpringBoot-服务端参数验证-JSR-303验证框架
- JavaScript实现完整的ComplexNumber复数类(附完整源码)
- java中do loop的使用_Java中do-while循环——通过示例学编程(11)
- 2.1php标签,语法,注释
- mysql远程访问时间长无反应_远程MySQL访问需要很长时间
- 【竞赛题解】第22次CCF计算机软件能力认证 B
- lvs,haproxy实现负载均衡
- 线程演示生产者和消费者的一个例子
- java cache system_JCS(Java Cache System)基本结构分析和使用
- BigDecimal 转 String
- [惊!] IE 10.0,你没看错! IE10 Platform Preview 1出来啰~
- 构建一个可靠的分布式计数器--memcached之incr/decr操作实战分析
- Jeecg-Boot前后端分离版
- HttpClient 该知道一些概念
- c++ strcmp函数
- python七夕表白代码(转载)
- python匿名函数调用_python之内置函数,匿名函数
- 疾病研究:重症肌无力医师指南