时间:2015-05-18 来源:

内核模块编写 【Web前端】

* 内核动态模块的的功能和作用*

列出已安装的动态模块名: lsmod 安装一个动态模块: insmod 模块名.ko 卸载一个动态模块: rmmod 模块名.ko 安装依赖模块: modprobe 显示模块信息: modinfo 模块名.ko

#include <linux/moduleparam.h> module_param(变量名网页外包接活,类型,网页外包接活int,0644); 用法 : insmod hello.ko test=10 许可和文档有关的宏

sudo insmod hello.ko 我们使用dmesg命令查看内核模块内容的输出:

模块安装时携带的可选参数

Linux 模块是一些可以独立于内核单独编译的内核函数和数据类型集合,网页外包接活是可增删的内核部分.模块在内核启动时装载称为静态装载web前端制作,在内核已经运行时装载称为动态装载.模块可以扩充内核所期望的任何功能,web前端制作但通常用于实现设备驱动程序.

obj-m := hello.o all: make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean 我们使用make命令进行编译承接网页制作, /*要创建的 proc 目录名*/ struct proc_dir_entry * /*上级目录web切图报价, /*要创建的 proc 文件名*/ mode_t mode, /*proc 文件的权限*/ struct proc_dir_entry *parent/*上级目录,符合w3c标准NULL 代表/proc*/ ); //删除一个 proc 文件: void remove_proc_entry(const char *name, /*要删除的 proc 文件名*/ struct proc_dir_entry *parent /*上级目录,jpg或psd转htmlNULL 代表/proc*/ ); //proc 入口数据结构: struct proc_dir_entry { unsigned int low_ino; /*目录入口的 inod 节点号*/ unsigned short namelen; /*节点名长度*/ const char *name; /*节点名*/ mode_t mode; /*节点类型和权限*/ nlink_t nlink; /*节点的连接数*/ uid_t uid; /*拥有该节点的用户 uid*/ gid_t gid; /*拥有该节点的组 gid*/ loff_t size; /*节点的大小web前端制作,除非限制长度否则为0*/ struct inode_operations * proc_iops; /*对该节点的操作*/ const struct file_operations * proc_fops; /*对该文件的操作*/ get_info_t *get_info; /*如果定义,web前端制作则当有读操作时调用*/ struct module *owner; /*拥有该节点的模块*/ struct proc_dir_entry *next, *subdir;/*节点间的关系web切图报价, /*存读出数据的地址*/ char **start, /*读出数据结构在page中的偏量*/ int count, /*文件尾标志*/ void *data); /*文件数据的地址*/ int (write_proc_t)(struct file *file, /* 用 户 空 间 数 据 地 址 , /*从用户空间写入的数据长度*/ void *data); /*写入文件的地址*/ 下面我们编辑一个Hello World模块

gcc test.c -o test 编译之后web切图报价,运行

下面我们使用内核模块来创建proc文件,web切图报价并向文件中写入内容.下面是我的程序的实现:

#include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <unistd.h> #define path "/proc/mydir/myfile" //字符串的长度 #define LEN 16 //读取之前的时间 struct timeval tv_begin; //读取之后的时间 struct timeval tv_end; //存储读出的字符串的长度 char buf[LEN]; int main() { FILE *fp; gettimeofday(&tv_begin,"r"); printf("%s\n",LEN,NULL); printf("used %d s %d us\n",tv_end.tv_usec-tv_begin.tv_usec); return 0; } 我们使用命令:

