使用IO映射的方式获取tiny4412板子上的ID号

在以前的文章中,有一篇

基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号

在那篇文章中,具体可以参考。那时候我使用了简单的字符设备驱动框架,最终的ID号通过read方法可将ID读取出来,但是,这样做就太麻烦啦,有没有更简单的方法呢?其实有,这种方法称作IO地址的映射,而今天我们要说的是IO地址的动态映射方法,静态映射就太简单了,直接调用相应的接口,配置相应的寄存器,设置状态就可以实现。接下来看看驱动代码:

#if 0
. io地址:
. 静态映射:
	//这个头文件与平台相关,不同平台对应不同的gpio.h,也就是有不同的配置信息
	arch/arm/mach-exynos/include/mach/gpio.h
	gpio ==> S3C64XX_GPx(n)
			 EXYNOS4X12_GPM0()
			 EXYNOS4_GPD0()

	int gpio_request(gpio, "name");		申请;
	void gpio_free(gpio);				撤销;

	int gpio_direction_output(gpio, dat);	配置为输出, 输出1/0;
	int gpio_direction_input(gpio);			配置为输入, 输入1/0;

	int s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(con));	配置为con;

	void gpio_set_value(gpio, dat);			输出1/0;
	int gpio_get_value(gpio);				输入1/0;

	irqnum = gpio_to_irq(gpio);			gpio <==> irqnum

	MACH_TYPE_TINY4412

	/* Initial IO mappings */

	static struct map_desc exynos_iodesc[] __initdata = {
		{
			.virtual    = (unsigned long)S5P_VA_CHIPID,
			.pfn        = __phys_to_pfn(EXYNOS_PA_CHIPID),
			.length     = SZ_4K,
			.type       = MT_DEVICE,
		},
	};

. 动态映射:
	virt = ioremap(phys, size);		//vmalloc_area
	iounmap(virt);
	//将虚拟地址转化为32位整型数
	ioread32(virt);
	iowrite32(val, virt);
	//将虚拟地址转化为16位整型数
	ioread16();
	iowrite16();
	//将虚拟地址转化为8位整型数
	ioread8();
	iowrite8();
#endif 

#include <linux/module.h>
#include <linux/fs.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/atomic.h>
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/kthread.h>
#include <linux/slab.h>
//和IO相关的头文件
#include <linux/io.h>

//板子ID的物理地址  0x10000000 -----> 通过4412的手册查询到
#define CHIP_ID		0x10000000

int test_init(void)
{
	int ret;
	unsigned int *virt = NULL;
	printk("test init\n");
	//将CHIP_ID的物理地址映射成虚拟地址,分配4个字节的大小给它
	virt = ioremap(CHIP_ID, 4);
	//如果映射完成之后,virt指针为空,返回错误码
	if(IS_ERR_OR_NULL(virt))
	{
		ret = -EIO;
		goto ERROR_map;
	}
	//打印虚拟地址
	printk("virt = %p\n", virt);
	//打印物理地址
	printk("CHIP_ID = %x\n", CHIP_ID);
	//将虚拟地址转化为32位整型数
	printk("*virt = %x\n", ioread32(virt));
	//解除地址映射
	iounmap(virt);
	return 0;

ERROR_map:
	return ret;
}

void test_exit(void)
{
	printk("test exit\n");
}

module_init(test_init);
module_exit(test_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("yangyx");
MODULE_VERSION("1.1");
时间: 2024-10-19 00:42:13

使用IO映射的方式获取tiny4412板子上的ID号的相关文章

织梦dedecms获取当前内容页栏目id号的方法

一,可在内容模板中直接这样写{dede:field.typeid/} 可显示本栏目的id 二,也可这样写 [html] view plain copy {dede:type}[field:ID /]{/dede:type}  . 三, [html] view plain copy 如果是在{dede:sql}里面调用当前栏目ID的话,调用方法如下: 代码如下: {dede:sql sql='Select * from dede_arctype where id = ~typeid~ '} [fi

linux驱动之中断方式获取键值

linux驱动之中断方式获取键值 ------------------------------------------------------------------------------------------------------------------------------------------------------ 回想在单片机下的中断处理 分辨是哪个中断 调用处理函数 清中断 --------------------------------------------------

在C语言中以编程的方式获取函数名

调试常用的 __FILE__, __FUNCTION__, __LINE__ 调试常用的 __FILE__, __FUNCTION__, __LINE__ 没想到 VC6 不支持 __FUNCTION__ 所以我写了如下的奇怪代码 //用来记录当前行和当前函数//也可说是记录 堆栈void log_stack(const char *file, int line, const char * function); //当然还要对 __FUNCTION__ 宏作点修饰,因为这个宏只是在函数里面才起作

springboot整合mybatis(映射文件方式和注解方式)

springboot作为一个微服务框架,给我们开发人员提供极大的便利,秉着约定大于配置的原则,通过starter包的形式为我们做了许多默认的配置,在进行数据持久化到关系型数据库时,我们一般都会首选spring data jpa,springboot为我们提供了starter包,只需配置很少的参数,就能满足我们的需求,非常方便.但是当我们遇到一些比较复杂的查询.多表关联查询及动态sql时,mybatis则在这方面更出色,并且在使用mybatis时我们可以通过sql优化来提高查询效率,springb

通过不同方式获取接口(包括webService、Socket...)数据

最近一直在做接口程序的开发.发现因为每个公司的不同,他们会使用各种方式开放接口给我们使用它的数据,有HTTP.socket.存储过程.XFire... 不同的接口程序需要通过不同的方式获取他们放出来的数据. 1.HTTP(如何获取数据 ,以下是HTTP使用的过程和解析, ~~~ 主要看代码) 1. 创建HttpClient对象.    2. 创建请求方法的实例,并指定请求URL.如果需要发送GET请求,创建HttpGet对象:如果需要发送POST请求,创建HttpPost对象.    3. 如果

Http 以post方式获取数据

import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import j

内存映射文件方式(MappedByteBuffer)处理文件的实例

package org.phoenix.cases.kafka;import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel;

Jquery 方式获取 iframe Dom元素

Jquery 方式获取 iframe Dom元素 测试页面代码: <html>  <head>   <title>jquery方式,访问iframe页面dom元素</title>   <meta name="Author" content="孙勤波">   <meta http-equiv="Content-Type" content="text/html;charset

iOS网络编程——Day4(使用NSURLConnection异步方式获取数据)

XCode7使用HTTPS通信,在info.plist文件中加一个属性@{@"NSAppTransportSecurity":@{@"NSAllowsArbitraryLoads":YES}} 接口网站:http://www.webxml.com.cn xml  国际标准 json 流行标准 get: 使用简单,接口外露不安全 //QQ在线查询的接口宏定义GET#define QQOnlineURL_GET @"http://webservice.webx