zoukankan      html  css  js  c++  java
  • linux BSP中添加新驱动

    开发工作中,经常需要添加一些新的驱动,但是有时候不想自己写Makefile,或者是驱动需要编译到内核里,那我们该如何才能把驱动加到BSP里面,只需按照原来的编译步骤就能得到想要的ko文件,或者直接编译到uImage呢?一个新驱动添加大概需要以下三个步骤:

    一,编写你的驱动文件,就是new_driver.c,并将其放到你想放的目录下,比如drivers/misc/ 。

    二,修改drivers/misc/Makefile,其格式,打开便知,如下: 

     1 obj-$(CONFIG_PLAT_NOMADIK)    += gpio-nomadik.o
     2 obj-$(CONFIG_GPIO_RDC321X)    += rdc321x-gpio.o
     3 obj-$(CONFIG_GPIO_JANZ_TTL)    += janz-ttl.o
     4 obj-$(CONFIG_GPIO_SX150X)    += sx150x.o
     5 obj-$(CONFIG_GPIO_VX855)    += vx855_gpio.o
     6 obj-$(CONFIG_GPIO_ML_IOH)    += ml_ioh_gpio.o
     7 obj-$(CONFIG_DA9052_GPIO_ENABLE)+= da9052-gpio.o
     8 obj-$(CONFIG_AB8500_GPIO)       += ab8500-gpio.o
     9 obj-$(CONFIG_GPIO_TPS65910)    += tps65910-gpio.o
    10 obj-$(CONFIG_NEW_DRIVER)        += new_driver.o

      第十行就是需要自己添加的,那这个CONFIG_NEW_DRIVER在哪里体现呢?看下一步。

    三,修改drivers/misc/Kconfig。这个文件是在make menuconfig时候会体现出来,或者如果做了些默认的配置,那么直接make就能实现编译。如下:

     1 config NEW_DRIVER
     2     tristate "new driver"
     3     default m
     4     help
     5         some new driver‘s information。
     6 
     7 
     8 config DEBUG_GPIO
     9     bool "Debug GPIO calls"
    10     depends on DEBUG_KERNEL
    11     help
    12       Say Y here to add some extra checks and diagnostics to GPIO calls.
    13       These checks help ensure that GPIOs have been properly initialized
    14       before they are used, and that sleeping calls are not made from
    15       non-sleeping contexts.  They can make bitbanged serial protocols
    16       slower.  The diagnostics help catch the type of setup errors
    17       that are most common when setting up new platforms or boards.

    简单解释一下,tristate 是一个三态,可以被编译成内核,模块或不编译。这里的default m。就是默认情况下编译成模块。在make menuconfig上的提醒是<>new driver. <>可以选y,n,m.

    上面代码的第9行,不是tristate,而是bool。那在menuconfig里就不是<>.而是[].只能选Y和N。就是编译进内核还是不编译。

    depends on是依赖关系,就是如果DEBUG_KERNEL选中或者说是有效,才出现DEBUG_GPIO这一选项。

    help就是一些帮助或描述信息。可以自己随便瞎写。

    ok,目前为止就可以将你的新驱动加载进去了。如果你想确认,配置好后,可以打开linux目录下的.config文件,这个是终极文件。看看是否CONFIG_NEW_DRIVER被定义成y还是m,还是找不到。

    编译tips:make menuconfig 或指定架构 make ARCH=arm menuconfig,是一个文字图形界面,可以根据要求配置。

         make uImage直接编内核。

         make modules。编译模块。就是配置成m的,被编译成ko文件。(那天错写成module,还以为命令不对)

    附上一个单独可以编译的Makefile文件

     1 KERNELDIR = /home/vmuser/ltib_src/ltib/rpm/BUILD/linux/
     2 TOOL_DIR =/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/
     3 CC=$(TOOL_DIR)/arm-none-linux-gnueabi-gcc
     4 PWD := $(shell pwd)
     5 #CROSS_COMPILE = /opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-
     6 #CC = $(CROSS_COMPILE)gcc
     7 LD := $(TOOL_DIR)arm-fsl-linux-gnueabi-ld
     8 
     9     obj-m := gpio_cyc.o
    10 
    11 modules:
    12     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    13 
    14 clean:
    15     rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers 
    16 
    17 .PHONY: modules clean

    这个可以作为模版来参照,不过可能比较简单,不一定都能实现哦,根据错误提示可以修改。

    参考:

      Kconfig:

      http://lhsblog01.blog.163.com/blog/static/102004519201022110295858/

      http://www.cnblogs.com/taomaomao/archive/2012/01/05/2312816.html

      makefile:

      http://blog.sina.com.cn/s/blog_74d98ffe01016unh.html

    谢谢!

  • 相关阅读:
    让Mootools的语法结构像Jquery那样
    從此不再談jquery,马上忘掉他开始学Mootools
    解决Firefox的Sync不能同步的问题
    用php做模糊而又精确的查找
    Jquery弹出层插件和拖拽插件的结合使用范例
    Jquery优化效率 提升性能解决方案
    该死的百度部落格又做了什么改动?
    想念
    硬盘出现“I/O设备错误的解决方法
    jquery插件 弹出层的效果实现代码
  • 原文地址:https://www.cnblogs.com/cyc2009/p/4042269.html
Copyright © 2011-2022 走看看