LED驱动程序Word下载.docx

上传人:b****1 文档编号:4582359 上传时间:2023-05-03 格式:DOCX 页数:40 大小:35.98KB
下载 相关 举报
LED驱动程序Word下载.docx_第1页
第1页 / 共40页
LED驱动程序Word下载.docx_第2页
第2页 / 共40页
LED驱动程序Word下载.docx_第3页
第3页 / 共40页
LED驱动程序Word下载.docx_第4页
第4页 / 共40页
LED驱动程序Word下载.docx_第5页
第5页 / 共40页
LED驱动程序Word下载.docx_第6页
第6页 / 共40页
LED驱动程序Word下载.docx_第7页
第7页 / 共40页
LED驱动程序Word下载.docx_第8页
第8页 / 共40页
LED驱动程序Word下载.docx_第9页
第9页 / 共40页
LED驱动程序Word下载.docx_第10页
第10页 / 共40页
LED驱动程序Word下载.docx_第11页
第11页 / 共40页
LED驱动程序Word下载.docx_第12页
第12页 / 共40页
LED驱动程序Word下载.docx_第13页
第13页 / 共40页
LED驱动程序Word下载.docx_第14页
第14页 / 共40页
LED驱动程序Word下载.docx_第15页
第15页 / 共40页
LED驱动程序Word下载.docx_第16页
第16页 / 共40页
LED驱动程序Word下载.docx_第17页
第17页 / 共40页
LED驱动程序Word下载.docx_第18页
第18页 / 共40页
LED驱动程序Word下载.docx_第19页
第19页 / 共40页
LED驱动程序Word下载.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

LED驱动程序Word下载.docx

《LED驱动程序Word下载.docx》由会员分享,可在线阅读,更多相关《LED驱动程序Word下载.docx(40页珍藏版)》请在冰点文库上搜索。

LED驱动程序Word下载.docx

linux/config.h>

linux/module.h>

linux/fs.h>

linux/kernel.h>

linux/init.h>

linux/iobuf.h>

linux/major.h>

asm/uaccess.h>

asm/hardware.h>

asm/arch/cpu_s3c2410.h>

asm/io.h>

linux/vmalloc.h>

linux/delay.h>

#defineIOPORT_MAJOR220

intmagic_leds_open(structinode*inode,structfile*filp);

intmagic_leds_ioctl(structinode*inode,structfile*filp,unsignedintcmd,unsigned

longarg);

intmagic_leds_release(structinode*inode,structfile*filp);

staticstructfile_operationsmagic_leds_fops=

{

ioctl:

magic_leds_ioctl,

open:

magic_leds_open,

release:

magic_leds_release,

};

#defineLED1_ON()(GPFDAT&

=~0x10)

#defineLED2_ON()(GPFDAT&

=~0x20)

#defineLED3_ON()(GPFDAT&

=~0x40)

#defineLED4_ON()(GPFDAT&

=~0x80)

#defineLED1_OFF()(GPFDAT|=0x10)

#defineLED2_OFF()(GPFDAT|=0x20)

#defineLED3_OFF()(GPFDAT|=0x40)

#defineLED4_OFF()(GPFDAT|=0x80)

staticintledStatus;

voidLedSet(intled)

ledStatus=led;

if(ledStatus&

1)

LED1_ON();

else

LED1_OFF();

2)

LED2_ON();

LED2_OFF();

4)

LED3_ON();

LED3_OFF();

8)

LED4_ON();

LED4_OFF();

}

voidLedDisy(void)

LedSet(0x08);

udelay(0x500000);

LedSet(0x04);

LedSet(0x02);

LedSet(0x01);

staticint__initmagic_leds_init(void)

intresult=0;

printk("

magic_leds_init\n"

);

result=register_chrdev(IOPORT_MAJOR,"

gpio"

&

magic_leds_fops);

if(result<

0)

Failedtoregistermajor.\n"

returnresult;

successtoregister\n"

return0;

intmagic_leds_open(structinode*inode,structfile*filp)

GPFCON=0x5500;

GPFUP=0xff;

opengpiodevices\n"

void__exitmagic_leds_exit(void)

unregister_chrdev(IOPORT_MAJOR,"

int__exitmagic_leds_release(structinode*inode,structfile*filp)

releasethisdevice\n"

longarg)

interr=0;

if(cmd==1)

while(arg--)

LedDisy();

....."

\n"

returnerr;

module_init(magic_leds_init);

module_exit(magic_leds_exit);

(3)编译安装LED驱动

◆同样,在/s3c2410/gpiodrv目录下用vi编辑器编写该驱动程序的Makefile文件:

(Makefile的编写可参考Makefile中文教程.pdf)

●#viMakefile输入以下内容:

CROSS=arm-linux-gcc

CFLAGS=-D__KERNEL__

CFLAGS+=-DMODULE

CFLAGS+=-I/s3c2410/2.4.18-rmk7/include

CFLAGS+=-I/s3c2410/2.4.18-rmk7/include/linux

CFLAGS+=-I/usr/local/arm/2.95.3/include

CFLAGS+=-Wall-Wstrict-prototypes-Wno-trigraphs-Os-mapcs

