嵌入式工程师成长路--------内核模块1

内核模块分析

这里主要分析一下内核模块中各语句的作用,下面是一段简单的模块代码,只做了模块的初始化和退出操作

 1 #include <linux/module.h>
 2 #include <linux/init.h>
 3 #include <linux/kernel.h>
 4
 5 static int __init first_module_init(void)
 6 {
 7   printk(KERN_ALERT"Module init!\n");
 8 }
 9
10 static void __exit first_module_exit(void)
11 {
12   printk(KERN_ALERT"Module exit!\n");
13 }
14
15 module_init(first_module_init);
16 module_exit(first_module_exit);
17 MODULE_LICENSE("GPL");
18 MODULE_AUTHOR("STAR");
19 MODULE_DESCRIPTION("First Module");

代码简析

  1. 一个内核模块至少包含两个函数:初始化函数,在模块加载到内核时被调用。卸载函数,在内核模块被卸载时调用。
  2. 模块“初始化”和“卸载”函数可以起任意的名字。通过宏module_init()声明初始化函数,通过module_exit()声明卸载函数。
  3. 任何内核模块都需要包含linux/module.h文件。

代码详析

1.first_module_init()函数是模块的入口点,在模块装载时被调用。

  • module_init()是一个宏调用,它唯一的参数便是模块的初始化函数。
  • 模块的所有初始化函数必须符合下面的形式:int name_init(void);
  • 该模块入口函数通常不会被外部函数直接调用,所以它一般被标记为static类型。
  • init函数会返回一个int型的数值,如果初始化顺利完成,那么它的返回值为0,否则返回非0。

2.first_module_exit()函数是模块的出口函数,在模块从内存中卸载时调用。

  • 退出函数必须符合以下形式:void name_exit(void);
  • 与init函数一样,也可以标记其为static。

关于 __init和 __exit宏

  1. 如果该模块被编译进内核,而不是动态加载,则宏 __init的使用会在初始化完成后丢弃该函数并收回所占内存。
  2. 如果该模块被编译进内核,宏 __exit将忽略“清理收尾”的函数。
  3. 这些宏在头文件linux/init.h定义。

内核模块证书和内核模块文档说明

  1. 2.4内核后,引入识别代码是否在GPL许可下发布的机制。在使用非公开的源代码产品时会得到警告。通过宏MODULE_LICENSE("GPL"),设置模块遵守GPL证书,取消警告信息。
  2. 宏MODULE_DESCRIPTION()用来描述模块的用途。
  3. 宏MODULE_AUTHOR()用来声明模块的作者。  
  4. 这些宏都在头文件linux/module.h定义。使用这些宏只是用来提供识别信息。

注  意  

在上面的程序中初始化和退出函数都只是简单的打印一句话。这里用的是printk()函数。printk相当于是内核中的printf,它们区别主要在于指向空间的不同。

内核中,信息一般保存于在内核空间分配的缓冲区中。printf一般指向用户空间,使用printk可改变指向使之指向内核空间。这里只作简要提醒,读者如有需要可到网上查询相关信息。

谢谢阅读,转载请注明!

                                                          2017-04-16

时间: 2024-10-09 20:14:48

嵌入式工程师成长路--------内核模块1的相关文章

网络工程师成长之路之怎样去工作

网络工程师成长之路之工作的事 入职之后,你的直接领导对你特别的重要.一个网络工程师的工作状态全靠领导,有一个好的领导,可以给你在迷茫中指出一条路.所以多和领导沟通交流,不管是工作上的还是生活上的事.所谓知人善用,领导不了解你怎么能让你的工作的内容与你的能力相当,怎样给你分陪的工作不仅能展示出你的能力,而且还具有挑战性,还能有利于你的成长. 工作之后你会发现做网络的这个圈子其实并不大,也就那些厂家,一个地方做的好的也就那几个公司.一个大的集成项目分为网络部分和安全部分及服务器.你仔细想想网络设备也

软件测试工程师成长之路:掌握软件测试九大技术主题

软件测试工程师成长之路:掌握软件测试九大技术主题 王顺 等 编著   ISBN 978-7-121-23996-0 2014年9月出版 定价:85.00元 432页 16开 内容提要 <软件测试工程师成长之路:掌握软件测试九大技术主题>以实际项目为原型.以关键理论与丰富实践为指导,贯彻了先进的项目管理理念与全程质量管理思想. <软件测试工程师成长之路:掌握软件测试九大技术主题>前9 章为软件测试九大技术主题分享,是众多资深软件工程师在软件测试领域的经验总结.知识升华与提高,展现众多