struct timeval{ long int tv_sec; //秒数 long int tv_usec; //毫秒 }; 数据结构timezone为时区web切图报价,如果不用就设置为NULL

现在我们使用卸载模块的命令进行卸载:

下面我们编写一个用户空间程序,web切图报价来测试用户读取/proc/mydir/myfile文件所用的时间符合w3c标准,我们使用的是系统提供的gettimeofday函数.

这是一个最简单的内核模块.

Makefile 文件的约定 预定义的宏: obj-m := 模块名.o 预定义的命令: make –C 内核源代码的安装路径 M=动态模块源代码路径 modules 将生成动态安装的模块文件:模块名.ko 例如: obj-m := hello.o all: make -C /lib/modules/(shelluname?r)/buildM=(shell uname -r)/build M=(shell pwd) modules clean: make -C /lib/modules/(shelluname?r)/buildM=(shell uname -r)/build M=(shell pwd) clean 如果有多个目标模块: obj-m := hello.o hello-objs := a.o b.o

下面是我的用户测试程序:

obj-m := mod.o all: make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean 同样的道理编译完成之后,符合w3c标准我们使用insmod命令将文件加载到内核中网页外包接活,我们查看/proc目录下是否有我们创建的mydir文件夹,jpg或psd转html并且该文件夹下面存在一个名为myfile的文件web前端制作,同时我们查看其中的内容.

MODULE_LICENSE(“GPL”); MODULE_DESCRIPTION(“xxxxxxxx”); MODULE_AUTHOR(“xxxxxxx”); 在模块中使用内核的/proc 接口

sudo rmmod hello 模块输出信息为:

下面一篇博客我将使用内核模块从当前进程开始,web前端制作向前遍历承接网页制作,一直遍历到初始进程,兼职手机网页制作将其信息保存到proc文件中.

/******************************************** 编写创建proc文件系统的模块web切图报价,该程序创建在/proc目录下 创建mydir目录,网站div+css在mydir目录下创建保存当前系统时间 : jiffies 值的文件 myfile ***********************************************/ #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/proc_fs.h> #include <linux/jiffies.h> #include <asm/uaccess.h> #include <linux/moduleparam.h> #define MODULE_NAME "Myproc" #define MYDATA_LEN 16 //放用户空间传入的数据 struct my_proc_data{ char value[MYDATA_LEN]; }; struct my_proc_data mydata; //proc结构变量 static struct proc_dir_entry *example_dir; static struct proc_dir_entry *date_file; static int param; module_param(param,0644); //读文件myfile的读驱动函数 static int proc_read(char *page,off_t off,int *eof,"%s%ld\n",jiffies); return len; } //写文件myfile的写驱动函数 static int proc_write(struct file *file,unsigned long count,buffer,0); if(example_dir == 0){ printk("mkdir fail\n"); return -1; } //创建/proc/mydir/myfile文件 date_file = (struct proc_dir_entry *)create_proc_entry("myfile",example_dir); if(date_file == 0){ remove_proc_entry("myfile","Ticks="); date_file->data = &mydata; date_file->read_proc = &proc_read; date_file->write_proc = &proc_write; date_file->owner=THIS_MODULE; return 0; } //卸载模块 void cleanup_module(void) { remove_proc_entry("myfile",NULL); printk("Goodbye.\n"); } MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TEST"); MODULE_AUTHOR("bobo"); 其中网页外包接活,Makefile文件为:

与动态模块有关的 Shell 命令

#include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> static ini __init 模块名_init(void) { /* * 安装模块的初始化工作 ?? */ return 0; } Static void __exit 模块名_exit(void) { /* * 卸载模块前的清理工作 ?? */ } module_init(模块名_init); module_exit(模块名_exit); 动态模块的编译

模块最基本的框架

./test 其运行结果为:

下面我们将terminal终端的操作目录切换到当前目录下,jpg或psd转html动态加载该模块:

int gettimeofday(struct timeval *tv,struct timezone *tz); 其中的数据结构timeval为:

## 未完待续!!!!## $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

点击次数:7821
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日一张图告诉你HTML5的历史 1,收藏 ,,2016年06月23日LeetCodePermutationSequence【Web前端】2015年04月24日【Android】触屏setOnTouchListener实现图片缩放、移动、绘制和添加水印 【编程语言】2014年11月04日UVAChildren’sGame(贪心)【编程语言】2015年02月02日css文本框与按钮美化效果代码2014年01月29日jQueryready函数滥用分析2014年01月29日cvs常用命令 【移动开发】2015年08月17日JDBC连接Access数据库的几种方式介绍2014年01月29日linux安全加固【移动开发】2015年03月02日BZOJ2683简单题cdq分治+树状数组 【编程语言】2015年07月22日hibernate之关于使用连接表实现多对一关联映射 【编程语言】2014年11月04日sublime下编辑LaTeX2015年05月06日卸载掉您计算机中的屏幕保护程序2014年01月29日GTK编程:获取图片的分辨率 【移动开发】2015年04月01日jQueryboxy弹出层插件中文演示及使用讲解2014年01月29日Windows2000启动菜单详解2014年01月29日微服务架构实践感悟【架构设计】2015年05月18日AndroidStudio版本升级【编程语言】2015年05月12日谷歌赶“时髦”搜索引擎也卖萌 ,,2016年06月23日java面向对象编程之反射 【编程语言】2015年08月05日ConvolutionalNeuralNetworksforVisualRecognition5【综合】2015年06月25日贝塞尔曲线(Béziercurve)理论及绘制方法 【移动开发】2015年06月29日Photoshop制作黑色光感网页按钮教程2014年01月28日1355巧克力(线段树点+区间) 【编程语言】2014年12月12日初探springmvc 【综合】2015年07月13日Hdu4280IslandTransport(最大流) 【数据库】2015年08月14日从零开始实现信号槽机制:二 【移动开发】2015年09月05日Rabin-Karp算法和指纹思想【综合】2015年02月09日POJ3020AntennaPlacement(二分图匹配)2014年11月04日Mybatis3源码分析(三):解析mapper的xml配置文件 【Web前端】2015年02月25日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)