Linux内核硬件访问技术】的更多相关文章

① 驱动程序控制设备,主要是通过访问设备内的寄存器来达到控制目的.因此我们讨论如何访问硬件,就成了如何访问这些寄存器. ② 在Linux系统中,无论是内核程序还是应用程序,都只能使用虚拟地址,而芯片手册中给出的硬件寄存器地址或者Ram地址则是物理地址,无法直接使用.因此,我们读写寄存器的第一步就是将它的物理地址映射为虚拟地址. (1)动态映射:指在驱动程序中采用ioremap函数将物理地址映射为虚拟地址 void* ioremap(physaddr, size); phyaddr: 待映射的物理…
在Linux系统中,无论是内核程序还是应用程序,都只能使用虚拟地址,而芯片手册中给出的硬件寄存器地址或者RAM地址则是物理地址,无法直接使用,因此,我们读写寄存器的第1步就是将将它的物理地址映射为虚拟地址. 所以我们要用到静态映射和动态映射 ,用得比较多的是动态映射 所谓动态映射,是指在驱动程序中采用ioremap函数将物理地址映射为虚拟地址.原型:void * ioremap(physaddr, size)参数:Physaddr:待映射的物理地址Size: 映射的区域长度返回值:映射后的虚拟地…
我们结束 PCI 的讨论, 通过快速看一下系统如何处理在市场上的多种 PCI 控制器. 这只 是一个信息性的小节, 打算来展示给好奇的读者, 内核的面向对象分布如何向下扩展到最 低层. 用来实现硬件抽象的机制是通常的包含方法的结构. 它是一个很强功能的技术, 只添加最 小的解引用一个指针的开销到正常的函数调用开销当中. 在 PCI 管理的情况下, 唯一的 硬件相关的操作是读和写配置寄存器的那些, 因为在 PCI 世界中所有其他的都通过直接 读和写 I/O 和内存地址空间来完成, 并且那些是在 C…
1.中断屏蔽: 单CPU范围内避免竞态的一种简单方法:在进入临界区之前屏蔽系统的中断.中断屏蔽将使得中断与进程之间的并发不再发生,而且Linux内核的进程调度等操作都依赖中断来实现,内核抢占式进程之间的并发也就得以避免. 操作步骤: local_irq_disable()  //屏蔽中断 critical section()    //临界区 local_irq_enable()   //开启中断 中断对于内核的运行非常重要,在屏蔽中断期间的终端都无法得到处理,因此长时间的屏蔽中断是很危险的,有…
文件的访问模式:1.规范模式:2.同步模式:3.内存映射模式:4.直接I\O模式5.异步模式: 内存映射模式:1.共享型:在线性区页上的任何写操作都会修改磁盘上的文件:而且这种修改对映射了同一文件的所有进程都是可见的.2.私有型:进程创建只读文件的时候用到,效率更高.对它对写操作不会改变磁盘文件,也对其他进程不可见.3.内存映射的创建同样不是立即分配页框,而是尽量推迟:当进程对它进行寻址时,就产生一个缺页异常.4.非线性内存映射,它映射的不是文件的顺序页,而是每一内存页都映射文件数据的随机页.…
动态调试功能就是你可以决定在程序运行过程中是否要 pr_debug(), dev_dbg(), print_hex_dump_debug(), print_hex_dump_bytes() 这些函数正常运行起来. 编译内核:打开CONFIG_DEBUG_FS和CONFIG_DYNAMIC_DEBUG echo –n 'file suspend.c line 340 +p' > /sys/kernel/debug/dynamic_debug/control     让 kernel/power/s…
驱动开发概述 1.驱动分类 1.1 常规分析法 1.1.1  字符设备  字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,  这样的驱动通常实现open, close, read和write 系统调用.例:串口,LED,按键. 1.1.2  块设备 在大部分的Unix系统中, 块设备定义为:以块(通常是512字节)为最小传输单位的设备,块设备不能按字节处理数据. 而Linux则允许块设备传送任意数目的字节.因此, 块和字符设备的区别仅仅是驱动的与内核的接口不同.常见的块设备包括硬盘…
前言 在linux内核中,通常集成了带有封包过滤和防火墙功能的内核模块, 不同内核版本的模块名称不同, 在2.4.x版本及其以后的内核中, 其名称为iptables, 已取代了早期的ipchains和远古时期的ipfwadm. 在命令行中可以通过lsmod | grep -i iptable来查看当前加载的相关模块信息. iptables作为内核模块, 由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集. 与此同时, iptables也作为用户空间(userspace)的一个管…
1.内核版本由linux内核社区统一编码和发布,格式如下图: major.minor.patch-build.desc 主版本号.次版本号.对次版本号的修订次数-编译次数.当前版本的特殊信息 次版本号有奇数和偶数之分,奇数表示开发版,偶数表示稳定版 desc:常见参数EL(Red Hat企业版Enterprise Linux).pp(Red Hat测试版).fc(Red Hat中Fedorca Core).smp(对称多处理器).rc/r(候选版本,后面的数字越大越接近正式版) 2.uname…
(1).虚拟化产品对比介绍 虚拟化技术有以下三种:仿真虚拟化,这是一种对系统硬件没有要求,但性能最低的虚拟化技术:半虚拟化,这是一种直接使用物理硬件,性能高,但需要修改内核的虚拟化技术:全虚拟化,这是一种直接使用物理硬件,性能高的虚拟化技术. VMware支持仿真虚拟化,xen支持半虚拟化,KVM支持全虚拟化.其中VMware安装在Windows上,支持虚拟机系统与物理机系统不同:xen在REHL5中自带,安装时需要安装内核kernel-xen,只支持与物理机一样的操作系统:KVM在REHL6中…