内核模块编程入门

2581阅读 0评论2011-10-27 lthyxy
分类:LINUX

  1. //plp.c
  2. #include <linux/module.h>
  3. #include <linux/init.h>

  4. static int hello_init(void)
  5. {
  6.     printk("Hello linux_kernel,i'm lthyxy.\n");
  7.     return 0;
  8. }

  9. static void hello_exit(void)
  10. {
  11.     printk("bye,i will comeback!\n");
  12. }

  13. MODULE_AUTHOR("liutengfei ");
  14. MODULE_DESCRIPTION("plp example");
  15. MODULE_LICENSE("GPL");

  16. module_init(hello_init);
  17. module_exit(hello_exit);
  18. //Makefile
    1. obj-m += plp.o
    2. all:
    3.     make -C /usr/src/linux-source-2.6.32 M=$(shell pwd) modules
    4. clean:
    5.     make -C /usr/src/linux-source-2.6.32 M=$(shell pwd) clean
  19. linux-source-2.6.32 就是你的内核源代码目录的名字
  20. plp 就是你编写的模块的名字
  21. 之前一直出问题是由于没有把内核更新.
  22. 编译跟安装内核可以第一篇文章.
  23. 这2个文件放在同一目录下,且不要跟内核源代码目录在一起
  24. 如果都无误.
  25. 输入命令 make
  26. 你应该可以看见这样的东西:
  27. make -C /usr/src/linux-source-2.6.32 M=/home/lth modules
    make[1]: 正在进入目录 `/usr/src/linux-source-2.6.32'
      Building modules, stage 2.
      MODPOST 1 modules
    make[1]:正在离开目录 `/usr/src/linux-source-2.6.32'
  28. 这样表示编译成功.
  29. 现在你可以看看编译生成的模块的信息,
  30. 输入命令 modinfo plp.ko
  31. 可以看见这样的东西:
  32. filename:       plp.ko
    license:        GPL
    description:    plp example
    author:         liutengfei
    srcversion:     73FE812EBE8779ABACD68F0
    depends:       
    vermagic:       2.6.32.44+drm33.19 SMP mod_unload modversions 586
    注意这里 2.6.32.44+drm33.19 这个版本号一定要跟你 unmae -r  看见的版本号一致.
  33. 如果一切正常,现在可以转载和卸载模块了.
  34. 装载  insmod plp.ko
  35. 卸载 rmmod plp
  36. 装载后你也可以看是否装载进去了,
  37. 查看全部已经装载的模块的信息 输入 lsmod 你可以找到你刚才装好的模块的名字
  38. 怎么知道他已经运行了呢?
  39. 输入 dmesg
  40. 你可以看见
  41. [ 1755.734425] Hello linux_kernel,i'm lthyxy.
    [ 1771.969181] bye,i will comeback!
    这就是全部过程了.比写个C语言的hello,word复杂多了.但是很有挑战.希望你也一路顺风.






上一篇:ubuntu 下编译安装新内核
下一篇:Netfilter 详解