当前位置:  技术问答>linux和unix

请教嵌入式linux驱动2个问题。

    来源: 互联网  发布时间:2016-02-08

    本文导语:  1.驱动程序对自定义的全局变量怎么使用互斥进行访问? 2.嵌入式驱动中,如果寄存器的物理地址是0xffff0000,该怎么进行虚拟地址转换,然后又怎么读写相应的寄存器? 谢谢,最好有简单代码。 | ...

1.驱动程序对自定义的全局变量怎么使用互斥进行访问?
2.嵌入式驱动中,如果寄存器的物理地址是0xffff0000,该怎么进行虚拟地址转换,然后又怎么读写相应的寄存器?
谢谢,最好有简单代码。

|
1.

Linux下互斥有很多种方法

DECLARE_MUTEX(name); 
DECLARE_MUTEX_LOCKED(name);

void init_MUTEX(struct semaphore *sem);
void init_MUTEX_LOCKED(struct semaphore *sem);

void down(struct semaphore *sem);
int down_interruptible(struct semaphore *sem);
int down_trylock(struct semaphore *sem);

还有Completions,自旋锁,等等等等,具体参考LDD3第5章


2.

Linux下驱动我接触过一些修改寄存器的操作,都是通过系统定义的结构体进行修改,没有直接通过寄存器地址修改过。。

比如,修改cpm2的寄存器,地址为CPM_MAP_ADDR
volatile iop_cpm2_t *io;
volatile cpm2_map_t* immap = (cpm2_map_t*)CPM_MAP_ADDR;
io = (iop_cpm2_t *)&(immap->im_ioport);
io->iop_pdird &= ~I2C_SDA; /* input */

以上操作就实现了对CPM_MAP_ADDR寄存器的dird这个引脚的修改。

|
如果用 ioremap 转换,行吗?

-----------------------------------

这个可以,我最近就在自己的学习板上成功的用这个函数操作了硬件寄存器

|
关于寄存器物理地址与虚拟地址的转换,在ARM上的函数是:
io_p2v
io_v2p

|
2.嵌入式驱动中,如果寄存器的物理地址是0xffff0000,该怎么进行虚拟地址转换,然后又怎么读写相应的寄存器? 
谢谢,最好有简单代码。

---------------------------------
比如我要写aaa积存器,aaa的地址是0xffff0000,大小是4个字节,那么就这样

#include

volatile unsigned long *temp;

temp=(unsigned long *)ioremap(0xffff0000,4);

然后就可以对这个积存器写和读了

写操作
*temp=.....

读操作
...=*temp;

有些硬件可能有点差别的要用readb writeb之类的宏来读写

读写完之后就

iounmap((void *)temp);

|
ioremap和read[b|w|l],write[b|w|l]一起用,不然可移植性上不够

|
设备手册上有函数, 不一定用ioremap.

    
 
 

您可能感兴趣的文章:

  • 嵌入式系统考研请教?
  • 请教下关于嵌入式linux电源管理的问题。
  • 请教:嵌入式Linux交叉编译工具----版本选择的问题
  • Vxworks 嵌入式操作系统入门请教,请多指点!
  • 请问一下,关于arm下的嵌入式linux驱动相关问题请教是应该发在哪个讨论区?
  • [请教]嵌入式设备在windows下自动生成磁盘分区
  • 请教,嵌入式linux 下数据库选择问题。
  • 请教关于Linux环境下做嵌入式开发!!
  • 请教一个嵌入式linux中mount中文目录的问题
  • 请教:嵌入式开发第一关,usb转串口线怎么用?
  • 请教嵌入式方面的问题
  • 请教个嵌入式读写错误的问题
  • 请教关于工控设备的嵌入式linux程序开发(无界面或简单界面)
  • 请教各位 我将来想从事嵌入式linux方面的工作。 如果我学好ARM+linux后从事那些行业的工作更好呢? 或者进那些公司更有前途呢?那些公司更适合我呢?
  • 请教关于嵌入式Linux!!着急啊~
  • 嵌入式linux修改IP地址无法保存的问题,请教
  • 准备明年跳槽加入Linux 嵌入式开发的大部队,先向前辈们请教一点问题
  • 关于嵌入移植出现的问题,请教!!
  • 请教一个在JavaScript中调用嵌入对象的方法属性的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教有关linux驱动开发,按关机键关机时,驱动应作哪些结束工作?
  • 请教!关于linux字符驱动程序
  • 请教一下在驱动里怎么调用应用程序
  • 请教!linux设备驱动
  • 请教用户空间编写设备驱动
  • Linux新手请教声卡驱动!!!!!!!!!!!
  • 请教各位大大 怎样编写LINUX触摸屏的驱动程序?
  • 请教Linux设备驱动的具体应用(基于PC)
  • 请教linux驱动复杂,庞大的结构
  • 请教一个关于驱动测试程序的问题
  • 高分相送,请教cs5530芯片组声卡驱动的问题
  • 请教:怎么安装声卡驱动?
  • 请教关于linux开发驱动程序的方向
  • 巨难请教网卡驱动
  • 请教一个显卡问题:我是u5的机器,它的显卡是集成的吗?需要安装驱动吗?
  • 请教单片机驱动程序开发
  • 《DCAD-620U ADSL Modem》linux下没有驱动怎么办?高分请教(是usb的adsl modem)
  • 高分请教一个串口驱动模块加载的问题
  • sql server数据库有没有专门的jdbc驱动程序,若有,请教怎样获得?
  • 请教如何安装内猫的驱动程序
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3