天天看点

嵌入式系统010-GPIO的初始化GPIO的初始化GPIO的初始化流程常见问题

目标:1.GPIO的初始化

2.GPIO的调用过程

3.怎么自己看内核代码

视频中查看代码的过程大家可以参考着来,如果有兴趣可以按照这个套路看内核源代码

一、让大家能够接受或者理解:

对宏定义EXYNOS4_GPL2(0)的操作就是对4412芯片管教AC21寄存器的操作

上层程序员(包括驱动工程师)不用关心物理地址和虚拟地址具体是多少,只需要对一组宏定义操作,就是对4412内部寄存器操作

GPIO的初始化

一、在内核源码目录下使用目录 “ls drivers/gpio/* .o”,可以看到"gpio exynos4"被编译进了内核

生成.o文件代表最终被编译进了内核

除了menuconfig配置文件,还可以通过.o文件来判定该文件是否编译进入内核

在"gpio-exynos4.c"文件最小面一行

-core_initcall(exynos4_gpiolib_init);

core_initcall代表在linux初始化过程中会调用

初始化函数是在源码目录下"include/linux/init.h"文件中定义的,该头文件中定义了一系列的初始化函数,在linux启动的过程中会按等级

一、GPIO的初始化

1.初始化函数调用了"exynos4_gpiolib_init"

2.通过软件source insight查找到exynos4_gpiolib_init函数的定义

3.在该函数中引用chip = exynos4_gpio_common_4bit结构体

4.查找到结构体exynos4_gpio_common_4bit

5.可以看到结构体中有S5P_VA_XXXX的基地址定义,CA一般用来代表虚拟地址

物理地址和虚拟地址的映射关系

1.虚拟地址和物理地址映射

虚拟地址一般很好查找,一般在平台gpio的文件中就可以找到宏定义

2.在source insight中搜索关键字"S5P_VA_GPIO2",看看那里用到了这个宏定义

GPIO的初始化流程

一、初始化过程简单描述

1.平台文件分别定义好物理地址和虚拟地址

2.物理地址和虚拟地址之间映射

二、在初始化,引入程序员需要使用的GPIO宏定义,并将宏定义装入 chip结构体中

常见问题

1.内部寄存器不是很快嘛?CPU为什么不直接读取?

内部寄存器是很快,但是相对于CPU还是非常慢。CPU处理数据是将内存中一大段一大段处理,如果单个的读取内部寄存器的值,对CPU是极大的浪费。把内部寄存器也看成“特殊的物理地址”即可。