CFLAGS+=-fno-strict-aliasing-fno-common-fno-common-pipe-mapcs-32

CFLAGS+=-march=armv4-mtune=arm9tdmi-mshort-load-bytes-msoft-float

CFLAGS+=-DKBUILD_BASENAME=gpiodrv

all:

gpiodrv.o

gpiodrv.o:

$(CROSS)$(CFLAGS)-ogpiodrv.o-cgpiodrv.c

clean:

-rm-f$(EXEC)*.o*~core

将gpiodrv.c和Makefile这个放置在同一个新建目录下gpiodrv下,进入这个目录,输入make后,编绎成功后将在这个目录下生成一个gpiodrv.o文件。

●#make

3.3linux下字符设备的驱动开发实例—测试LED

(1)在/s3c2410/gpiodrv目录下用vi编辑器编写led驱动程序相应的测试

程序gpio_test.c

●#vigpio_test.c

stdio.h>

stdlib.h>

unistd.h>

fcnt1.h>

errno.h>

sys/ioctl.h>

intmain(intargc,char**argv)

inti;

intfd;

fd=open("

/dev/gpio"

0);

if(fd<

perror("

Failedtoopendevice"

exit

(1);

while

(1)

printf("

pleaseselectnumbertorunprogram\n"

1:

ledon\n2:

quit"

scanf("

%d"

val);

if(val==1)

ioct1(fd,1,10);

elseif(val==2)

close(fd);

编译gpio_test.c,得到可执行文件gpio_test。

即用下面的命令:

#arm-linux-gcc–ogpio_testgpio_test.c

3.4linux下字符设备的驱动开发实例—实验步骤

(也可参考FS2410P实验指导手册v2.1.2.pdf,311-313上的方法)

(1)PC机进入LINUX系统,配置好minicom,连接好串口线,让FS2410P教学实验平台进入LINUX环境,利用minicom来显示。

(2)将编绎生成的gpiodrv.o和gpio_test用NFSmount到/tmp目录下。

(方法参考实验三---通过NFS进入映射)

#mount192.168.3.111:

/s3c2410/tmp

#cd/tmp

#cd/gpiodrv

(3)加载设备驱动gpiodrv.o模块:

insmodgpiodrv.o

如果加载成功,可以通过cat/proc/devices命令查看该设备的相关信息。

卸载该设备驱动模块的命令是:

rmmodgpiodrv

(4)建立gpio设备节点:

mknod/dev/gpioc2200/dev/gpio为该设备驱动程序的设备名,C表明该设备为字符设备,220为该设备的主设备好,0为从设备号。

(5)执行gpio_test程序:

./gpio_test

(6)在minicon终端选择1,回车,可以看到4个LED灯轮流闪烁。

选择2,则退出程序的运行。

(7)将应用程序添加根文件系统,并烧写到开发板。

◆将FS2410XP_camare_demo.cramfs拷贝到/s3c2410目录下。

◆在该目录下建立两个文件:

#cd/s3c2410/

#mkdirchang

#mkdirguo

◆将FS2410XP_camare_demo.cramfs挂接到chang目录。

#mount-oloopFS2410XP_camare_demo.cramfschang

◆将chang目录下的内容压缩。

#cdchang

#tar-cvf/s3c2410/1.tar./

这时,将在chang的目录产生一个1.tar的包。

#cd..

#

mv1.targuo

#cdguo

#tar-xvf1.tar#rm1.tar

rm:

是否删除一般文件“1.tar”?

y

◆将自已的gpiodrv.o和gpio_test拷贝到相应的目录下。

将gpiodrv.o拷贝到guo/usr/目录下

将gpio_test拷贝到guo/bin下

◆现在开始制作cramfs根文件系统

./mkcramfs/s3c2410/guoFS2410XP_camare_demo.cramfs

◆下载FS2410XP_camare_demo.cramfs根文件系统到开发板:

★使用tftpcmd网络传输,设置宿主机IP地址,将其地址与开发平台的IP地址设置在同一网段内。

这里,将PC的IP设为192.168.0.121。

并把

tftpcmd复制到/bin文件夹下。

★#cd/s3c2410/guo

★新建一个down文件

#vidown

tftpcmd202.193.9.2169putFS2410XP_camare_demo.cramfs

★改变down的属性

#chmod777down

★改变tftpcmd的属性

#chmod777/bin/tftpcmd

★将开发板与PC机用交叉网线连接好,复位开发板,按住A键,进入BIOS

命令行状态提示符:

(minicom)

\>

netload

★#./down

或是双击down批处理文件,选择在终端运行,可以看到内核映像下载到了开发板。

★传输完后,再输入命令“nfprog”,然后回车,然后输入“2”选择第

二个区块,输入“Y”确认将文件烧写到nandflash中。

◆重复操作(3),(4),(5),(6),可看到实验结果。

驱动模块makefile文件编写求助

自己编的一个linux驱动,我原来的工程目录是这样的:

工程总目录下有一个include文件夹,所有的.c源文件,makefile文件,还有一个总的x.h头文件,x.h中include了include文件夹中所有的头文件和一些内核的头文件。

include文件夹里有几个子文件夹,按类放头文件。

每个.c源文件都#include"

x.h"

下面是原来的makefile文件。

在工程总目录下make可以生成.ko文件。

KERNELDIR:

=/arm/linux-2.6.22.19

PWD:

=$(shellpwd)

CFLAGS=-fno-common

CROSS_COMPILE=/arm/3.4.1/bin/arm-linux-

CC=$(CROSS_COMPILE)gcc

OBJECTS:

=a.ob.oc.od.oe.o

obj-m:

=mydriver.o

mydriver-objs:

=$(OBJECTS)

default:

$(MAKE)-C$(KERNELDIR)M=$(PWD)modules

rm-rf*.o*.ko*.mod.o*.mod.c

现在工程的文件越来越多,很乱。

我想建立这样的工程目录:

工程总目录下有:

include文件夹,src文件夹,makefile文件。

include文件夹和src文件夹下都有几个子文件夹,都按类放好头文件或源文件。

x.h头文件也放在include文件夹下。

应该怎么来写makefile。

怎么样在驱动模块的makefile中指定头文件、源文件的目录?

是否还需要指定内核头文件的目录?

大家帮我看看!

谢谢!

编译驱动模块

2009-07-2910:

45

有两种方法可以编译自己写的驱动程序。

第一种方法:

直接加入内核

1.将驱动程序放入内核相应的驱动文件夹,例如名字为my_led.c

2.修改此驱动目录下的Kconfig文件,加入对该驱动文件的配置选项:

configMY_LED

bool"

S3C2410LEDDriver"

 

depensonARCH_S3C2410

help

LEDdriverforthesamsungs3c2410

说明:

my_LED是配置选项标题

bool表示该选项要么是y要么是n,不可编译成模块。

如需要编译成模块则改为tristate(三态)

3.修改此驱动目录下的Makefile文件,加入对驱动源码的编译:

obj-$(CONFIG_MY_LED)+=my_led.o

第二种方法:

单独编译驱动模块

(1)

1.下载内核源代码,选择和你的驱动相同的平台的配置文件进行编译,

假设路径为/root/linux-2.6.29。

或者利用/usr/src下面的源码,这样就只能编译主机平台上的驱动。

2.将驱动文件放在一目录下,例如/root/dirver/my_led.c

3.在/root/driver下编写Makefile文件,内容为:

=my_led.o

如果这个模块包含多个.c文件,则如下编写Makefile:

=module_name.o

module-objs:

=file1.ofile2.o...

4.在本目录下执行:

make-C/root/linux-2.6.29M=$(pwd)modules

第三种方法:

单独编译驱动模块

(2)

直接编写Makefile文件:

=led.o

CURRENT_PATH:

=$(shellpwd)

ARM_LINUX_KERNEL:

=/root/linux-2.6.29

$(MAKE)-C$(ARM_LINUX_KERNEL)M=$(CURRENT_PATH)modules

rm-rf.*.cmd*.o*.mod.c*.ko.tmp_versionsModule.symvers.Makefile.swpmodules.order

运行make即可

Linux下LED驱动的开发笔记

Linux2010-07-0615:

52:

15阅读17评论0 

字号:

大中小 

订阅

#include<

linux/types.h>

linux/ioport.h>

linux/fcntl.h>

linux/miscdevice.h>

linux/sched.h>

linux/spinlock.h>

linux/errno.h>

linux/slab.h>

linux/input.h>

linux/interrupt.h>

linux/device.h>

asm/system.h>

asm/irq.h>

//#include<

mach/regs-gpio.h>

asm/arch-s3c2410/regs-gpio.h>

//arm-linux-gcc编译器包含的头文件

asm/arch/hardware.h>

arch/arm/mach-s3c2410/include/mach/map.h>

asm/arch-s3c2410/map.h>

arm-linux-gcc编译器包含的头文件

asm/arch-s3c2410/hardware.h>

MODULE_LICENSE("

DualBSD/GPL"

//#defineLED_DRIVER"

utu2440LEDDriverv1.00"

#defineGPIO_LED_MAJOR0//主设备号,如果为0的话,由系统自动分配

//#defineEINVAL22

/*staticunsignedlongled_table[]={

S3C2410_GPF4,

S3C2410_GPF5,

S3C2410_GPF6,

S3C2410_GPF7,

*/

//staticintled_ioctl(structinode*inode,structfile*file,

// 

unsignedintcmd,unsignedlongarg);

staticintled_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg)

switch(cmd)

case0:

{s3c2410_gpio_setpin(S3C2410_GPF4,1);

s3c2410_gpio_setpin(S3C2410_GPF5,1);

s3c2410_gpio_setpin(S3C2410_GPF6,1);

s3c2410_gpio_setpin(S3C2410_GPF7,1);

break;

case1:

{s3c2410_gpio_setpin(S3C2410_GPF4,0);

s3c2410_gpio_setpin(S3C2410_GPF5,0);

s3c2410_gpio_setpin(S3C2410_GPF6,0);

s3c2410_gpio_setpin(S3C2410_GPF7,0);

{printk("

nocmdled!

"

return-1;

}

retur

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2