如何让linux在硬件跑起来,如何编写Linux驱动程序(续集)-嵌入式开发1---软件是如何在硬件上跑起来?...

如何编写Linux驱动程序(续集)-嵌入式开发1---软件是如何在硬件上跑起来?

大家好,从事工作之后,小寻很久没写什么了,现在对我来说,工作之余,研究一下技术,可能以成为一种乐趣,当人们做有益他人的事情,而不求回报,总是快乐。希望下来的内容也能给你带去快乐。

关于嵌入式linux开发并不是一句话,或一篇文章能讲清楚的,很多事情也是如此,但有时候,就是那么一两篇文章,将我们从一个陌生领域的门外进入门内。。。。

如果没记错,以前有位兄弟在驱动的文章里提出一个问题,现在我便把它拿出来

如何编写Linux驱动程序(四)

看完你写的"驱动没什么新鲜玩意儿",我在想,LDD那本书居然还在出版,让我非常疑惑.仅仅填几个结构就是驱动程序了啊....怎么连写个积存器的动作都没....

当时我解释了很多,如今看来实在是废话,呵呵,随着对技术认识,可以简单的解释:前面的linux驱动是建立在操作系统之上的,而这位朋友所说的寄存器设置是指在嵌入式开发领域,可以说嵌入开发和驱动开发是两个交叉的学科,嵌入式开发里不一定全是驱动开发,驱动开发也不全限定在嵌入式平台。

关于Linux驱动,我想需要解释一个问题,”软件是如何在硬件上跑起来的?”

从软件的角度看上去,所有的硬件(寄存器)都是地址(如0x00010011),在arm上大多是32位的。那么为什么要用寄存器?举个例子,对arm9处理器做编程,通过对寄存器的编程,如:

LDR r0 , =0x56000010

MOV r1 , #0x00000400

STR   r1 , [r0]           @设置GPBCON寄存器,将GPB5端口(引脚)设置为输出

LDR r0   , =0x56000014

MOV r1 , #0x00000000

STR   r1 , [r0]           @设置CPBDAT寄存器,使GPB5 输出为0低电平

MAIN_LOOP:

B     MAIN_LOOP

我们就将GPB5设置为输出端口,并让GPB5输出低电平,在开发板上您就会看到第一个LED灯被点亮。

从上面的简单例子看到,通过对寄存器的设置,目的是对硬件做配置,使硬件我们的软件所用。所以如果硬要在软件和硬件之间架起桥梁的话,那么这个桥梁便是寄存器,和那些地址了。关于这些地址,我们可以通过手册获得,有时候需要做些许计算。

在这这里大家也许更关心的是:C是如何访问硬件吧?

这里讲到的是裸跑所以必须有一段程序先对内存堆栈做一下配置,这样我们的C才能跑得起来(关于这部分,由于不是重点就不多讲了)

#define   GPBCON    (*(volatile unsigned long *)0x56000010)

#define   GPBDAT    (*(volatile unsigned long *)0x56000014)

int main(void)

{

GPBCON = 0x00000040; //设置GPBCON寄存器,将GPB5端口(引脚)设置为输出

GPBDAT = 0x00000000; //设置CPBDAT寄存器,使GPB5 输出为0低电平

return 0

}

我们可以看到它其实和前面的汇编没什么区别,只不过是比较好读罢了。

不少的处理器都为连在她周围的硬件(的寄存器),分配给他们自己的地址空间,软件便是通过地址空间来访问这些硬件。如果您很想从事这方面的开发,必要的硬件知识是不可少的^_^

地震让大伙知道:居安思危,才是生存之道。

3778772.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值