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

Linux中加入led驅(qū)動(dòng)及測(cè)試程序詳解

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

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

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产a免费 | 午夜不卡视频 | 日韩 视频在线播放 | 欧美精品v日韩精品v国产精品 | 国产区精品 | 2023男人天堂 | 亚洲视频免费在线 | 老师感受到它在你里面了吗app | 久久人人干 | 亚洲欧美视频在线播放 | 国产乱人视频免费播放 | 青青操网址| jizz在亚洲 | 欧美日本另类 | 亚洲精品亚洲人成在线麻豆 | 大伊香蕉精品一区视频在线 | 成年一级片 | 丁香五月网久久综合 | 免费不卡中文字幕在线 | 福利久久 | 国内自拍第一页 | 免费啪视频 | 国产成人亚洲毛片 | 成人网视频在线观看免费 | 免费香蕉成视频成人网 | 亚洲系列国产系列 | 日韩一级黄色片 | 在线视频毛片 | 香蕉视频在线观看国产 | 九九精品免视频国产成人 | 99久久99久久精品免费看子伦 | 日本久久道一区二区三区 | 四虎永久精品视频在线 | 黑人一级毛片 | 国产人看人摸人啪视 | 亚洲国产欧美一区二区欧美 | 啊用力啊好深啊h在线观看 啊嗯啊羞羞网站在线观看 啊~用力cao我cao死我公 | 久久99热这里只有精品免费看 | 永久黄网站色视频免费网站 | 毛片精品| 91精品手机国产在线能 |