本网页所有文字内容由 imapbox邮箱云存储,邮箱网盘, iurlBox网页地址收藏管理器 下载并得到。
ImapBox 邮箱网盘 工具地址: https://www.imapbox.com/download/ImapBox.5.5.1_Build20141205_CHS_Bit32.exe
PC6下载站地址:PC6下载站分流下载
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox 网页视频 工具地址: https://www.imapbox.com/download/ImovieBox4.7.0_Build20141115_CHS.exe
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
在上一个帖子中,讲述了如何给led编写驱动程序,但是实现的功能比较单一,接下来我们要实现的功能是在上一个的基础上能够单独控制每一个led灯。
上一个帖子的链接: linux驱动之LED驱动_1
上一个帖子的驱动源码在:点击打开链接 测试源码在:点击打开链接
实现板子上每个led能够单独的控制。
for(minor=0;minor<4;minor++) { firstdrv_class_dev[minor] = device_create(firstdrv_class,NULL,MKDEV(major,minor),NULL,"wq_led%d",minor); if(unlikely(IS_ERR(firstdrv_class_dev[minor]))) return PTR_ERR(firstdrv_class_dev[minor]); }
for(minor=0;minor<4;minor++) { device_unregister(firstdrv_class_dev[minor]); }
int minor = MINOR(inode ->i_rdev);//获得次设备号 switch(minor) { case 0://GPB5 配置为输出 { *gpbcon &=~(0x3<<(5*2)); *gpbcon |=(0x1<<(5*2)); break; } case 1://GPB6 配置为输出 { *gpbcon &=~(0x3<<(6*2)); *gpbcon |=(0x1<<(6*2)); break; } case 2://GPB7 配置为输出 { *gpbcon &=~(0x3<<(7*2)); *gpbcon |=(0x1<<(7*2)); break; } case 3://GPB8 配置为输出 { *gpbcon &=~(0x3<<(8*2)); *gpbcon |=(0x1<<(8*2)); break; } }
int minor = MINOR(file->f_dentry->d_inode->i_rdev);//获得次设备号 copy_from_user(&val,buf,count);//从用户空间向内核空间拷贝数据 switch(minor) { case 0://GPB5 { if(val == 1)//亮 { *gpbdat &=~(1<<5); } else//灭 { *gpbdat|=(1<<5); } break; } case 1://GPB6 { if(val == 1)//亮 { *gpbdat &=~(1<<6); } else//灭 { *gpbdat|=(1<<6); } break; } case 2://GPB7 { if(val == 1)//亮 { *gpbdat &=~(1<<7); } else//灭 { *gpbdat|=(1<<7); } break; } case 3://GPB8 { if(val == 1)//亮 { *gpbdat &=~(1<<8); } else//灭 { *gpbdat|=(1<<8); } break; } }
详细代码:
驱动程序:点击打开链接
测试程序:点击打开链接
阅读和此文章类似的: 程序员专区