Linux高级应用(十一)控制蜂鸣器的应用程序(二)

一、编写蜂鸣器的应用程序
再project中添加:

beep.h

#define BEEP_ON 1
#define BEEP_OFF 0

beep.c
int beep_ctrl(char beep_state)
{
char beep_flag;
int fd_beep;
fd_beep = open("/dev/beep_drv", O_RDWR);
if(fd_beep == -1)
{
perror(“open beep error”);
return -1;
}

beep_flag = beep_state;
write(fd_beep, &beep_flag, 1)

close(fd_beep);

return 0;

}

二、设计蜂鸣器的驱动程序

beep_drv.c

编译

三、蜂鸣器驱动程序的使用
1、modinfo

2、insmod

3、lsmod

4、ls /dev/beep_drv -l

四、运行project程序,实现蜂鸣器的控制

=================================================================

五、设计LED的驱动程序
1、查看原理图,找到控制LED的四个GPIO

2、找到这四个GPIO的IO口号

3、编写驱动程序

4、编写应用程序
char buf[2];
int main()
{
int fd;
int ret;
fd = open("/dev/led_drv", O_WRONLY);
if(fd <0 ){
perror(“open”);
return -1;
}
while(1)
{
buf[1] = 2; buf[0]=1;
ret = write(fd, buf, sizeof(buf));
if(ret < 0){
perror(“write”);
return -1;
}
sleep(1);

	buf[1] = 2; buf[0]=0;
	ret = write(fd, buf, sizeof(buf));
	if(ret < 0){
		perror("write");
		return -1;
	}
	sleep(1);
}
close(fd);

return 0;	

}

1.驱动程序的编译

gec@ubuntu:/mnt/hgfs/week11-AB/beep_drv$ make
make -C /home/gec/kernel/linux-3.0.8 M=/mnt/hgfs/week11-AB/beep_drv modules
make[1]: 正在进入目录 /home/gec/kernel/linux-3.0.8' CC [M] /mnt/hgfs/week11-AB/beep_drv/beep_drv.o Building modules, stage 2. MODPOST 1 modules CC /mnt/hgfs/week11-AB/beep_drv/beep_drv.mod.o LD [M] /mnt/hgfs/week11-AB/beep_drv/beep_drv.ko make[1]:正在离开目录/home/gec/kernel/linux-3.0.8

2、查看驱动的信息
gec@ubuntu:/mnt/hgfs/week11-AB/beep_drv$ modinfo beep_drv.ko
filename: beep_drv.ko
version: V1.0
license: GPL
description: S5PV210 BEEP Device Driver
author: bobeyfeng@163.com
srcversion: F9B0A57BF457DDC5A1E9C69
depends:
vermagic: 3.0.8-FriendlyARM preempt mod_unload ARMv7

知道:这个驱动只能安装到ARM处理器和Linux-3.0.8嵌入式平台上。

3、安装驱动
[root@FriendlyARM /test]# insmod beep_drv.ko
mini210 beep driver init…

4、卸载驱动
[root@FriendlyARM /test]# rmmod beep_drv
[ 171.327002] mini210 beep driver exit…

该驱动没有给应用程序提供接口,只是安装驱动,蜂鸣器响,卸载驱动蜂鸣器不响。

二、驱动程序如何给应用程序提供接口
1、应用程序如何访问驱动?
1)有驱动程序的设备文件----/dev/beep_drv
2)访问驱动的函数-----Linux系统IO函数:open()\read()\write()\ioctl()\close()

2、应用程序可以访问驱动需要两个条件
1)驱动程序要能生成设备文件
2)驱动程序要给应用程序的函数open()\read()\write()\close()提供接口

蜂鸣器的应用程序
beep.h

#define BEEP_ON 1
#define BEEP_OFF 0

beep.c
int beep_ctrl(char beep_state)
{
char beep_flag;
int fd_beep;
fd_beep = open("/dev/beep_drv", O_RDWR);
if(fd_beep == -1)
{
perror(“open beep error”);
return -1;
}

beep_flag = beep_state;
write(fd_beep, &beep_flag, 1)

close(fd_beep);

return 0;

}

========================================================

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值