linux硬件访问技术
2015-12-14 16:32
453 查看
1.硬件访问实质
驱动控制设备,主要通过访问设备内的寄存器;来达到控制目的的,因此我们讨论如何访问硬件,就成了如何访问这些寄存器了。2.访问流程:包括地址映射和读写寄存器
地址映射:linux系统中,无论是内核程序还是用户程序都只能使用虚拟地址,而芯片手册所给的寄存器或者RAM地址则是物理地址,无法直接使用,因此,我们读写寄存器的第一步就是将他的物理地址映射虚拟地址。动态映射:
所谓动态映射,是指在驱动程序中采用ioremap()函数将物理地址映射为虚拟地址。
原型:void * ioremap(physaddr,size)
参数:physaddr:待映射物理地址,size:映射的区域长度
返回值:映射后的虚拟地址。
静态映射:
所谓静态映射,是指linux系统根据用户实现指定的映射关系,在内核启动时,自动的将物理地址映射为虚拟地址。
映射关系:
在静态映射中,用户是通过map_desc结构来指明物理地址和虚拟地址的映射关系。
struct map_desc{ unsigned long virtual;//映射后的虚拟地址 unsigned long pfn;//物理地址所在的页帧号 unsigned long length;//映射长度 unsigned long type;//映射的设备类型 }
pnf:利用
__phys_to_pfn(物理地址)可以计算出物理地址所在的物理页帧号
3.寄存器的读写:
在完成地址映射后,就可以读写寄存器了,linux内核提供了一系列函数来读写寄存器。[code]unsigned ioread8(void *addr) unsigned ioread16(void *addr) unsigned ioread32(void *addr) unsigned readb(address) unsigned readw(address) unsigned readl(address) unsigned iowrite8(u8 value ,void *addr) unsigned iowrite16(u16 value ,void *addr) unsigned iowrite32(u32 value ,void *addr) unsigned writeb(unsigned value ,address) unsigned writew(unsigned value ,address ) unsigned writel(unsigned value ,address )
相关文章推荐
- linux 登陆key生成
- CentOS解压.rar文件
- LINUX RHEL6.5字符界面安装图形化桌面
- CentOS编译安装lamp
- ubuntu (linux) 中的进程状态查询与管理 top/htop/ps/pgrep/kill
- Linux学习笔记之<查看环境变量>
- Linux ramfs tmpfs使用
- linux查看系统的硬件信息
- linux下及Aix下编译命令总结
- CentOS 7.2 上编译安装MySQL 5.7.13
- ARM Linux 安装 JVM
- python获取本机局域网IP地址(适用于Windows、Linux、Mac)
- linux下磁盘分区,格式化和挂载
- linux常用命令
- Linux C编程----2(makefile)
- 使用libvirt创建和管理KVM虚拟机
- linux命令大全
- Linux C编程----1(hello world!)
- Linux下如何使用Vi编辑器
- ubutu14 下编译linux0.11内核