千家信息网

如何不依赖于linux内核程序进行LED控制

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关如何不依赖于linux内核程序进行LED控制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、驱动程序 my_
千家信息网最后更新 2026年11月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安全错误 数据库的锁怎样保障安全 互联网科技公司 互联网金融监管科技数据 互联网科技卖菜 壕鑫互联网络科技 狮子座互联网科技培训 互联网科技创新企业排名 互联网科技公司需要的职位 哈尔滨新华互联网科技学院 互联网企业和科技型企业 互联网科技项目计划书材料类 深圳育鹏互联网科技有限公司招聘 广州新华互联网科技学校电竞方面 山东星卡互联网科技有限公司官网 南京一网一红互联网科技有限公司 艺电能源互联网科技有限公司招聘 陕西彩京云互联网科技有限公司 平安好医生打造互联网科技医疗 优雇互联网科技有限公司 前海云享互联网科技 广州全民伙伴互联网科技有限公司 奇酷互联网络科技 沃里互联网科技 深圳天众互联网科技公司 人人互联网科技是培训 恒生科技互联网指数分析 宁波青枫互联网科技有限公司 港股科技和互联网 黑科技闪耀互联网之光 徐州市互联网科技有限公司 互联网金融科技元年
0