什么是linux内核?linux内核模块是什么?内核模块详解

什么是linux内核linux就像是一个哲学的最佳实践 。如果非要对它评价 , 我真的不知道该怎么赞叹 , 我只能自豪地说着:“linux的美丽简直让人沉醉 。”
我只能说是我处在linux学习的修炼之路上的一个小菜鸟 , linux的东西真的太丰富了 , 让你感觉只要掌握了其中的一个部分 , 就可以在求职之路上大放光彩 , 因此我常常感叹自己的弱小和无知 , 我离着linux的中心是多么的遥远 , 我只看到众多高耸的山峰 。
前面的几个是我比较关心的方向 。我现在主要在学习linux嵌入式编程方面的知识 。此外就是复杂的linux编程 。我在后面会说一下我对linux编程的浅薄认识 。众多的有趣的方向 , 常常让我们感觉无所适从 。我不谈专业的知识 , 我就谈谈我学习linux的故事 , 以及站在专业角度上的评论和展望好了 。
我们张家亮老师曾经提起说LInux的设计是行为需求驱动型 。似乎是这么说的 , 觉得不对劲 。我对linux的感觉就是自由 , 合作 , 兼容 。
linux内核体系结构1.操作系统原理

什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
2.汇编语言精讲
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
3.内存管理专题
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
4.网络协议栈专题
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
5.设备驱动专题
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
6.文件系统专题
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
7.内核项目实战专题
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
1. 何为内核模块
最笨的方法是对内核进行重新配置 , 然后再重新编译 。这样的话岂不是说我加一个组件就得重新编译内核 , 这显然不是很科学的方法 , 其实我们的linux内核提供在运行时可进行扩展的特性 , 这意味着当系统启动并运行时 , 我们可以向内核添加或移除部分功能 。
更多linux内核视频教程文本资料免费获取可以后台私信【内核】获取 。
什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 

什么是linux内核?linux内核模块是什么?内核模块详解

文章插图
 
我们在运行时添加到内核中的代码就被称为动态可加载内核模块 , 我们简称为内核模块 。
2. 内核模块的相关操作
a) 加载内核模块:insmod
b) 卸载内核模块:rmmod
c) 查看内核模块:lsmod
3. 模块声明
a) MODULE_LICENSE(“GPL”):内核可以识别的许可证有GPL(任意版本GNU通用公共许可证)、GPL v2等
b) MODULE_AUTHOR(“作者”):声明作者信息可以不用
c) MODULE_VERSION(“版本”):声明版本信息也可以不用
d) MODULE_DESCRIPTION(“功能描述”):声明模块功能 , 可不用
4. 模块参数
我们可以在加载内核模块的时候向其传递参数 , 以让同一代码达到不同的效果 。当然我们的参数必须用module_param宏来声明具体如下:
1 module_param(name , type , perm)
a) name:变量名
b) type:数据类型内核支持模块参数类型有:bool、invbool(bool的发转 , true变为false , false变为true)、charp(char类型指针值)、int、long、short、uint、ulong、ushort、
c) perm:常见的访问许可值通常为S_IRUGO和S_IWUSR 。通常情况下将他们按位或
同时我们也可以用下面的宏声明数组:
  1. 1 Module_param_array(name , type , num , perm)
5. 模块符号导出
当一个模块要使用另一个模块的函数(变量)的时候 , 要使用EXPORT_SYMBOL(符号名)或者EXPORT_SYMBOL_GPL(符号名)来申明 。
注:EXPORT_SYMBOL_GPL()只适用于遵循GPL协议的模块
简单内核模块实现
想必大家都记得我们在学习某种语言的时候 , 写的第一个程序大部分都是输出hello world , 所以我接下来用我们刚才介绍的内核模块去完成hello world 。


推荐阅读