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,还以为命令不对)

参考:

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

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

谢谢!

时间: 2024-10-15 18:31:34

linux BSP中添加新驱动的相关文章

Linux内核中添加系统调用接口简单示例

1. Linux体系结构 Linux系统的地址空间分为用户空间和内核空间,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移. 2. 系统调用接口 ① 一般情况下,用户进程不能访问内核空间.Linux内核中提供了一组用于实现各种系统功能的子程序,用户可以调用它们访问Linux内核的数据和函数,这些子程序称为系统调用接口(SCI). ② 系统调用和普通函数的区别:系统调用由操作系统内核实现,运行于内核态:普通函数调用由函数库或用户自己提供,运行于用户态. 3. 系统调用分类:主要分3大类 ①

向linux内核中添加外部中断驱动模块

本文主要介绍外部中断驱动模块的编写,包括:1.linux模块的框架及混杂设备的注册.卸载.操作函数集.2.中断的申请及释放.3.等待队列的使用.4.工作队列的使用.5.定时器的使用.6.向linux内核中添加外部中断驱动模块.7.完整驱动程序代码.linux的内核版本为linux2.6.32.2. 一.linux模块的框架以及混杂设备相关知识 1.内核模块的框架如下图所示,其中module_init()(图中有误,不是modules_init)只有在使用insmod命令手动加载模块时才会被调用,

如何在caffe中添加新的Layer

如何在caffe中添加新的Layer 本文分为两部分,先写一个入门的教程,然后再给出自己添加maxout与NIN的layer的方法 (一) 其实在Github上已经有答案了(https://github.com/BVLC/caffe/issues/684) Here's roughly the process I follow. Add a class declaration for your layer to the appropriate one of common_layers.hpp, 

源码方式向openssl中添加新算法完整详细步骤(示例:摘要算法SM3)【非engine方式】

openssl简介 openssl是一个功能丰富且自包含的开源安全工具箱.它提供的主要功能有:SSL协议实现(包括SSLv2.SSLv3和TLSv1).大量软算法(对称/非对称/摘要).大数运算.非对称算法密钥生成.ASN.1编解码库.证书请求(PKCS10)编解码.数字证书编解码.CRL编解码.OCSP协议.数字证书验证.PKCS7标准实现和PKCS12个人数字证书格式实现等功能. openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能.openssl支持Linux.UNIX.wi

详解VMware 虚拟机中添加新硬盘的方法

一.VMware新增磁盘的设置步骤 (建议:在设置虚拟的时候,不要运行虚拟机的系统,不然添加了新的虚拟磁盘则要重启虚拟机) 1.选择“VM”----“设置”并打开,将光标定位在“硬盘(SCSI)”这一选项,然后点击下方的“添加”按钮 2.点击下一步,执行下一个步骤 3.选择磁盘类型 4.根据提示,创建一个虚拟的磁盘,并点击下一步 5.设置磁盘大小,点击下一步 6.选择存储位置,最后点击完成 以下是对虚拟机中Linux和widows中对于新的虚拟磁盘的挂载的方式的介绍 二.虚拟机中windows对

如何在github的wiki中添加新的图片

本文简单介绍在github的wiki中添加新的图片对方法 在github的wiki中,可以展现图片,可是,怎么添加图片,从网页上展示的信息来看,不是很清楚. 添加图片,基本上就是通过下面几步来完成: 1. clone wiki 2.创建图片目录 3.在图片目录中添加图片 4.在wiki中引用图片 具体操作步骤如下: 1. clone wiki git clone https://github.com/xx/xx.wiki.git 该url可以从clone this wiki locally 拿到

MFC中添加新的对话框

MFC工程中,除了系统自动生成的一些对话框之外,还需要根据自己的需求,添加新的对话框.这里总结下自己最近使用的方法. 首先,找到Resource View中自己新建的工程,然后右键,选择Add Class,然后弹出的对话框中对新增的类进行设置,在Base Class需要选择CDialog,然后输入新增类的名称之后,就新增了一个类.这个类不仅有对应的头文件还有.cpp文件,以及一个与这个类对应的UI界面. 然后,需要将新增的类对应的头文件包含到它对应的父类的头文件中,同时在protected域中声

如何在iOS开发中添加新的字体

iOS 开发默认字体是 Heiti SC ,即我们常用的「黑体-简」 用过一段时间后,就会发现字体过于单调了 ,那么怎么在iOS开发中添加新的字体呢 ,这里教你两种方法. 1.使用系统自带的字体 搜索fonts,不难发现,系统中是有不少字体的,而这些字体也是都是可以使用的. 这些字体只用时可以通过代码来设置,也可以直接来设置,方法很简单: 将text的属性设置为Attributed,再选择自己想要的系统字体就OK啦 2.使用自己从网上下载的字体 首先从网上下载自己喜欢的字体,将下载好的字体拖入当

向SQL Server 现有表中添加新列并添加描述.

注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008). 工作需要, 需要向SQL Server 现有表中添加新列并添加描述. 从而有个如下存储过程. (先附上存储过程然后解释) 代码 /********调用方法********** 作用: 添加列并添加列描述信息 调用: exec [SetColumnInfo] '表名', '列名', N'列说明,描述','列类型{默认:NVARCHAR(50)}','列默认值{默认:NULL}' *********