免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5679 | 回复: 15
打印 上一主题 下一主题

linux内核驱动源码学习的困惑 [复制链接]

luozhao1984 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-04 17:20 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2010-01-05 11:03 |只看该作者
LZ说一下自己的基础先

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
3 [报告]
发表于 2010-01-05 11:37 |只看该作者
原帖由 luozhao1984 于 2010-1-4 17:20 发表
]本人用的是扬创科技的S3C2440,想学习相关驱动,看内核源码看的很晕,
比如LED驱动里面用到的函数s3c2410_gpio_setpin(led_table[arg], !cmd);经过查询后知道该函数是设置相应GPIO口的值,但是对该函数的具体 ...


看一下 2440的 DataSheet里面 的 ioports一章节,你会 豁然开朗的

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [报告]
发表于 2010-01-05 12:44 |只看该作者

回复 #1 luozhao1984 的帖子

结合数据手册来看驱动
luozhao1984 该用户已被删除
5 [报告]
发表于 2010-01-06 10:25 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2010-01-06 14:07 |只看该作者
1.GPIO
一般嵌入式处理器物理硬件上给出了很多引脚,有部分称为GPIO(一般目标的输入输出)
每个GPIO引脚要么用作输出0或1, 要么用作输入0或1, 代表了一个二进制信息位.
从功能上来说,如果只关注GPIO引脚的高低电平变化,那就是GPIO的一般功能。
但是有些GPIO引脚可以用作集成在处理器片内的外设控制器的信号输入输出(用于控制特定的外设),这就是GPIO的特殊功能。

就是说GPIO引脚要么用作输入输出0或1信号(控制非处理指定的外设),要么用于控制处理器指定的外设,这是可以配置的。

2.GPIO引脚的配置

就拿s3c2440的GPBCON和GPBDAT寄存器来说

端口B有11个GPIO引脚

(1)GPBCON是端口B的配置寄存器,用于配置这11个引脚的功能
比如配置GPB10引脚, GPBCON寄存器的[21:20]位可以配置成
00 = Input   01 = Output
10 = nXDREQ0 11 = reserved
如果配置成10就是这个引脚的特殊功能
如果配置成01就是GPB10引脚用于输出

(2)GPBDAT是端口B的数据寄存器
如果上述(1)中我们配置了GPB10引脚为输出(01), 那么只要向GPBDAT的第10个数据位写1, 物理硬件上就会在GPB10引脚输出高电平(信号1)

3.GPIO寄存器的物理地址

就上面的GPBCON和GPBDAT寄存器
datasheet上明确有
GPBCON 0x56000010
GPBDAT 0x56000014

4.GPIO寄存器的物理地址在arm虚拟地址空间的映射
如果linux打开了arm的mmu, 驱动程序中就不能直接访问上述的GPBCON或GPBDAT的物理地址, 必须先映射到虚拟地址

[ 本帖最后由 readkernel 于 2010-1-6 14:54 编辑 ]
luozhao1984 该用户已被删除
7 [报告]
发表于 2010-01-06 15:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2010-01-06 15:25 |只看该作者
ioremap
脱离主题了。Google

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
9 [报告]
发表于 2010-01-10 16:32 |只看该作者
那些宏看不明白?!

一层一层展开,展开完了你就明白了

很多宏为了增强通用性,套了很多层,虽然形式上搞的很复杂,但是功能一般都很简单,展开了一看就明白了

而且从最终的宏名上就能看出123来

看来LZ是太懒了,只对着源码过了一遍而已,就说看不明白

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
10 [报告]
发表于 2010-01-11 12:11 |只看该作者

回复 #9 lelee007 的帖子

宏看不明白,是因为你没有理解IO对应的硬件操作特性
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP