模块(module)是在内核空间运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是可以装载到系统中作为内核的一部分运行,从而可以动态扩充内核的功能。模块最主要的用处就是用来实现设备驱动程序。使用模块的优点: 1,将来修改内核时,不必全部重新编译整个内核,可节省不少时间 ;2,系统中如果需要使用新模块,不必重新编译内核,只要插入相应的模块即可。这两点对于内核开发尤为有用,那么下面我们就简单学习以下module的编写方法。以一个完整的“Hello word”模块为例。
(资料图片仅供参考)
首先实现的是具体的代码部分:
这个模块中定义了两个函数,其中hello_init在模块装载到内核时调用,而hello_exit在模块被移除时调用。module_init与module_exit使用了内核特殊宏来表示上述两个函数说扮演的角色。而MODULE_LICENSE用来告诉内核该模块所采用的自由许可证。
有了代码后我们还需要将其编译成模块,这个时候就需要用到Makefile,Makefile的具体内容如下:
Makefile中内容的含下次学习,将两个文件放到同一个目录下,执行make命令,执行完后就会生成一个ko文件,这个ko文件就是我们需的module。
有了这个ko,我们就可以将其加载到Linux内核中了,不过需要注意的是,加载与卸载内核模块都需要使用root权限。
加载内核使用的是insmod命令:
一般情况下,没异常打印就表示加载成功了,但为了确认我们可以使用lsmod命令查看内核中已加载的module:
通过这个命令我们果断看到了我们所希望的helloModule这个模块。此时我们就可以通过modinfo这个命令查看到这个module的信息了:
那如果此时我们不再需要这个模块了我们则可以通过rmmod这个命令将其从内核中卸载:
但我们发现无论加载还是卸载模块,我们都没有看到printk中的打印,这主要是printk会根据日志打印级别来决定时候把消息打印到当前控制台上,决定的因素是日志级别时候小于console_loglevel值,那我们是不是就无法看到这个打印了吗,当然不是,我们可以通过dmesg查看到:
这里由于我实上次,所以我们看到了上次打印。
商务部重要生产资料市场监测系统数据显示,上周(11月28日-12月4日),宁夏煤炭价格132667元吨,持平,其中无烟煤、动力煤、炼焦煤均持平更多
2022-12-21 09:56:42据广东省重要生产资料市场监测系统显示,上周(12月5日至12月11日),广东省煤炭均价1523元吨,环比上涨66%。原因分析:当前煤炭产能受控更多
2022-12-21 10:17:52据商务部重要生产资料市场监测系统显示,上周(2022年11月28日-12月4日),云南省煤炭均价为14244元吨,环比上涨02%。其中,动力煤均价83更多
2022-12-21 10:04:04监测系统数据显示:11月份山西煤炭价格整体下跌。煤炭平均价格为128685元吨,环比下跌15%。其中:无烟煤2号洗选块煤平均价格为15742元吨,更多
2022-12-21 10:13:42近期市场情况综述 产地市场近期价格小幅回落,榆林地区回落相对明显。供应端主产区整体维持正常生产,汽运运力也较为充足,发改委要求更多
2022-12-21 10:10:35截至12月15日,国家能源集团胜利能源煤炭产销年累计完成26003万吨,同比增长1904万吨,创历史新高,提前16天完成全年煤炭产销任务。 今更多
2022-12-21 09:17:40青海省发改委消息,10月下旬以来,省内多地出现新冠肺炎疫情,正值迎峰度冬能源保供的关键时期,省发展改革委积极协调相关部门、企业努力更多
2022-12-21 09:17:23榆林市发改委消息,11月份全市动力煤市场交投活跃度不高,产地局部地区窄幅上下调整,其中陕蒙市场涨跌互现,港口市场则承压下行,与上月更多
2022-12-21 09:00:00截至12月15日,国家能源集团新朔铁路年累计货物发运量达151094万吨,其中煤炭发运量150024万吨,货物、煤炭运量均突破15亿吨大关,能源保更多
2022-12-20 10:04:39记者近日从国家矿山安监局山西局了解到,山西省严格落实强装备、夯基础的工作要求,推广先进适用装备,淘汰落后技术装备,提升了煤矿本质更多
2022-12-20 09:58:52