嵌入式Linux驱动案例之一,嵌入式linux案例

环亚ag娱乐下载嵌入式Linux驱动案例之一,嵌入式linux案例


前几天解决一个嵌入式Linux驱动问题,做为一个案例进行记录。


   本案例是一个CPU通过LocalBus总线访问外围一个设备,具体设备是一个DSP器件,在实际应用中,性能要求很高,对数据访问速度提出比较高的要求。既然是通过LocalBus总线来访问,实际上也就是在CPU的IO寻址空间。原来的做法是通过ioremap的方式将这个空间进行重映射,然后CPU对其进行读写访问。读取DSP的一个数据需要经过写地址,读数据两个步骤。


   现象描述:

        发现无论如何,在写完地址之后一定要等待一段时间,或者一定要先读取一下DSP的Ready寄存器。这个操作在大数据处理时消耗相当可观,而实际应用上对性能要求很高,这个等待或者读取Ready寄存器的动作必须清除。


原因分析:

      本系统中采用的CPU是Powerpc,对LocalBus进行读写操作,那么读和写操作两个之间进行切换是有一个过程的,先写后读,转换太快可能写会不成功,问题的根本是驱动中采用的是ioremap之后的操作方式。


解决方法:

    改变ioremap的方式,使用Linux 内核中对IO的操作接口out和in的方式。调用函数为in_be16和out_le16。定义如下:


inline void out_8(volatile unsigned char *addr, int val)
{
__asm__ __volatile__("stb%U0%X0 %1,%0; sync"
    : "=m" (*addr) : "r" (val));
}


 inline unsigned in_le16(const volatile u16 *addr)
{
unsigned ret;


__asm__ __volatile__("lhbrx %0,0,%1; twi 0,%0,0; isync"
    : "=r" (ret) : "r" (addr), "m" (*addr));


return ret;
}


可以看出是用汇编实现的,其中有一个指令sync,表示同步操作。应该是类似于cache操作的原理,加上同步操作之后数据可以完成读和写的全部操作过程。

经过修改,问题得到解决,不需要等待也不需要在写和读的切换过程中增加其它操作。最后,整个系统比原来使用ioremap的方式在实时性上有很大的提高,而且CPU占用率大大降低。


总结:

    在Linux驱动开发中,对于IO的操作应该使用内核提供的IO接口函数,最好是参照内核其它驱动的例子,平时多阅读内核代码是最好的学习方法。



跪一份完整的嵌入式Linux方面的C项目实例

一定的基础,这些基础大概包括下面两点:
学过c语言,汇编;
对微控制器有一定了解。

一般理工类(计算机,自动化,电子类专业)的学生大三学比较合适。因为到了大三,一般学过了c语言及汇编,虽然大部分学生没有独立写过一个程序,但至少上过这门课,自己也看过相关知识点;而且上过8051等微控制器原理的课程,也看过类似的教课书。

具备以上基础的人,也不是谁都可以学。因为嵌入式学习门槛比较高,难度比较大,不但要有一定的毅力,而且要触类旁通,如果太死板也很难学会。

概括的说学习嵌入式还必备下列性格:
热爱研发!
切忌浮躁!
执着,顽强,自信!
举一反三!

如果你符合以上条件,完全可以经过努力把嵌入式学好,我了解到的在华清远见学习的一个同学,之前基本上什么基础都没有,写一个“hello world”程序都为难,编译了几次才通过,但是经过四个月的努力,在华清远见专业老师和同学们的热心帮助下,从一个完全的菜鸟变成了入门级别的linux工程师了,找到了一份做应用开发的工作,工资大概有四千吧,还算不错。

LZ要自学的话,可以多到华清远见的网站上看看他们的课程设置,就知道自己该学些什么,还有很多学习资料和视频可以下载,另外华清远见出版的40多本嵌入式专业畅销书,外面各大书店和图书馆都有,你都可以去翻翻看看。

祝你早日学有所成!

请参考,希望能帮到你。
 
有哪位可以帮我下载一篇“嵌入式linux操作系统的驱动程序设计与实现“的论文?有加分

我已经下载了您要的论文,请将您的邮箱告诉我,以便资料的发送。
至于您的疑问,我也不太清楚,因为没遇到过这样的事。
知道上似乎有人提过相似的问题,您可以查看一下。
 

http://www.bkjia.com/Androidjc/859026.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/859026.htmlTechArticle嵌入式Linux驱动案例之一,嵌入式linux案例 前几天解决一个嵌入式Linux驱动问题,做为一个案例进行记录。 本案例是一个CPU通过LocalBus总线访...

本文源自: 环亚娱乐

上一篇:使用PhoneGap开发基于Html5应用二:第一个PhoneGap应用:百度,phonegaphtml5

下一篇:没有了