如何不依赖于linux内核程序进行LED控制
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章给大家分享的是有关如何不依赖于linux内核程序进行LED控制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、驱动程序 my_
千家信息网最后更新 2025年12月02日如何不依赖于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安全错误
数据库的锁怎样保障安全
安卓软件开发概念股
有后台数据库吗
无加盟费的云服务器加盟
阿里云服务器设置权限
计算机环境软件开发
容易上手的软件开发技术
禁止金山安全基础服务器
如何用软件开发客户
税务局网络安全排查报告
河南省山东软件开发
联系不到服务器怎么还可以听小说
齐鲁工业大学网络安全专业硕士
可以创建一个数据库
好用的时间服务器地址
企业网络安全分类分级评定报告
用数据库语句建立数据库与表
武汉软件开发公司的英文
路由器拨号显示服务器不响应
神雕侠侣2几个区一个服务器
达梦数据库怎么看表被锁住
4g网络技术服务商
mfc odbc 数据库
软件开发行业的市场机遇
查询服务器ip黑名单
网络服务器怎么连接dns
腾讯服务器保存
软件开发过程用时
技术部门软件开发管理制度
向数据库表里面添加信息
7472服务器管理