写一个自己的proc文件

 

      最终目标是要通过xen下的Dom0中自己写的proc文件直接调用hypercall,实现gettimeofday的测试。

      首先要先完成proc的实现。来自若木的proc fs系列写的非常详细,很有帮助,当然,位于内核源码

Documentation/Docbook中的例子procfs_example.c也很有参考性,因为我只要实现一个简单的proc例子,所以只要实现initread的功能,以下是一个最最简单的proc例子,只要在/proc下生成一个readtestgettimedir/gettime,不过,我因为gettimeofday中测试的时候竟然忘记kmalloc,调试了我半天~我脑残啦!!!

      废话不多说,代码先贴出(xen-3.3.0/linux-2.6.18.8-xen):

 

  

 

    需要注意的是,最后一行中是用__initcall()来调用初始化函数gettime_init,当然还有一些其他的调用如module_init,一下是它的用法,

    The module_init() macro defines which function is to be called at module insertion time (if the file is compiled as a module), or at boot time: if the file is not compiled as a module the module_init() macro becomes equivalent to __initcall(), which through linker magic ensures that the function is called on boot.

    当然还有subsys_initcall,它也是一个宏,我们可以把它理解为module_init,只不过因为这部分代码比较核心,开发者们把它看作一个子系统,而不仅仅是一个模块。

    还有很多其他的,据说有7个,这里不再详细讨论,有兴趣的自己Google ~

    其他的都不难理解,比如说:proc_mkdir()是在/proc下创建一个目录,参数中NULL表示/proc主目录下,同样的,create_proc_entry()是创建一个文件,其中dir_pde表示父文件夹,create_proc_read_entry()是创建只读文件,之后就可以给他们的read_op赋值了。具体的原理可以参考若木的proc fs系列,这里有转载。

    写一个简单的proc文件并不困难,但如果你想更深入的了解其中的原理,就需要更多地去看内核的源代码,当然,在这个例子中还涉及到了kernel态对hypercall的调用,我想这个会在后面的文章中更详细地讲吧~

    第一次写这种文章,若有错误请多多指教@@

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值