在以前的文章中,有一篇

基于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");

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

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

    一,可在内容模板中直接这样写{dede:field.typeid/} 可显示本栏目的id 二,也可这样写 {dede:type}[field:ID /]{/dede:type}  . 三, 如果是在{ ...

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

    每个CPU,都有它固定的ID号,ID号就是这个CPU唯一的标识,它可能隐含着CPU的生产日期,版本号,型号等等,那么,在我们的这款友善之臂Tiny4412的板子上,我的这个CPU的ID又是多少呢?从我 ...

  3. 如何获取板子上独有的ID号EXYNOS4412/Imx6ul【转】

    本文转载自:http://blog.csdn.net/u010871058/article/details/75637175 每个CPU,都有它固定的ID号,ID号就是这个CPU唯一的标识,它可能隐含 ...

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

    springboot作为一个微服务框架,给我们开发人员提供极大的便利,秉着约定大于配置的原则,通过starter包的形式为我们做了许多默认的配置,在进行数据持久化到关系型数据库时,我们一般都会首选sp ...

  5. 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

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

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

  7. 基于uFUN开发板的心率计(一)DMA方式获取传感器数据

    前言 从3月8号收到板子,到今天算起来,uFUN到手也有两周的时间了,最近利用下班后的时间,做了个心率计,从单片机程序到上位机开发,到现在为止完成的差不多了,实现很简单,uFUN开发板外加一个Puls ...

  8. java 利用HttpURLConnection方式获取restful格式的服务数据

    /** * @Author: * @Description:利用HttpURLConnection方式获取restful格式的服务数据 * @Date: */ private static List& ...

  9. 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案

    1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...

随机推荐

  1. Hive-ORC文件存储格式

    ORC文件格式是从Hive-0.11版本开始的.关于ORC文件格式的官方文档,以及基于官方文档的翻译内容这里就不赘述了,有兴趣的可以仔细研究了解一下.本文接下来根据论文<Major Techni ...

  2. WINDOWS系统注册表取得管理权限研究

    有的时候开发我们需要取得系统管理员权限,可以通过修改注册表实现,研究网上的各种方法,整理得一下脚本实现取得管理员权限 脚本如下 Windows Registry Editor Version 5.00 ...

  3. iOS开发之WKWebView代替UIWebView

    前言 Xcode8发布以后,编译器开始不支持IOS7,所以很多应用在适配IOS10之后都不在适配IOS7了,其中包括了很多大公司,网易新闻,滴滴出行等.因此,我们公司的应用也打算淘汰IOS7. 支持到 ...

  4. 13常用sql语句

    创建语句 CREATE table if not exists b(id INTEGER PRIMARY KEY AUTOINCREMENT,waijian int ,FOREIGN KEY (wai ...

  5. UNIX网络编程——epoll的 et,lt关注点

           epoll模型有两种工作模式,ET和LT两种模式下都有一些细节值得注意,以下是一些思考:   一.ET模式下 Q1:调用accept时,到底TCP完成队列里有多少个已经建立好的连接? 这 ...

  6. 嵌入式LINUX环境下视频采集知识

    V4L2是Linux环境下开发视频采集设备驱动程序的一套规范(API),它为驱动程序的编写提供统一的接口,并将所有的视频采集设备的驱动程序都纳入其的管理之中.V4L2不仅给驱动程序编写者带来极大的方便 ...

  7. Android初级教程初谈自定义view自定义属性

    有些时候,自己要在布局文件中重复书写大量的代码来定义一个布局.这是最基本的使用,当然要掌握:但是有些场景都去对应的布局里面写对应的属性,就显得很无力.会发现,系统自带的控件无法满足我们的要求,这个时候 ...

  8. Objc中为何某些类的属性要设置为copy而不是strong?

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 不知道大家是否注意,我们再使用一些第三方类的时候大多数情况下对 ...

  9. Android开发小问题集

    由于安卓系统比较复杂,开发中会发中会碰见各种小问题,在此做一些记录,只要觉得有必要就会添加进来. 1.触屏鼠标模式和触屏模式 开发android4.3高通400平台时,用atmel_max 640T作 ...

  10. 最简单的基于DirectShow的示例:视频播放器

    ===================================================== 最简单的基于DirectShow的示例文章列表: 最简单的基于DirectShow的示例:视 ...