LED驱动程序Word下载.docx
- 文档编号:4582359
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:40
- 大小:35.98KB
LED驱动程序Word下载.docx
《LED驱动程序Word下载.docx》由会员分享,可在线阅读,更多相关《LED驱动程序Word下载.docx(40页珍藏版)》请在冰点文库上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED 驱动程序