如何不依赖于linux内核程序进行LED控制
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇文章给大家分享的是有关如何不依赖于linux内核程序进行LED控制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、驱动程序 my_
千家信息网最后更新 2025年01月31日如何不依赖于linux内核程序进行LED控制
本篇文章给大家分享的是有关如何不依赖于linux内核程序进行LED控制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
1、驱动程序 my_led_module.c
#include#include #include #include #include #define DEVICE_NAME "mini2440_leds" //设备名称#define LED_MAJOR 260#define LED_ON 1 //LED亮状态#define LED_OFF 0 //LED灭状态volatile unsigned long virt, phys;//用于存放虚拟地址和物理地址volatile unsigned long *GPBCON, *GPBDAT, *GPBUP;//用与存放三个寄存器的地址 static int leds_open(struct inode *inode, struct file *file){ return 0;} static int leds_ioctl(struct inode *inode, struct file *file ,unsigned int cmd, unsigned long arg){ //检测是第几个LED,因开发板上只有4个,索引从0开始 if(arg < 0 || arg > 3){ return -EINVAL; } //判断LED要执行哪种状态 switch(cmd){ case LED_ON:{ if(arg == 0){ *GPBDAT &= 0x1C0; } else if(arg == 1){ *GPBDAT &= 0x1A0; } else if(arg == 2){ *GPBDAT &= 0x160; } else if(arg == 3){ *GPBDAT &= 0x0E0; } break; } case LED_OFF:{ if(arg == 0){ *GPBDAT |= 0x020; } else if(arg == 1){ *GPBDAT |= 0x040; } else if(arg == 2){ *GPBDAT |= 0x080; } else if(arg == 3){ *GPBDAT |= 0x100; } break; } default:{ return -EINVAL; } } return 0;} static struct file_operations leds_fops = { .owner = THIS_MODULE, .open = leds_open, .ioctl = leds_ioctl,};void led_device_init(void){ // 0x56000010 + 0x10 包揽全所有的IO引脚寄存器地址 phys = 0x56000010; // 0x56000010=GPBCON //在虚拟地址空间中申请一块长度为0x10的连续空间 //这样,物理地址phys到phys+0x10对应虚拟地址virt到virt+0x10 virt =(unsigned long)ioremap(phys, 0x10); GPBCON = (unsigned long *)(virt + 0x00);//指定需要操作的三个寄存器的地址 GPBDAT = (unsigned long *)(virt + 0x04); GPBUP = (unsigned long *)(virt + 0x08); // GPBCON *GPBCON = 0x154FD; // GPBDAT *GPBDAT = 0x1E0; // GPBUP *GPBUP = 0x7FF;} static int __init led_init(void){ int ret; led_device_init(); // 设备的注册 ret = register_chrdev(LED_MAJOR, DEVICE_NAME, &leds_fops); if(ret < 0){ printk(DEVICE_NAME " register falid!\n"); } else { printk(DEVICE_NAME " initialized!\n"); } return ret;} static void __exit led_exit(void){ //注销设备 unregister_chrdev(LED_MAJOR, DEVICE_NAME);} module_init(led_init);module_exit(led_exit); MODULE_LICENSE("GPL");MODULE_AUTHOR("Benjamin");MODULE_DESCRIPTION("Mini2440 led driver");
以上就是如何不依赖于linux内核程序进行LED控制,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
地址
程序
寄存器
状态
设备
内核
控制
三个
更多
物理
知识
空间
篇文章
实用
全所
只有
名称
就是
工作会
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
单机游戏 服务器
数据库add_role
江阴挑选软件开发项目信息
软件开发的专业叫什么名字
西宁 网络安全 招标
计算机网络技术聚飞专班
网络发展观网络安全观
服务器云主机租用
网络安全系统的强度取决于什么
数据库定义性别默认值
dns服务器广东电信服务器
安装数据库服务器不成功
未定义数据库类型
魔兽世界服务器比例在哪里查询
数据库管理员英语简称
湖南软件开发定制价格
网络安全问题手抄报四年级一等奖
网络安全渗透测试语
ipv6哪个国家有服务器
新媒体的网络安全层次
萤石云服务器设置密码
渭南网络安全
口语教育第二课网络安全
如何制作网络安全宣传视频
华中科技网络安全分数线
山东 网络安全案例
简单易用的软件开发工具
软件开发 帐务处理
咨询网络技术服务怎么样
数据库的项目计划书怎么写