2017年Java web开发工程师成长之路

详情请交流  QQ  709639943 00.2017年Java web开发工程师成长之路 00.R语言速成实战 00.R语言数据分析实战 00.Python+Django+Ansible Playbook自动化运维项目实战 00.Java深入微服务原理改造房产销售平台 00.Python3入门机器学习 经典算法与应用 00.老司机学python篇:第一季(基础速过.机器学习入门) 00.Python 从入门到精通 78节.2000多分钟.36小时的高质量.精品.1080P高清视频教程!包括标

工程师成长之路

俗话说,听君一席话胜读十年书,此次有幸参加了<工程师成长之路>分享会.感觉俗话说的一点都没有错.自己也已经工作很多年了,工作上有很多的心得体会,遇到的许多问题,走过的弯路,正如分享会上描述的那样,却经常感觉找不到解决的方法,此次听完分享有一种拨云见月的感觉. 工程师与码农的区别,我想就如设计师和砖瓦工一样,设计师知道,为什么要这样设计,而砖瓦工只是重复的把砖一块接一块的砌好. 如果一个砖瓦工想要成为一个设计师,那必须要持续学习,学会思考.所以我觉得持续学习,保持思考,是每个人必不可少的能力.

『嵌入式工程师的工作环境』是怎样的?----转载自知乎

『嵌入式工程师的工作环境』是怎样的? 赞同29反对,不会显示你的姓名 li crifan,走别人没走过的路,让别人有路可走 陈海涛.潘嘉.冯敬一 等人赞同 针对区域或城市行业前景分析区域的话:总体来说,一线城市,北上广深,搞IT的,包括嵌入式,肯定是机会最多,前景最好.其他二线或三线城市,比如南京,杭州,西安,苏州,成都,珠海等等,好像也可以.但是机会肯定没北上广深多.前景:最近的物联网,智能硬件等方向的兴起,对于嵌入式发展,应该还是有不少带动作用的.注:谈到赚钱多少,在接下来一段时间内,估计包

嵌入式学习从业之路 嵌入式行业之路

在嵌入式行业越走越远的道路上是不是有过迷茫,或者正在人生的十字路口还没有走向这条路的朋友,有些感觉无从下手,担心其未来发展前景,希望本文对处在迷茫中的嵌入式爱好者和从业者有所启发. 1.嵌入式学习,理论和实践缺一不可 嵌入式要学的东西很多,该注重理论还是实践? 的确,嵌入式系统的实践性是很强的,但是它需要足够的理论基础做支撑.因此,我认为,理论和实践这两个方面,不能割裂开,偏重于哪一方面都会出问题.如果理论基础不扎实,只是注重实践,那么你充其量只是个安装和操作工,或者调试工.对于嵌入式系统开发,

嵌入式工程师学习路线

参考:嵌入式工程师学习路线 关于这个方向,我认为大概分3个阶段:1.嵌入式linux上层应用,包括QT的GUI开发2.嵌入式linux系统开发3.嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,LINUX,WINCE.VxWorks等等Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式. 所以你可以尝试以下路线:(1) C语言是所有编程语言中的强者,单片机.DSP.类似ARM的种种芯片的编程都可以用C语言搞定),因此必须非常熟练的掌握.推荐书籍:<The C Pr

讲座:与迷茫相伴的IT成长路

2015年9月23日晚7点,CSDN学院在线公开课<与迷茫相伴的IT成长路>,分享PPT.讲座视频在[点击链接(待加)] 版权声明:本文为博主原创文章,未经博主允许不得转载.

后ARM时代,嵌入式工程师的自我修养

1嵌入式学习的一些概念理解误区 很多嵌入式初学者认为,学嵌入式,就是学习ARM,就是学习开发板.买一块开发板,然后在上面"移植"u-boot.Linux内核,再使用busybox制作一个根文件系统,大功告成!觉得可以出去找工作了.这其实是有一定片面性的:首先ARM是个CPU架构,跟PC上的X86架构一样,你见过有人在Windows下面学习C/C++编程.MFC编程.网络编程.互联网编程,说自己学习X86的吗?当然,也不可否认,嵌入式平台的多样性.硬件的可定制性导致我们在嵌入式平台上开发