一、编写蜂鸣器的应用程序
再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;
}
========================================================