抓取内核信息(一)-从简单入手

 当Linux内核这样一个数百万行的大软件摆在面前时,不仅仅是望而生畏,还有老虎吃天无从下口的感觉。但实际上,在这个世界上,面对最复杂的事情,往往从简单做起或许有解。

  大家最熟悉的一句就是:

  printf(“Hello world!/n”);

  那么在内核中,把这个f换成kkernel:

  printk(“I’m in Linux Kernel!/n”);

  在适当的时候调用pirntk函数,你可以抓取你想要的任何内核信息。

   当然,在内核态下写程序,再也找不到你熟悉的main()函数。不过,凡事都需有一个入口点,一般程序的入口都是初始化函数:

    static int hello_init( void )
{  
   printk("Hello,World! from the kernel space...//n");  
   return 0;
   }
 
那么,谁调用它执行?module_init()函数!亦即module_init(hello_init),望名思意,这是对初始化函数进行调用的模块函数。也就是说,我们在内核态下写的函数,要装在一个模块中(而不是主框架main()中),这里的模块就像搭积木的一个个模块一样,可以被插入到内核中,而内核就像一个母板,系统管理员可以按需插拔模块。那么,拔出模块也就轻而易举了:

    static void hello_exit( void )
{  
     printk("Goodbye, World! leaving kernel space.../n");  

}

    想让这个函数得到执行,同样要调用内核提供的函数module_exit()!

   以上就是Linux内核模块的简单框架。当然,在内核代码中,还涉及其他很多的细节,但在此,去繁就简,为了与内核进行零距离接触,先动手写出代码在内核进进出出逛一趟。

  内核模块编程更多信息,请参看我们的Linux内核之旅网站中的Linux 2.6内核编程实例栏目。

  如何抓取内核更多的信息,请看下一讲。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值