安庆信息港
教育
当前位置:首页 > 教育

精华推荐内核模块编程的详细介绍4

发布时间:2019-06-20 01:32:26 编辑:笔名

  Linux 里提供了一个 command,叫 genksyms,就是用来帮我们产生这种 .ver 的档案的。它会从 stdin 里读取 source code,然后检查 source code 里是否有 export 的 variable 或 function。如果有,它就会自动为每个 export 出来的东西产生一些 define。这些 define 就是我们之前说的。等我们有了这些 define 之后,只要在我们的 module 里加入这些 define,那 export 出来的 function 或 variable 就会变成上面那个样子。 假设我们的程序都放在一个叫 main.c 的档案里,我们可以使用下列的方式产生这些 define。 gcc -E -D__GENKSYMS__ main.c | genksyms -k 2.2.1 r

  gcc 的 -E 参数是指将 preprocessing 的结果 show 出来。也就是说将它 include 的档案,一些 define 的结果都展开。-D__GENKSYMS__ 是一定要的。如果没有定义这个 constant,你将不会看到任何的结果。用一个管线是因为 genksyms 是从 stdin 读资料的,所以,经由管线将 gcc 的结果传给 genksyms。-k 2.2.1 是指目前使用的 kernel 版本是 2.2.1,如果你的 kernel 版本不一样,必须指定你的 kernel 的版本。产生的 define 将会被放到 r 里。产生完 r 档之后,在 main.c 里将它 include 进来,那一切就 OK 了。有件事要告诉各位的是,使用这个方式产生的 module,其 export 出来的东西会经由 r 的 define 改头换面。所以如果你要让别人使用,那你必须将 r 公开,不然,别人就没办法使用你 export 出来的东西了。 讲了这幺多,相信各位应该都已经比较清楚 module 在 kernel 中是怎幺样一回事,也应该知道为什幺有时候 module 会无法加载了。除此之外,各位应该还知道如何使自己 module export 出来的东西也具有 kernel version 的 information。 接下来,要跟各位讲的就是,如何写一个 module 了。其实,写一个 module 很简单的。如果你了解我上面所说的东西。那我再讲一次,再用个例子,相信大家就都会了。要写一个 module,必须要提供两个 function。这两个 function 是给 insmod 和 rmmod 使用的。它们分别是 init_module(),以及 cleanup_module()。 int init_module();void cleanup_module();

  相信大家都知道在 Linux 里可以使用 insmod 这个 command 来将某个 module 加载。比方说,我有一个 module 叫 hello.o,那使用 insmod hello.o 就可以将 hello 这个 module 载到 kernel 里。观察 /etc/modules 应该就可以看到 hello 这个 module 的名字。如果要将 hello 这个 module 移除,则只要使用 rmmod hello 就可以了。insmod 在加载 module 之后,就会去呼叫 module 所提供的 init_module()。如果传回 0 表示成功,那 module 就会被加载。如果失败,那加载的动作就会失败。一般来讲,我们在 init_module() 做的事都是一些初始化的工作。比方说,你的 module 需要一块内存,那你就可以在 init_module() 做 kmalloc 的动作。想当然尔。 cleanup_module() 就是在 module 要移除的时候做的事。做的事一般来讲就是一些善后的工作,比方像把之前 kmalloc 的内存 free 掉。

糖尿病胃轻瘫消化不好怎么用药
糖尿病胃轻瘫消化不好治疗措施
怎样解决糖尿病胃轻瘫消化不好
友情链接
小孩睡觉流鼻血 孩子发烧手脚冰凉是什么原因 儿童健脾胃的药有哪些 小儿便秘治疗 小孩咳嗽发烧怎么办 小儿发烧咋办 小孩发高烧怎么退烧快 孩子止咳最快的方法 小孩早上起床咳嗽是什么原因 婴儿感冒咳嗽怎么办 小孩子老是发烧是怎么回事 孩子连续6天发烧正常不 小孩晚上咳嗽怎么办 孩子晚上咳嗽 宝宝消化不好怎么调理 婴幼儿便秘怎么办 三个半月宝宝感冒咳嗽怎么办 小孩发烧怎么回事 三岁宝宝晚上咳嗽厉害怎么办 宝宝有点咳嗽 小儿便秘 宝宝偶尔咳嗽 宝宝便秘了怎么办 小儿积食 婴儿反复发烧怎么办 小孩半夜咳嗽是什么原因 小儿风寒感冒 宝宝发烧咳嗽 小儿反复发烧 宝宝消化不好怎么调理 小孩子发烧40度危险吗 小孩子发高烧 孩子每次睡觉时咳嗽 小儿退烧方法 小孩晚上咳嗽怎么缓解 小孩夜咳 1岁宝宝发烧 孩子发烧 儿童干咳嗽怎么办最有效 宝宝抗病毒吃什么药好 小孩化痰吃什么好 小孩发烧处理方法 三个多月的宝宝咳嗽怎么办 小孩着凉咳嗽怎么办 小儿夜咳如何治疗 宝宝咳嗽怎么治 宝宝睡觉出汗怎么回事 小儿退烧 徐州有哪些性病科医院 苏州有哪些内分泌科医院 镇江有哪些碎石中心医院 湖州有哪些头颈外科医院 绍兴有哪些神经内科医院 衢州有哪些眼外伤医院 台州有哪些白内障医院 武汉有哪些小儿骨科医院 武汉有哪些肝胆外科医院 十堰有哪些其它科室医院 随州有哪些肿瘤科医院 神农架有哪些老年病科医院 神农架有哪些泌尿外科医院 平顶山有哪些小儿神经内科医院 平顶山有哪些口腔特诊科医院 安阳有哪些室缺医院 焦作有哪些五官科医院 资阳有哪些全科医院 张家口有哪些放射科医院 郴州有哪些骨科医院 齐齐哈尔有哪些乳腺外科医院 齐齐哈尔有哪些重症监护室医院 佳木斯有哪些内分泌外科医院 佳木斯有哪些耳鼻喉医院 黑河有哪些妇科医院 绥化有哪些小儿心外科医院 沈阳有哪些小儿胸外科医院 鞍山有哪些五官科医院 抚顺有哪些小儿皮肤科医院 营口有哪些骨外科医院 营口有哪些心外科医院 朝阳有哪些心血管外科医院 淮北有哪些超声科医院 安庆有哪些血管外科医院 黄山有哪些中医血液科医院 宿州有哪些牙周科医院 呼和浩特有哪些小儿康复科医院 南平有哪些牙周科医院 大庆二级医院哪家好 肿瘤科 固原有哪些特色医疗科医院 丰胸 冬季保健 运动保健 抽脂减肥 男性更年期 外阴 昌吉有哪些动脉导管未闭医院 明星护肤 巴州有哪些中医皮肤科医院 巴州有哪些中医乳腺外科医院 g点套