TongxinV / oneBook

记录自己的知识框架,有时写写BLOG CSDN博客地址

Home Page:https://blog.csdn.net/TongxinV

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

将驱动添加到内核中

TongxinV opened this issue · comments

将驱动添加到内核中

驱动会以两种形式存在,野生家养。所谓野生的就是一个驱动源文件再加上一个Make file。野生驱动在很多情况下是非常流行的。譬如说我今天买了一个USB的网卡,那么这个USB网卡的厂家就要给我提供一个USB网卡的驱动。那么这个驱动从哪里来呢,我可以从他的官网上去下载.c文件和Makefile。这个 Makefile 是需要自己修改的,比如:

Makefile:

# 开发板的linux内核的源码树目录
KERN_DIR = /root/driver/kernel    /*这边需要改,改成你自己的内核源码树目录*/

obj-m	+= leds-s5pv210.o
all:
	make -C $(KERN_DIR) M=`pwd` modules 
cp:
	cp *.ko /root/x210_porting/rootfs/rootfs/driver_test		
.PHONY: clean	
clean:
	make -C $(KERN_DIR) M=`pwd` modules clean

然后make 生成一个.ko文件,然后insmod这样开发板上就可以使用USB网卡了
家养:像内核就有很多家养的驱动,DM9000等

实际上我们一个驱动文件是家养的还是野生跟我们驱动文件本身是没有任何关系的,就是我这个.c文件写好了我可以是野生的也可以是家养的,这只是一个存在形式而已,跟自身的代码是没有关系的。所以我们可以把一个家养的驱动文件从内核提出来变成一个野生的,也可以...

驱动的存在形式

(1)野生,优势是方便调试开发,所以在开发阶段都是这种
(2)家养,优势可以在内核配置时make menuconfig决定内核怎么编译,方便集成

驱动开发的一般步骤

(1)以模块的形式在外部编写、调试
(2)将调试好的驱动代码集成到kernel中

实践

(1)关键点:Kconfig、Makefile、make menuconfig
(2)操作步骤:

  • 第1步:将写好的驱动源文件放入内核源码中正确的目录下

  • 第2步:在Makefile中添加相应的依赖
    obj -$(CONFIG_LEDS_S5PV210) += leds-s5pv210.o

  • 第3步:在Kconfig中添加相应的配置项

    我们在内核移植的课程中讲到过make menuconfig 和 Kconfig 、.config文件的对应关系

config LEDS_S5PV210		//名字取LEDS_S5PV210,CONFIG_是系统帮我们添加的
tristate "LED Support for S5PV210(X210)" 
                                 //tristatete 三态;后面那一串是在meuconfig配置的名字
//depends on MFD_88PM860X  //依赖,可以去掉因为我们这个确实可以不依赖什么
help
  This option enables support for on-board LED drivers found on S5PV210
  • 第4步:make menuconfig

最后生成的.config内容形式如下

CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ADFS_FS is not set

注:弄成模块,.ko 文件在相应的文件夹下