Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1176872
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: LINUX

2015-12-07 14:29:04

makefile文件

点击(此处)折叠或打开

  1. # File: Makefile
  2. # wangxiancai

  3. MODEXT = ko
  4. INSTALLDIR=/home/wangxc/linux/rootfs/nfs_2.6.13/wxc/driver/chardriver/ko
  5. CROSS=/home/wangxc/linux/toolchain/crosstools_3.4.1_softfloat/arm-linux/gcc-3.4.1-glibc-2.3.3/bin/arm-linux-
  6. KERNELDIR=/home/wangxc/linux/kernel/kernel-2.6.30

  7. CC= $(CROSS)gcc
  8. LD= $(CROSS)ld

  9. #############################################################################
  10. # Compiler Flags
  11. #############################################################################
  12. EXTRA_CFLAGS += -I$(KERNELDIR)/include
  13. #############################################################################
  14. # Make Targets
  15. #############################################################################
  16. obj-m := kthread.o
  17. default:
  18.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
  19. # Otherwise we were called directly from the command line; invoke the kernel build system.

  20. install: default
  21.     rm -rf $(INSTALLDIR)/kthread.$(MODEXT)
  22.     cp -rf $(PWD)/kthread.$(MODEXT) $(INSTALLDIR)

  23. clean:
  24.     rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.bak modules.order Module.symvers


点击(此处)折叠或打开

  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/timer.h>
  4. #include <linux/time.h>
  5. #include <linux/types.h>
  6. #include <net/sock.h>
  7. #include <net/netlink.h>

  8. static int kthread_init(void)
  9. {
  10.     /*功能 : 创建内核socket
  11.     参数 :
  12.             @net : &init_net : 网络名字空间namespace 指针,默认情况下都是使用 init_net这个全局变量。
  13.             @unit : NETLINK_OFS=30 : netlink协议类型。(内核空间自定义的,必须和用户空间程序一样)
  14.             @module : 固定是 THIS_MODULE
  15.             @cfg :
  16.     返回值 : 成功返回struct sock指针,失败返回NULL。
  17.     说明 : 基于socket的Netlink通信机制,完成内核空间与用户空间通信
  18.     函数原型 :
  19.     netlink_kernel_create(struct net *net, int unit, struct netlink_kernel_cfg *cfg) //3.14.23内核
  20.     {
  21.         return __netlink_kernel_create(net, unit, THIS_MODULE, cfg);
  22.     }
  23.     struct sock * __netlink_kernel_create(struct net *net, int unit, struct module *module, struct netlink_kernel_cfg *cfg) -----3.14.23内核
  24.     */
  25.         /*创建内核socket
  26.         extern struct sock *netlink_kernel_create(struct net *net, //2.6.30内核
  27.                            int unit,unsigned int groups,
  28.                            void (*input)(struct sk_buff *skb),
  29.                            struct mutex *cb_mutex,
  30.                            struct module *module);
  31.         *struct net : 是一个网络名字空间namespace,在不同的名字空间里面可以有自己的转发信息库,有自己的一套net_device等等。
  32.         * 默认情况下都是使用init_net这个全局变量
  33.         *NETLINK_TEST=25 自定义一种新的协议并加入协议族
  34.         */
  35.         nl_sk = netlink_kernel_create(&init_net, NETLINK_TEST, 1,nl_data_ready, NULL, THIS_MODULE);
  36.         if(!nl_sk)
  37.         {
  38.                 printk(KERN_ERR "my_net_link: create netlink socket error.\n");
  39.                 return 1;
  40.         }
  41.         printk("my_net_link_3: create netlink socket ok.\n");
  42.         return 0;
  43. }

  44. static void kthread_exit(void)
  45. {
  46.         if(nl_sk != NULL)
  47.         {
  48.                 /*释放内核socket连接: 指定的协议编号将不再可用*/
  49.                 sock_release(nl_sk->sk_socket);
  50.         }
  51.         printk("my_net_link: self module exited\n");
  52. }

  53. module_init(netlink_init);
  54. module_exit(netlink_exit);
  55.  
  56. MODULE_AUTHOR("wang.xiancai@eisoo.com");
  57. MODULE_LICENSE("GPL");

阅读(585) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~