使用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-25 10:16:17

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

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

每个CPU,都有它固定的ID号,ID号就是这个CPU唯一的标识,它可能隐含着CPU的生产日期,版本号,型号等等,那么,在我们的这款友善之臂Tiny4412的板子上,我的这个CPU的ID又是多少呢?从我在光盘里拿到的linux-3.5内核其实已经将ID相关的驱动开发好了,我们在内核启动的过程中就可以看到板子CPU的ID:     看下图,我们看到CPU EXYNOS4412 (Id 0xe4412011).这个就是我板子上CPU的ID号.其它跟我相同的板子,虽然CPU也是相同的,但是板子的ID号会

Windows Phone 同步方式获取网络类型

在Windows Phone 开发中有时候需要获取设备当前连接网络的类型,是Wifi,还是2G,3G,或者4G,SDK中提供获取网络类型的API(Microsoft.Phone.Net.NetworkInformation. DeviceNetworkInformation),通过此API我们可以方便的获取相关信息.但是此API是基于异步回调的方式获取的,如果需要同步获取,那么就需要做一些特殊的处理. 以下代码定义网络类型信息类,用于存储获取的网络类型信息. /// <summary> ///

ASP.Net Post方式获取数据流的一种简单写法

  这篇文章主要介绍了ASP.Net Post方式获取数据流的一种简单写法,本文直接给出代码实例,需要的朋友可以参考下 最近在弄一些第三方的平台,经常调用第三方的接口实现某些特定的功能 在实现的同时基本上都需要本地的数据经过服务器在Request到第三方的服务器中处理,再返回相应的数据结构体:json/xml 以下是我总结的一个小方法,请农友们笑纳: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

wfs方式获取最短路径

之前有几篇文章结束基于pgrouting的最短路径规范,获取最短路径用的是wms方式,这样的好处就是路径样式可以预先是geoserver中设置好,且路径渲染由geoserver在后台渲染.但是用户的需求是无穷无尽的,加入用户要求结果路径的样式需要动环效果该怎么做呢?          Wms方式获取的地图是后台渲染好的图片,如果要在前端做出动画效果,就需要用wfs的方式来请求最短路径了,这样做的思路是先获取到结果路径中的点坐标,拿到了点数据,剩下的动画啦.样式啦就可以随心所欲的制作了.     

html5-js以window.onload方式获取audio.duration的值为NaN,获取不到正确时长?

问题描述 js以window.onload方式获取audio.duration的值为NaN,获取不到正确时长? window.onload=function time(){ var duration = document.getElementById("audio").duration; document.getElementById("ss").innerHTML=duration; } 通过服务器访问 获取到的值为NaN. 但如果通过页面上的一个按钮点击,以on

求助:使用ajax方式获取新页面内容替换当前整个页面,并执行新页面脚本

问题描述 在当前页面内,使用ajax方式获取一个新网页的内容,替代当前网页,包括:显示新网页所有内容,执行新网页该执行的脚本.用jQuery可以实现,代码如下:$(function(){$.ajax({url:"show.htm",//目标页面dataType:"html",type:"GET",cache:false,success:function(html){$("html").html(html);}});});但是自

OkHttp如何对get方式获取的网页使用post方式发送表单数据?

问题描述 OkHttp如何对get方式获取的网页使用post方式发送表单数据? 我先使用一个get方式获获取了一个网页response,接下来我想用post方法对这个网页传递参数,要怎么锁 解决方案 你描述的2个过程,是没有关系的.向一个网站传递参数,你不用首先get下来获取响应,你获得的东西只是一个静态的内容. 你想用计算机模拟你和网站的交互,你需要正常模拟你访问这个网站,填好数据,并提交,录制下你实际提交出去的数据,然后用okhttp来编程完全模拟,就可以了. 解决方案二: 你这只是加了co

server-请问如何设置CA 服务器以支持http post 的方式获取证书

问题描述 请问如何设置CA 服务器以支持http post 的方式获取证书 想要测试一下SCEP 协议 通过 http post 的方式 更新证书, 但是发现 windows2008 server貌似不支持,搜索未果,请教一下可能知道的大神 解决方案 http://wenku.baidu.com/link?url=4KJlfD-LMZ9rDjuubTzrDUwBag2Di7bHjHvxnQcaYyStXYUsfQ2tlqwG11vwLXKAnyAY699dtUpn8ZtH8C4sRw-9BUxt

imageview- 如何以程序的方式获取一个ImageView的高度和宽度,并且在另一个 ImageView中设置?

问题描述 如何以程序的方式获取一个ImageView的高度和宽度,并且在另一个 ImageView中设置? 这我使用的代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:backg