<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 303  文章 - 883  trackbacks - 0
    <2009年2月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    1234567

    歡迎光臨! 
    閑聊 QQ:1074961813

    隨筆分類(357)

    我管理的群

    公共blog

    • n維空間
    • Email : java3d@126.com 群 : 12999758

    參與管理的論壇

    好友的blog

    我的其他blog

    朋友的網站

    搜索

    •  

    最新評論

     

    大家好,從事工作之后,小尋很久沒寫什么了,現在對我來說,工作之余,研究一下技術,可能以成為一種樂趣,當人們做有益他人的事情,而不求回報,總是快樂。希望下來的內容也能給你帶去快樂。  

    關于嵌入式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

    }

    我們可以看到它其實和前面的匯編沒什么區別,只不過是比較好讀罷了。

    不少的處理器都為連在她周圍的硬件(的寄存器),分配給他們自己的地址空間,軟件便是通過地址空間來訪問這些硬件。如果您很想從事這方面的開發,必要的硬件知識是不可少的^_^



    地震讓大伙知道:居安思危,才是生存之道。
    posted on 2009-02-07 11:41 小尋 閱讀(2962) 評論(3)  編輯  收藏 所屬分類: 嵌入式開發

    FeedBack:
    # re: 如何編寫Linux驅動程序(續集)-嵌入式開發1---軟件是如何在硬件上跑起來?[未登錄] 2009-03-24 21:13 hehe
    不錯 呵呵  回復  更多評論
      
    # re: 如何編寫Linux驅動程序(續集)-嵌入式開發1---軟件是如何在硬件上跑起來? 2009-03-31 16:12 liang
    老兄你好:
    我一個問題忙了幾天了,要開發pc104總線, 我想問一下前輩如何看懂接口或總線定義圖啊?  回復  更多評論
      
    # re: 如何編寫Linux驅動程序(續集)-嵌入式開發1---軟件是如何在硬件上跑起來? 2009-04-03 22:55 小尋
    無語 硬件理論基礎 懂了 就會看了  回復  更多評論
      
    主站蜘蛛池模板: 亚洲福利秒拍一区二区| 亚洲成人黄色在线| 特级一级毛片免费看| 在线A级毛片无码免费真人| 亚洲中文字幕日本无线码| 国产免费毛不卡片| 亚洲最大的成人网| 一区二区免费在线观看| 亚洲美女在线国产| 中文字幕手机在线免费看电影| 国产亚洲精品成人a v小说| 在线观看人成视频免费无遮挡 | 91香蕉国产线在线观看免费| 中文字幕亚洲色图| 一级免费黄色大片| 亚洲精品卡2卡3卡4卡5卡区| 日韩免费人妻AV无码专区蜜桃| 亚洲精品乱码久久久久久不卡 | 无码日韩精品一区二区三区免费| 亚洲人成电影福利在线播放| 国产精彩免费视频| 亚洲heyzo专区无码综合| 亚洲午夜无码片在线观看影院猛| 国产免费一区二区三区在线观看| 亚洲高清无在码在线电影不卡| 久久久久国产精品免费免费搜索| 自拍偷自拍亚洲精品播放| 无码国产精品久久一区免费| 久久亚洲中文无码咪咪爱| 激情综合色五月丁香六月亚洲| 日本视频在线观看永久免费| 亚洲精品乱码久久久久久中文字幕| 久久久久免费看黄a级试看| 亚洲国产精品综合久久20| 亚洲色一色噜一噜噜噜| 亚欧人成精品免费观看| 高清免费久久午夜精品| 亚洲自偷自拍另类图片二区| 亚洲А∨精品天堂在线| 51在线视频免费观看视频| 老妇激情毛片免费|