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

    谢谢!

  • 相关阅读:
    人工智能正在跨越“恐怖谷”,未来或将善恶共存
    大数据可视化的途径
    数据科学家公司生存指南TOP30秘诀
    真真假假?专访七位AI专家,辨析医疗人工智能真伪
    大数据主要应用于哪些行业,应用价值是什么?
    【人工智能】 火爆的机器学习和人工智能,为何在金融业四处碰壁?
    大数据时代,你是否拥有「文科思维」?
    AI和企业管理
    刷脸新时代:我国人工智能技术世界领先 产业规模3600亿元
    交待给你的事办完了,就不能回个话么?
  • 原文地址:https://www.cnblogs.com/cyc2009/p/4042269.html
Copyright © 2011-2022 走看看