嵌入式系统010-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是极大的浪费。把内部寄存器也看成“特殊的物理地址”即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值