Linux内核编程(项目笔记)——项目:Hellomod

项目:Hellomod

按照书中项目流程在内核2.6.27.5中实验,出现错误:

error : invalid preprocessing directive#MODULE_LICENCE

把前面的#去掉,又出现这样的错误:

erro : expected declaration specifiers or ‘…’before string constant

之后把MODULE_LICENCE这一行注释掉,实验可正常运行,但是在/var/log/messages的内容中出现这一行:

hellomod : module licence ‘unspecified’ taintskernel.

即没有定义模块通行证,所以这一行是不应该被注释的。

所以现在就找找MODULE_LICENCE这些知识点。

网上找了下,原来在这个项目中书出现了两个错误,不过都是在MODULE_LICENCE的:

1、 MODULE_LICENCE前面的#应该是没有的;

2、 MODULE_LICNECE应该是MODULE_LICENSE

这样就可以了。

之后就探讨这个驱动程序是如何工作的:在用户态中insmod加载模块,即调用模块初始化函数module_init(),其中这个模块初始化函数是通过系统调用sys_init_module()进入内核态,执行内核打印语句printk函数,打印出的信息保存在/var/log/messages中;通过rmmod卸载模块,调用module_exit(),系统调用sys_delete_module(),打印信息等与上一样。

模块编译的过程:通过执行脚本文件把.c文件通过源码环境编译为加载模块。

问题:

1、.c文件是如何在源码环境/usr/src/kernel中编译为可加载模块的?

 

2、内核打印信息如何打印到终端而不是日志文件?

在项目current系统变量中给出答案。

3、 MODULE_LICENCE和MODULE_LICENSE的区别。

 

4、 把Makefile和doit脚本合为一个Makefile文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值