使script.bin文件配置生效的驱动
1.问题:在全志方案中如果需要设置上拉或者下拉模式,需要在script.bin(先转换为script.fex)中配置gpio口 如:
但是配置好后是不会生效的,需要写一个驱动来通过读取这个文件的gpio配置来配置相应的寄存器。
代码:
#include <linux/init.h>
#include <linux/module.h>
#include <mach/sys_config.h>
#include <mach/pinctrl.h>
#include <asm/io.h>
#include <mach/gpio.h> #define PIO_BASE 0x01c20800
typedef volatile unsigned int uint32;
typedef struct {
// gpio口的功能配置寄存器, 每个io口在配置寄存器里占用4位(实际用3位)
uint32 CFGs[]; //4个功能配置寄存器,每个寄存配置8个io口 // gpio口的数据寄存器, 每个io口占用一位.
uint32 DAT; // gpio口驱动电流配置寄存器, 每个io口占用2位
uint32 DRVs[]; // 两个寄存器,每个寄存器配置16个io口 // gpio口上下拉配置寄存器, 每个io口占用2位
uint32 PULLs[]; // 两个寄存器,每个寄存器配置16个io口 }PIO_t; //表示每组io口都有的配置寄存器 static PIO_t *pios[]; // 每个元素分别存放PA, PB, PC, PD, PE, PF, PG组io口的寄存器地址
static u8 *vaddr; static int __init h3gpio_init(void)
{
script_item_u *list;
int n, i, j, k;
int sel, pull, drv, level; vaddr = ioremap(PIO_BASE, SZ_4K); //映射gpio配置寄存器的基地址
if (NULL == vaddr)
return -ENOMEM; for (i = ; i < ARRAY_SIZE(pios); i++) //准备好每组io口的配置寄存器的地址
pios[i] = (PIO_t *)(vaddr+i*0x24); // pa的配置寄存器0的地址 == &pios[0]->CFG0
n = script_get_pio_list("gpio_para", &list); //返回值为gpio口的个数
if (n <= )
return -ENODEV; for (i = ; i < n; i++)
{
//在内核里每组io口都算是32个一组,即使硬件上每组都没有32个io口那么多.
//所以list[i].gpio.gpio / 32 即可算出是第几组,
j = list[i].gpio.gpio >> ; // pios[j]就是表示相应组的配置寄存结构体
k = list[i].gpio.gpio & ; //算出在组内是第几个io口 sel = list[i].gpio.mul_sel; //script.bin里io功能选择
pull = list[i].gpio.pull; //上下拉功能
drv = list[i].gpio.drv_level; //驱动电流等级
level = list[i].gpio.data; //io口作输出时,输出什么电平 if (- != sel) //功能选择不是<default>
{
pios[j]->CFGs[k>>] &= ~(0xf << ((k&)<<));
pios[j]->CFGs[k>>] |= sel << ((k&)<<); if ( == sel) //如果是输出,还需指定输出的电平
{
pios[j]->DAT &= ~(<<k);
pios[j]->DAT |= level << k;
}
}
if (- != pull) //上下拉功能不是<default>
{
pios[j]->PULLs[k>>] &= ~( << ((k&)<<)); pios[j]->PULLs[k>>] |= pull << ((k&)<<);
} if (- != drv) //驱动电流等级不是<default>
{
pios[j]->DRVs[k>>] &= ~( << ((k&)<<));
pios[j]->DRVs[k>>] |= drv << ((k&)<<);
}
} return ;
} static void __exit h3gpio_exit(void)
{
iounmap(vaddr);
} module_init(h3gpio_init);
module_exit(h3gpio_exit); MODULE_LICENSE("GPL");
2.Makefile 文件
KDIR := /home/edan/uboot_kernel/orangepi_sdk/source/linux-3.4.
obj-m += gpio.o export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf- all:
make -C $(KDIR) modules M=`pwd` .PHONY :clean
clean: make -C $(KDIR) modules clean M=`pwd`
使script.bin文件配置生效的驱动的更多相关文章
- Apache 中httpd.conf文件配置详解(转载)
httpd.conf文件配置详解 Apache的基本设置主要交由httpd.conf来设定管理,我们要修改Apache的相关设定,主要还是通过修改httpd.cong来实现.下面让我们来看看htt ...
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- 咱就入个门之NHibernate映射文件配置(一)
之前写了数据库连接配置,这次说说映射文件的配置,即表映射[ORM的核心就是此啦!]. 下面我们使用最原始的手动配置hbm.xml文件. 步骤: 1.添加People类 namespace NHiber ...
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap good
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- 如何修改script.bin/script.fex
你是否经常看见其他帖子里或者其他人提到要修改script.bin或script.fex ,但你又不知道怎么改. 其实 script.bin就是script.fex通过 fex2bin生成的,scrip ...
- JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
JavaScript日历控件开发 概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...
- 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册
第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...
- postgresql 修改配置生效方法
对于配置服务器,,太多时候我们在Linux中做的操作是,配置*.conf文件,然后重启服务.而很多服务都具有reload功能,而但是具体到某个配置,有时候直接说出需不需要重启服务而使得配置生效,这并不 ...
- PostgreSQL.conf文件配置详解[转]
一.连接配置与安全认证 1.连接Connection Settings listen_addresses (string) 这个参数只有在启动数据库时,才能被设置.它指定数据库用来监听客户端连接的 ...
随机推荐
- 二十九、CI框架之session用法
一.我们在控制器中添加session写入和读取的2个函数,如图: 二.我们用浏览器访问login页面,可以看到有一串被加密的cookies,在CI中session也是以cookies的方式存放的 三. ...
- Android自定义View——QQ音乐中圆形旋转碟子
1.在onMeasure中测量整个View的宽和高后,设置宽高 2.获取我们res的图片资源后,在ondraw方法中进行绘制圆形图片 3.通过Handler发送Runnable在主线程中更新UI,达到 ...
- Spring Boot Actuator Endpoints
常用内建的Endpoints: beans:显示当前Spring应用上下文的Spring Bean完整列表(包含所有ApplicationContext的层次) conditions:显示当前应用所有 ...
- 关于mybatis的<selectKey>中的keyColumn
<mapper namespace="com.dao.EmployeeDao"> <insert id="insert"> <se ...
- find_element_by_xpath()的6种方法
Xpath (XML Path Language),是W3C定义的用来在XML文档中选择节点的语言 一:从根目录/开始 有点像Linux的文件查看,/代表根目录,一级一级的查找,直接子节点,相当于cs ...
- HTTP协议(一):概述
背景介绍 但凡世界上牛逼的人物,都会有一个非常离奇的经历.比如说乞丐出身的皇帝朱元璋,出生时家中红光大作,映红了半边天;再比如说无良皇帝刘邦,简直不要太牛逼,说自己是老妈和一条白龙交合生出的自己,而老 ...
- mysql插入文本文档及读取
1.把本地的一个文件插入到数据库中,数据库字段用text保存 public static void main(String[] args) { PropKit.use(“pro.txt”);Druid ...
- 设置MySQL客户端连接使用的字符集
设置MySQL客户端连接使用的字符集 时间:2014-03-05 来源:服务器之家 投稿:root 考虑什么是一个"连接":它是连接服务器时所作的事情.客户端发送SQL ...
- import torch 报错
1.进入官网 https://pytorch.org/ 2.复制command到anaconda环境,即可
- python pandas 画图、显示中文、股票K线图
目录: 1.pandas官方画图链接 2.标记图中数据点 3.画图显示中文 4.画股票K线图 5.matplotlib基本用法 6.format输出 6.format输出例子 eps_range=[0 ...