Chinaunix首页 | 论坛 | 博客
  • 博客访问: 722641
  • 博文数量: 105
  • 博客积分: 3532
  • 博客等级: 中校
  • 技术积分: 1328
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-20 18:57
文章分类

全部博文(105)

文章存档

2015年(1)

2014年(1)

2013年(7)

2012年(14)

2011年(21)

2010年(61)

分类: LINUX

2011-02-26 12:55:09

  1. 首先给出文件的目录结构如下:

    |-- A

    | |-- Makefile <-----1

    | |-- file2

    | | |-- Makefile <-----2

    | | `-- file2.c

    | `-- file4.c

    |-- B

    | |-- Makefile <-----3

    | `-- file3.c

    |-- Makefile <-----4

    |-- file1.c

    `-- inc

        `-- a.h


    有主目录A与B, A下有子目录file2

  2. file1.c 文件内容:

    #include <linux/module.h>
    #include <linux/init.h>

    void function2(void);

    int init_module(void)
    {
            function2();
           return 0;
    }

    void cleanup_module(void)
    {
           return;
    }


  3. file2.c 文件内容

    #include "a.h"

    void function3(void);

    void function2(void)
    {
    #ifndef MMAN

    #error "12312312312321"

    #endif
      function3();
    }


  4. file3.c 文件内容:

    void function4(void);

    void function3(void)
    {
           function4();
    }


  5. file4.c 文件内容:

    #include <linux/module.h>

    void function4(void)
    {
           printk("done\n");
    }


  6. a.h 文件内容:

    #ifndef A_INC

    #define A_INC

     
    #define SYMBOL 1111

     
    #endif


  7. 以下给出两种Makefile的写法:
    1. 第一种:
      1. 标号为1 Makefile内容:

        obj-y := file2/
        lib-m := file2/file22.o file4.o


      2. 标号为2 Makefile内容:

        obj-y := file22.o

        file22-objs := file2.o
        EXTRA_CFLAGS := -DMMAN -I$(src)/../../inc


      3. 标号为3 Makefile内容:

        lib-m := file3.o


      4. 标号为4 Makefile内容:

        ifneq ($(KERNELRELEASE),)


        obj-y := A/ B/

        obj-m := module.o

        module-objs := file1.o A/lib.a B/lib.a


        EXTRA_LDFLAGS := --start-group # solving circular references in archives


         

        else

         

        #KSRC = /lib/modules/$(shell uname -r)/build


        KSRC = /usr/src/linux-headers-$(shell uname -r)

        PWD = $(shell pwd)

         

        default:
            $(MAKE) -C $(KSRC) M=$(PWD)
        clean:
            $(MAKE) -C $(KSRC) M=$(PWD) clean
        endif


    2. 第二种:
      1. 标号为1 Makefile内容:

        obj-y := file2/

         
        obj-y += a.o
        a-objs := file4.o


      2. 标号为2 Makefile内容:

        obj-y := file22.o

        file22-objs := file2.o

        EXTRA_CFLAGS := -DMMAN -I$(src)/../../inc


      3. 标号为3 Makefile内容:

        obj-y :=b.o

        b-objs := file3.o


      4. 标号为4 Makefile内容:

        ifneq ($(KERNELRELEASE),)

         

        obj-y := A/ B/

        obj-m := module.o

        module-objs := file1.o A/built-in.o B/built-in.o

         

        EXTRA_LDFLAGS := --start-group # solving circular references in archives


         

        else

         

        #KSRC = /lib/modules/$(shell uname -r)/build


        KSRC = /usr/src/linux

        PWD = $(shell pwd)

         

        default:

                $(MAKE) -C $(KSRC) M=$(PWD)

         

        clean:

              $(MAKE) -C $(KSRC) M=$(PWD) clean

         
        endif


  8. 很有用噢
阅读(7551) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2011-03-05 16:44:37

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com