zoukankan      html  css  js  c++  java
  • 把驱动编译进内核和编译成模块

    关于把驱动编译进内核的文章,网络上面非常多,但是,我今天实际操作了一下,按照网络上面的方法,还是会遇到不少的问题,遂总结如下:

    一、       驱动程序编译进内核的步骤

    在 内核中增加程序需要完成以下五项工作:

    1. 将编写的源代码复制到 Linux 内核源代码的相应目录;

    2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项;

    3. 在目录的 Makefile 文件中增加对新源代码的编译条目。

    4.在该目录的上一级目录的Kconfig文件中把上面第二步修改的Kconfig包括到此Kconfig中。

    5.在该目录的上一级MakeFile中修改下,使得可以编译到该目录。

    (第四、第五步一般情况下,内核的架构已经搭好,不需要改动,但是如果是在相应的驱动目录新建新的目录,那么是一定要改动的,在实际操作中,可能还会遇到问题的,那么还要进一步检查上一级目录的Makefile和Kconfig,还有关于添加依赖的问题,有些目录是某个配置已经配置才会编译到,都要灵活处理)

    下面我以在4412板子上面的经历作个总结。

    我要在该板子上面porting蓝牙驱动,步骤如下:

    1.首先在drivers目录下面新建了一个目录bluetooth

    2.然后将驱动的C文件和H文件放置到该目录。

    3.然后从平行的目录中拷贝Kconfig文件和Makefile文件。

    4.按照规则修改Kconfig文件和Makefile文件。

    5.第五步是比较关键的一步,许多博客里面没有讲到。要检查bluetooth的目录的上一层目录的Kconfig文件和Makefile文件,看看有没有把相应的子目录bluetooth包含进去。如何没有包含进去,也是配置不了,或者编译不到。

    6。执行make menuconfig 进行相应的配置,并进行编译、

    7.make zImage 。如果最后编译出来还是出问题的话,考虑下各种Kconfig文件的依赖关系,必须所有的依赖都在.config里面配置了,才能生效。


    二、以模块的方式编译驱动程序 2017-01-15

     主要分为如下的几部:

    1.在drivers目录新建目录bluetooth

    2.将驱动的C文件和H文件啊拷贝过来。

    3.直接运行编译命令,或者编写相应的makefile,并运行make

    运行的命令可以是:make -C ~/my_android.5.0/linux-3.0.86/ M=$(pwd) modules (这句话是编译的命令,也是makefile的核心)

    以下附加一个普通的Makefile文件样子:

    PWD = $(shell pwd)--
    #obj-$(CONFIG_BT_RTKBTUSB)>->---+= rtk_btusb.o
    #obj-m := btusb.o
    KERNEL_DIR = /home/libs_liu/my_android.5.0/linux-3.0.86
    obj-m := btusb.o
    all:
    >---$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
    clean:
    >---rm -f *.o *.ko *.mod.* *.order *.symvers

     关于该问题还有一个疑问?

    如何在安卓启动的时候将驱动文件加载进系统,试过在各种init.rc里面添加,不知为何没有生效。

    后来的一个折中的解决办法是:在init.tiny4412.sh 里面添加加载驱动的文件,并且是在一个已经存在的目录里面,我开始想在某个init.rc里面新建一个目录,可是没有成功,目前还不清楚原因。

  • 相关阅读:
    [译]The Python Tutorial#4. More Control Flow Tools
    Python基础-函数参数
    Python进阶-继承中的MRO与super
    Python基础-类
    [译]The Python Tutorial#6. Modules
    Python基础-包与模块
    Python基础-类变量和实例变量
    Python进阶
    iphonex适配
    web前端安全
  • 原文地址:https://www.cnblogs.com/libs-liu/p/6264092.html
Copyright © 2011-2022 走看看