【linux】——linux驱动学习笔记(一)——驱动编译的两种方式

http://blog.csdn.net/bull_liu/article/details/7084576

驱动程序可以和内核一起编译,也可以作为一个模块单独编译。但为了方便调试驱动程序,一般将以模块化的方式对驱动进行编译。

                一、 以模块化的方式编译驱动程序

               板子是FL2440,linux内核是2.6.12的,以led驱动程序为例。源文件为:驱动程序s3c2440_leds.c、测试程序led.c。现在只需写段Makefile,即可对led驱动程序进行编译。内容为:

[plain] view plain copy print ?
  1. obj-m :=s3c2440_leds.o  
  2. KERNELDIR ?= /root/linux-2440/linux-2.6.12  
  3. PWD := $(shell pwd)  
  4. default:  
  5.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules  

然后执行make命令即可,生成的s3c2440_leds.ko就是我们需要的驱动模块文件。然后将led.c交叉编译生成led,把s3c2440_leds.ko和测试程序led传到板子上,改好权限后,执行如下命令即可:

[html] view plain copy print ?
  1. #insmod s3c2440_leds.ko  
  2. #./led  

         

-C $(KERNELDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。

 

            二、和内核一起编译

              还是以FL2440、led驱动程序为例。开发板的linux源码包在/root/linux-2440/linux-2.6.12目录下,将s3c2440_leds.c拷贝到源码包的dirvers/char目录下,并修改drivers/char目录下的Makefile文件,在其中对应位置添加如下内容1,在Kconfig文件对应位置中添加内容2:

[plain] view plain copy print ?
  1. 1.  
  2. obj-$(CONFIG_S3C2440_LEDS) += s3c2440_leds.o  
  3.   
  4. 2.  
  5. config S3C2440_LEDS  
  6.        tristate "S3C2440 LEDS Drivers"  
  7.        depends on ARCH_S3C2440  
  8.         help  
  9.                SBC2440 User keys  

              然后,在源码包目录下执行make menuconfig 进行选项选择时,在Device Driver项下的Character drivers项下,会出现S3C2440 LEDS选项,选择好相应的模块后,编译成功后,下载到开发板上,然后直接运行led测试程序即可。

 

你可能感兴趣的:(【linux】——linux驱动学习笔记(一)——驱动编译的两种方式)