zoukankan      html  css  js  c++  java
  • 驱动编译配置

    当我们写好驱动模块的代码后下一步就是编译,如果我们想让他和内核的其他驱动一样自动化编译完成,我们只需要实现自己的Makefile

    可以写成如下:

    obj-m:test.o
    
    #obj-y:test.o
    
    #obj-n:test.o

    其中后面的

    -m:表示编译成可装载模块,需要自己Insmod rmmod,比较灵活,适合调试或者升级替换,免除刷机。

    -y:表示跟内核笔译在一起,成为不可拆分的一部分,不需要自己去insmod ,同时意味着更新这个驱动整个内核都需要更新,板子需要重新刷机,不便于调试。

    -n:表示不编译该模块。

    编译成模块后模块的名称是test.ko 编译只依赖test.c一个c文件如果有多个文件依赖,或者想自己定一个模块名称也可改成如下:

    obj-m:=MODULE_NAME.o
    MODULE_NAME-objs:=file1.o file2.o
    file3.o
    

      

    当然以上是山寨做法,标准的做法应该是实现Kconfig文件及Makefile,并且使用

    make manuconfig

    调出图形界面来配置。

    Kconfig

    #
    # IIC  device configuration
    #
    
    menuconfig CHAR_I2C
            tristate "L io device support."
             default y
            ---help---
              This is i2c char devices group.
    
    if CHAR_I2C
    config CHAR_I2C_TW8836
            tristate "TW8836 MCU I2C DEVICE"
            depends on I2C
            ---help---
            TW8836 Char device driver
            If you have a mcu chip  working with
            an I2C bus say Yes and it will be accessible from within Linux.
            To compile this driver as a module, choose M here; the module will be
            called char_i2c_tw8836.
    
    endif #CHAR_I2C
    

      

    Makefile

    #
    # Makefile for the iic tw8836  device drivers.
    #
    obj-$(CONFIG_CHAR_I2C_TW8836) += tw8836.o
    

      Kconfig中的内容就是提供给make manuconfig显示界面用的,其中CONFIG_CHAR_I2C_TW8836宏来控制这个模块的编译,这个模块又依赖IIC 

    make manuconfig配置保存后,会把内核配置文件更新成

    .config

    文件保存在内核编译目录下,内核编译的时候就会去找这个配置文件,将相应的配置结果更新的各个Makefile里面,此时CONFIG_CHAR_I2C_TW8836变成y /m/n

  • 相关阅读:
    Java实现邮箱找回密码
    使用Java程序发送Email
    SSH返回Json格式的数据
    destoon二次开发基础指南
    揭秘:中国企业家十大顶级圈子
    Windows环境下完全手工配置Apache、MySQL和PHP
    windowns 查看端口占用
    MySQL主从同步机制及同步中的问题处理
    Apache Rewrite 规则详解
    PHP输出当前进程所有变量 / 常量 / 模块 / 函数 / 类
  • 原文地址:https://www.cnblogs.com/tid-think/p/10613008.html
Copyright © 2011-2022 走看看