Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17671
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-18 10:27
文章分类
文章存档

2015年(3)

2014年(4)

我的朋友

分类: LINUX

2015-10-20 15:14:39

    linux的编译是个复杂的系统,如果想了解细节可查看内核源代码中的Documentation/kbuild目录下的文件。
    编译之前首先需要搭建编译环境。需要提供正确版本的编译器、工具。文件Documentation/Changes文件列出了所需的工具版本。
    Makfile
        obj-m := hello.o
        当然如果要编译其他ko,则如下形式:
        obj-m += hello.o
        如果hello.o有两个源文件生成则应写成:
        obj-m += hello.o
        hello-objs := hello1.o hello2.o
    编译
        在当前目录下编译
        make  $kernel_path  M=`pwd`  hello.o 
        交叉编译arm平台:make -C  $kernel_path  M=`pwd`  hello.o ARCH=arm CROSS_COMPILE=$cross_tooldir/bin/arm-none-linux-gnueabi-
    模块版本依赖问题
        编译时没有带CONFIG_MODVERSION选项,那么模块版本必须和内核一致
        编译时选择了CONFIG_MODVERSION选项,那么模块版本将没有限制  .c文件中加入如下字段即可
        #ifdef CONFIG_MODULES
                #ifdef CONFIG_MODVERSIONS
                        #MODFLAGS += -DMODVERSIONS -include $(HPATH)/linux/modversions.h
                #endif
           #endif
    头文件
           #include  //包含符号和函数的定义
           #include      //指定初始化和清除函数
阅读(457) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~