国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Linux中加入led驅動及測試程序詳解

發布時間:2013-6-8 10:21    發布者:forlinx2013
關鍵詞: linux
51單片機我們在大學都學過,51也是我們一個嵌入式接觸的第一個處理器,它的結構不算復雜。我們學習51單片機,我們可以清楚的說出51單片機中的資源,累加器AB,程序狀態寄存器,程序計數器,6個中斷源,r0-r7工作寄存器等等,其實arm處理器也可以說是一個單片機,只不過它的速度更快,寄存器更多了些,位數多了些(32位),分了幾種工作模式,指令多了些等等,不過只要我們有51的學習經驗,學習arm并不是很困難的事情。
不過我們學習arm不能在像學習51單片機那樣,希望把所有的東西都知道,弄清楚里面的結構,這個是不可能的,也是完全沒有必要的。我們學習arm處理器要學習與應用相關的部分。官方給出的芯片手冊是一個工具,而不是教材,我們沒有哪個工程師能夠把那個一千多頁的文檔從頭到尾的看一遍,三星在寫手冊的時候也有偷工減料的地方,比如6410的有些部分就是直接拿2440的手冊中的。我們用到哪一部分,我們再去查相應的部分就可以了。Arm芯片手冊中關于芯片的結構和相關的使用說明說的很詳細,以前寫過關于裸機LED的小程序,那個小程序只是一個簡單的GPIO的操作,不過對于剛入門的初學者來說,這個小程序能讓我們大概的了解arm芯片。還有那個led的程序運行是有前提的,arm運行之前要先初始化,上次我們直接是在啟動uboot啟動后運行的我們的led程序,uboot把做了初始化的工作。
學習arm和學習51系列的基本內容相同,arm的基本內容主要包括中斷響應過程,arm指令集,存儲器結構和匯編語言的程序結構,并沒有比51更多多的內容,從這幾方面去學習arm,我們會發現學習arm并不是很困難的事。我們不要把arm想的太復雜,太神秘,就像我們沒有接觸單片機之前,我們并不知道什么是單片機,也不知道單片機能做什么,當我們學完之后,我們感覺其實也沒什么難的。Arm也是一樣的,我建議初學者買本關于arm入門的書,從頭看一遍有個系統的掌握。我給大家推薦一本《從51ARM—32位嵌入式系統入門》北京航空航天大學出版社出版的。這本書是我在大學的時候接觸到的第一本arm的書,這本書講的很基礎,引領我們從51過渡到ARM,很多的地方都是講51ARM的對比,讓我們看完之后,感覺arm就是一個“超級”的51。建議關于匯編的指令部分先可以不看,因為那個很長,也不好記,而且日后工作也不怎么用。只有我們在移植與CPU直接打交道的時候才用的著。
先看一下百度百科是怎么定義操作系統的,操作系統(Operating System,簡稱OS)是管理電腦硬件與軟件資源的程序,同時也是計算機系統的內核與基石。操作系統是控制其他程序運行,管理系統資源并為用戶提供操作界面的系統軟件的集合。操作系統身負諸如管理與配置內存、決定系統資源供需的優先次序、控制輸入與輸出設備、操作網絡與管理文件系統等基本事務。如果我們想學操作系統,關于操作系統很多我前輩都推薦我們先學ucos,可以說麻雀雖小五臟俱全,代碼量少,不過里面的基本的機制還是都有的。
我們沒有必要學習arm中的詳細的結構,我們大概了解arm的體系結構就可以了,就像學習51的時候用C語言編程,也不知道是怎么生成的二進制可執行的文件的。我們想玩操作系統也可不太關心arm結構,編譯器會幫助我們完成這個復雜的工作。
操作系統一定意義上也可以看作是一個軟件,只不過這個軟件管理我們的資源,調度任務,管理內存,管理中斷等。Linux是一個多任務,多用戶的一個網絡操作系統,一臺linux機器可以同時運行不同用戶的多個任務,一個cpu怎么來實現呢?我們可以聽歌的同時也可以瀏覽網頁,而另一個人可能也在通過網絡登錄這臺機器做著自己的開發工作。這就是操作系統要做的。把每個任務分成時間片,輪換著讓cpu去執行,只不過這個速度太快了,以至于我們認為我們的任務同時在運行。我們可以把linux想成是一個“大管家”,管理著資源任務。初學者先不要想linux內部究竟是怎么管理的,內部是怎么樣的結構,也不要一開始就拿一本linux內核詳解來看,整天翻著天書,看不到100頁就看不下去了。由淺入深,從簡單到復雜,慢慢的我們就會知道什么是linux了,時機到了,不用怎么去看就已經很明了了。
學習嵌入式linux編程,我們接觸到的大多是linux設備驅動程序的編程。說了半天沒有頭緒的東西,還是來點實際的東西。今天我就給大家簡單的分析一下飛凌的led驅動程序,有了我們前面led的裸機的程序的基礎,這個led的驅動也就簡單多了。
大家最好是看一下linux設備驅動程序一書的前六章,這樣不會對linux中的led中的一些函數太陌生。首先要對linux的字符設備驅動框架有一個大概的了解。
打開linux的源碼目錄,找到drivers/char/s3c6410-led.c
打開看一下源碼,飛凌的這個led驅動程序可以運行,不過不太好,我改了一個小地方,我也看了友善的led的程序,兩者如出一轍,不知道是誰copy誰的。大家有興趣的可以看一下,ioctl中的switch語句,已經有了switch為什么還要在里面用if語句呢,看來高手也有犯小錯誤的時候。主要起控制led燈亮滅的是這個函數。
static long s3c6410_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)//控制函數
{
        if (arg > 4){//因為只有四個led燈,如果大于四就返回一個錯誤
                 return -EINVAL;
        }
        switch(cmd) {              //根據命令來設置亮滅
                unsigned tmp;
                tmp = readl(S3C64XX_GPMDAT);
        case 0:                                                //打開
                tmp &= (~(1<
                break;
        case 1:                                                        //關閉
                tmp |= (1<
                break;

        default:
                return -EINVAL;
                writel(tmp,S3C64XX_GPMDAT);//數據寫回寄存器
                printk (DEVICE_NAME": %d %d\n", arg, cmd);
                return 0;
        }
}
代碼中有簡單的注釋,這里就不多說,我們怎么來測試我們的驅動可以用了呢?
我們寫一個測試程序來看一下。
寫一個流水燈吧,源碼發給大家。
linux下編譯執行
就可以生成ledtest,注意如果把arm-linux-gcc的路徑加到PATH環境變量中去,否則會出現找到不命令的錯誤。
ledtest通過串口發到開發板中,因為沒有執行權限,先運行chmod 777 ledtest
然后再./ledtest
就可以看到流水燈閃動了。
由于閃動的有點快,手機拍下來顯示成兩個亮了。其實是閃動的。
還有再給大家說一下怎么來把led驅動加到內核中呢,linux的編譯用的是makefile管理的,初學者對于makefile的基本結構要知道一些,不用把整個makefile的文檔都看一遍,但也要把知道大概,  makefile的格式規則是這樣的
target : prerequisites  
            command
我們打開char目錄下的makefie看一下,
這一行是把led的驅動加入內核的關鍵,而我們在編譯的時候要配置是加入內核還是編譯成模塊呢,我們運行make menuconfig的時候是怎么出現的配置的呢?這個要看我們的Kconfig文件
這個里面的FORLINX6410_LEDS和前面的Makefile中的文件
只差了一個前綴,這個就是我們在make menuconfig 的時候的配置選項。
進入到Device DriversàCharacter devices找到LedS driver forlinx6410
我們選上這一項就是編譯進內核,如果是M,就是要編譯成模塊,可以動態加載,如果是空就是不編譯。Make menuconfig的時候就是如何剪裁操作系統了,我們可以把不需要的或者沒有必要的驅動不選上,重新編譯,就可以得到自己剪裁過的內核了
驅動大體就是這樣加入到內核的。不過這只是個簡單的驅動,復雜的驅動也有點復雜,這里不介紹。
移植內核的過程有點復雜,不可能一兩句說的清楚,大體的步驟就是先移植與arm體系結構相關的部分,先讓linux在平臺上跑起來,先移植nand驅動和串口驅動,這樣我們可以從串口查看調試信息,以便我們進行其它驅動的移植,然后再移植各個相關的驅動。與6410相關的內核代碼在源代碼的arch/arm/mach-s3c64xx/文件夾下。驅動的設備驅動都在drivers目錄下,char目錄下是字符設備驅動,block目錄下是塊設備驅動程序等等,我們只要一看名字應該都知道大概是什么驅動。我們初學者大多接觸的是字符設備驅動。
對于初學者不要有太多的憂慮,不要想我不是這個專業的,很多都不會,本人大學學的是電子信息工程,和嵌入式也沒有太大的關系,操作系統不懂,arm結構不明白,我們可以慢慢學,沒有誰一下子就把能把操作系統或者是arm說清楚的,我們多接觸,一天會一點,不會想一口吃個胖子,嵌入式講內功的,其實前邊我和大家說,這個可以不用全會,那個不必全知道,是個讓大家不至于一學嵌入式就被困難嚇回去的做法,我是想讓大家在盡短的時間內了解嵌入式的全貌,知識還是越多越好的。
本文地址:http://m.qingdxww.cn/thread-116175-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久中文字幕亚洲精品最新 | 2019精品国产品免费观看软件 | 欧美日本一二三区 | 国产亚洲福利精品一区二区 | 污污的网站在线免费观看 | 日韩在线手机看片免费看 | h视频在线观看免费 | 精品欧美一区手机在线观看 | 日本一卡精品视频免费 | 免费黄网站在线看 | 国产女在线 | 一级毛片免费观看不卡的 | 成人一级黄色毛片 | 亚洲免费视频一区二区三区 | 国产精品线在线精品国语 | 日日摸夜夜添夜夜免费视 | 麻豆国产精品入口免费观看 | 天天色综合2 | 一级毛片大全 | 精品在线视频一区 | 国产一区二区在免费观看 | 亚洲欧美成人网 | 精品国产欧美一区二区 | 免费国产小视频在线观看 | 免费aa毛片| 999久久狠狠免费精品 | 男女性关系视频免费观看软件 | 国产小视频在线高清播放 | 四虎永久在线免费观看 | 国产毛片女人18水多 | 麻豆国产高清精品国在线 | 国产成人精品免费久久久久 | 精品国产免费观看一区高清 | 欧美日韩精品在线观看 | 岛国精品视频 | 1024国产精品视频观看 | 欧美韩国日本在线观看 | 日本黄色免费网址 | 九九久久国产精品免费热6 九九久久国产精品 | 国产真实系列在线 | 日韩在线黄色 |