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

来源:互联网 发布:域名要备案才能用吗 编辑:程序博客网 时间:2024/06/11 16:18

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

  大家最熟悉的一句就是:

  printf(“Helloworld!/n”);

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

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

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

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

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

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

}

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

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

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

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

原创粉丝点击