Hi35xx GPIO在ko中设置
添加链接描述
参考了这位大神的程序;
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>#define DEV_NAME "led"/* led */
#define GPIO6_BASE_ADDR 0x120b6000
#define GPIO6_DIR_ADDR ((GPIO6_BASE_ADDR) + (0x400))
#define GPIO6_DATA_OUT_ADDR ((GPIO6_BASE_ADDR) + (0x000))
#define GPIO6_7_SET_DATA__ADDR ((GPIO6_DATA_OUT_ADDR) + (0x200))volatile unsigned long *gpio6_dir = NULL;
volatile unsigned long *gpio6_dataout = NULL;
volatile unsigned long *gpio6_setdata = NULL;
/* led end */static int major = (-1); /* 初始化为无效值 */
static struct class *led_drv_class;static int led_drv_open(struct inode *inode, struct file *file)
{/* 将dir寄存器bit7置1:表示output功能 */*gpio6_dir |= (1<<7);return 0;
}static int led_drv_release(struct inode *pinode , struct file *pfile)
{/* 将data寄存器置1,表示输出高电平 *///*gpio6_setdata = (1<<7);return 0;
}static ssize_t led_drv_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
{char val;int ret;ret = copy_from_user(&val, buf, count);if(!ret){*gpio6_setdata = val;}return 0;
}static struct file_operations led_drv_fops = {.owner = THIS_MODULE,.open = led_drv_open,.release = led_drv_release,.write = led_drv_write,
};/* 驱动入口函数 */
static int led_drv_init(void)
{major = register_chrdev(0, "led_drv", &led_drv_fops); // 注册, 告诉内核,返回值major为自动分配的主设备号led_drv_class = class_create(THIS_MODULE, "leddrv");device_create(led_drv_class, NULL, MKDEV(major, 0), NULL, DEV_NAME); /* insmod xxx后,会自动生成/dev/xyz设备,并且自动给该设备分配主设备号major *//* 映射寄存器地址 */gpio6_dir = (volatile unsigned long *)ioremap(GPIO6_DIR_ADDR, 32);gpio6_dataout = (volatile unsigned long *)ioremap(GPIO6_DATA_OUT_ADDR, 32);gpio6_setdata = (volatile unsigned long *)ioremap(GPIO6_7_SET_DATA__ADDR, 32);return 0;
}/* 驱动出口函数 */
static void led_drv_exit(void)
{unregister_chrdev(major, "led_drv"); /* 卸载驱动程序,告诉内核 */device_destroy(led_drv_class, MKDEV(major, 0));class_destroy(led_drv_class);/* 删除映射关系 */iounmap(gpio6_setdata);iounmap(gpio6_dataout);iounmap(gpio6_dir);
}module_init(led_drv_init);
module_exit(led_drv_exit);MODULE_LICENSE("Dual BSD/GPL");
可以简单粗暴操作:
*gpio6_dir |= (1<<7);
*gpio6_setdata = 0xff; //高电平
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>/** ledtest <dev> <on|off>*/
void print_usage(char *file)
{printf("Usage:\n");printf("%s <dev> <on|off>\n",file);printf("eg. \n");printf("%s /dev/leds on\n", file);printf("%s /dev/leds off\n", file);printf("%s /dev/led1 on\n", file);printf("%s /dev/led1 off\n", file);
}int main(int argc, char **argv)
{int fd;char* filename=NULL;char val;if(argc !=3){print_usage( argv[1]);//打印用法}filename = argv[1];fd = open(filename, O_RDWR);//打开dev/firstdrv设备文件if (fd < 0)//小于0说明没有成功{printf("error, can't open %s\n", filename);return 0;}if(!strcmp(argv[2], "on"))val = (1<<7); //此处驱动的GPIO6_7属于第7个引脚,所以需要把bit7置1elseval = 0;write(fd, &val, 1);//操作LEDprintf("Set led GPIO to %d\n",val);close(fd);return 0;
}
Hi35xx GPIO在ko中设置相关推荐
- 【嵌入式07】寄存器映射原理详解,GPIO端口的初始化设置步骤
本文主要介绍STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置步骤. 一.STM32F103系列芯片的地址映射和寄存器映射原理 1.什么是寄存器? 2.地址映射和寄存器映射 ...
- 了解GPIO端口的初始化设置三步骤LED流水灯C语言 寄存器方式编程实现
文章目录 前言 一.地址映射.寄存器映射原理 二.GPIO端口的初始化设置 1.时钟配置 2.输入输出模式 3.最大速率设置 三.TM32F103C8T6用C语言 .寄存器方式实现LED灯的闪烁 原理 ...
- 在Dockerfile中设置G1垃圾回收器参数
在Dockerfile中设置G1垃圾回收器参数 ENV JAVA_OPTS="\ -server \ -XX:SurvivorRatio=8 \ -XX:+DisableExplicitGC ...
- idea中设置指向源代码Scala
1.到官网下载scala源代码 点击如下链接下载源码:http://www.scala-lang.org/download/all.html 选择需要的版本点击进行下载,我选择的是2.11.8版本,如 ...
- 转--Android如何在java代码中设置margin
======== 3 在Java代码里设置button的margin(外边距)? 1.获取按钮的LayoutParams LinearLayout.LayoutParams layoutParams ...
- Android中设置TextView的颜色setTextColor
tv.setTextColor(Color.parseColor("#FFFFFF")); tv.setTextColor(Color.WHITE); tv.setTextColo ...
- html 中设置样式方式,在html元素中设置css样式的方式是什么
如果我们要在HTML元素中设置CSS样式,那么我们就需要在元素中设置"id" 和 "class"选择器. (推荐教程:CSS教程) 下面我们来分别说一下id选择 ...
- R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如、粗体、斜体等
R语言ggplot2可视化:通过在element_text函数中设置ifelse判断条件自定义标签文本的显示格式:例如.粗体.斜体等 目录
- seaborn使用violinplot函数可视化小提琴图、并在violinplot函数中设置inner参数来添加数据点显示数据的稠密程度
seaborn使用violinplot函数可视化小提琴图.并在violinplot函数中设置inner参数来添加数据点显示数据的稠密程度(Seaborn violinplot with data po ...
最新文章
- 微软职位内部推荐-Sr. Dev Lead
- 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”...
- A Mini Locomotive POJ - 1976(动态规划+思维)
- Thread.join()
- ZSKAME大白菜2013官网下载
- MySQL事件与定时器,mysql下存储过程与定时器
- 微信支付国庆消费数据出炉:门票交易增幅超8成 酒店行业交易增幅超7成
- java tcp 线程_java 网络协议(一)Tcp多线程服务器端编程
- mysql 主从同步不一致_为什么mysql会经常出现主从同步不一致的情况
- python实训day5
- C++ 不定参数(转)
- 朗沃20140414
- ajax post提交数据_第三十五天JavaScript中的ajax
- Week12(11月28日)
- Python实现8中常用排序算法
- SecureCRT上传下载位置
- Linux下的TCP测试工具
- ZJUT 2012校赛决赛-涂颜色
- 电脑卡顿?性能不足?一套连招榨干你的电脑!
- golang profiling