![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设备驱动
zhulinfeiba
越是不敢做的事情越是要去做,越是令自己恐惧的事情越是要去做,越是自己没信心的事情越要去做!!
展开
-
内存屏障
Barrier函数可以在代码中设置屏障,这个屏障可以阻挡编译器的优化,也可以阻挡处理器的优化。 对于编译器来说,设置任何一个屏障都可以保证: 编译器的乱序优化不会跨越屏障,即屏障前后的代码不会乱序; 在屏障后所有对变量或者地址的操作,都会重新从内存中取值(相当于刷新寄存器中的变量副本)。而对于处理器来说,根据不同的屏障有不同的表现(以下仅仅列举3种最简单的屏障): 读屏障rmb转载 2008-12-18 00:45:00 · 803 阅读 · 1 评论 -
关于内存地址映射
今天在字符设备驱动的编写中犯了个错误:用ioremap(0x50004000,size)将一个物理I/O地址映射到虚拟地址,然后又想用virt_to_phys()将该虚拟地址转化为该物理I/O地址。错误分析:(1)0x50004000是物理I/O的高端内存,经ioreamp()映射后将被映射到内核空间的高端内存映射区。(2)virt_to_phys()只能用于内核物理内存映射区的虚原创 2008-12-18 00:14:00 · 1041 阅读 · 0 评论 -
寄存器设置的linux内核编程风格
在一个结构体中定义各连续的寄存器(每个寄存器占四个字节),然后将offset 首地址ioremap,得到的地址传给结构体指针。然后操作寄存器的时候,就操作结构体成员就ok了。原创 2008-12-18 01:12:00 · 707 阅读 · 0 评论