www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]嵌入式Linux之我行,主要講述和總結(jié)了本人在學(xué)習(xí)嵌入式linux中的每個(gè)步驟。一為總結(jié)經(jīng)驗(yàn),二希望能給想入門嵌入式Linux的朋友提供方便。如有錯(cuò)誤之處,謝請(qǐng)指正。共享資源,歡迎轉(zhuǎn)載:http://hbhuanggang.cublog.cn一

嵌入式Linux之我行,主要講述和總結(jié)了本人在學(xué)習(xí)嵌入式linux中的每個(gè)步驟。一為總結(jié)經(jīng)驗(yàn),二希望能給想入門嵌入式Linux的朋友提供方便。如有錯(cuò)誤之處,謝請(qǐng)指正。


共享資源,歡迎轉(zhuǎn)載:http://hbhuanggang.cublog.cn


一、開發(fā)環(huán)境

主 機(jī):VMWare--Fedora 9

開發(fā)板:Mini2440--64MB Nand, Kernel:2.6.30.4

編譯器:arm-linux-gcc-4.3.2


二、相關(guān)概念

1、平臺(tái)設(shè)備及平臺(tái)設(shè)備驅(qū)動(dòng):

這個(gè)在前面篇幅:S3C2440上RTC時(shí)鐘驅(qū)動(dòng)開發(fā)實(shí)例講解中已經(jīng)講過了。這里只需了解一下系統(tǒng)為我們定義的看門狗(Watchdog)平臺(tái)設(shè)備及資源情況,在arch/arm/plat-s3c24xx/devs.c中,如下:


/* Watchdog */


/*定義了Watchdog平臺(tái)設(shè)備使用的資源,這些資源在驅(qū)動(dòng)程序中都會(huì)用到*/

static struct resource s3c_wdt_resource[] = {

[0] = { /*Watchdog所使用IO端口資源范圍*/

.start = S3C24XX_PA_WATCHDOG,

.end = S3C24XX_PA_WATCHDOG + S3C24XX_SZ_WATCHDOG - 1,

.flags = IORESOURCE_MEM,

},

[1] = {/*Watchdog中斷資源*/

.start = IRQ_WDT,

.end = IRQ_WDT,

.flags = IORESOURCE_IRQ,

}

};


/*定義了Watchdog平臺(tái)設(shè)備*/

struct platform_device s3c_device_wdt = {

.name = "s3c2410-wdt", /*設(shè)備名稱*/

.id = -1,

.num_resources= ARRAY_SIZE(s3c_wdt_resource), /*資源數(shù)量*/

.resource = s3c_wdt_resource, /*引用上面定義的資源*/

};

EXPORT_SYMBOL(s3c_device_wdt);



2、混雜設(shè)備(misc設(shè)備)

misc設(shè)備是Linux定義的主設(shè)備號(hào)為10的特殊字符設(shè)備,因?yàn)椴环献址O(shè)備的范疇,所以被歸納為misc設(shè)備,在Linux中有很多這種設(shè)備,例如:LED設(shè)備、Watchdog設(shè)備等等,系統(tǒng)會(huì)根據(jù)設(shè)備的次設(shè)備號(hào)來(lái)區(qū)分具體是哪個(gè)設(shè)備,通常這些次設(shè)備號(hào)被定義在include/linux/miscdevice.h中。在Linux中用miscdevice結(jié)構(gòu)體來(lái)描述一個(gè)misc設(shè)備,這就意味著被定義為misc設(shè)備的驅(qū)動(dòng)中就要實(shí)現(xiàn)該結(jié)構(gòu)體中的接口函數(shù)。該結(jié)構(gòu)體也定義在miscdevice.h中,如下:


struct miscdevice {

int minor;

const char *name;

const struct file_operations *fops;

struct list_head list;

struct device *parent;

struct device *this_device;

};



三、實(shí)例講解

1、Watchdog硬件結(jié)構(gòu)圖分析:

我們從結(jié)構(gòu)圖和數(shù)據(jù)手冊(cè)得知,看門狗Watchdog主要是實(shí)現(xiàn)系統(tǒng)自動(dòng)復(fù)位的功能,他是利用芯片內(nèi)部的定時(shí)器,定時(shí)輸出連接到電路的復(fù)位端,程序在一定時(shí)間范圍內(nèi)對(duì)定時(shí)器清零(俗稱“喂狗”),所以程序在正常工作時(shí),定時(shí)器總是不能溢出,也就不能產(chǎn)生復(fù)位信號(hào);如果程序出現(xiàn)錯(cuò)誤,不在定時(shí)周期內(nèi)復(fù)位看門狗,那么定時(shí)器就會(huì)溢出而產(chǎn)生復(fù)位信號(hào)使系統(tǒng)復(fù)位。

S3C2440的Watchdog模塊提供了三個(gè)寄存器來(lái)對(duì)Watchdog進(jìn)行操作,他們分別是:定時(shí)器控制寄存器WTCON、定時(shí)器數(shù)據(jù)寄存器WTDAT和定時(shí)器計(jì)數(shù)寄存器WTCNT。注意:在對(duì)定時(shí)器數(shù)據(jù)寄存器WTDAT進(jìn)行操作時(shí)必須在定時(shí)器控制寄存器WTCON使能之前寫入一個(gè)計(jì)數(shù)目標(biāo)值,當(dāng)Watchdog使能開啟后,WTDAT中的值會(huì)自動(dòng)被加載到計(jì)數(shù)寄存器WTCNT中,然后Watchdog從CPU內(nèi)部的時(shí)鐘分頻和時(shí)鐘除數(shù)因子得到一個(gè)工作周期,當(dāng)每個(gè)周期結(jié)束時(shí)計(jì)數(shù)寄存器WTCNT中的值會(huì)1,直到遞減為0時(shí),如果還不重新往WTCNT中寫入新的計(jì)數(shù)目標(biāo)值(即“喂狗”),則Watchdog就產(chǎn)生復(fù)位信號(hào)使系統(tǒng)復(fù)位。關(guān)于這些寄存器的功能和寄存器的各個(gè)位的操作值請(qǐng)參考數(shù)據(jù)手冊(cè)。

2、Watchdog驅(qū)動(dòng)程序具體實(shí)現(xiàn)步驟(建立驅(qū)動(dòng)文件my2440_watchdog.c):

注意:在每步中,為了讓代碼邏輯更加有條理和容易理解,就沒有考慮代碼的順序,比如函數(shù)要先定義后調(diào)用。如果要編譯此代碼,請(qǐng)嚴(yán)格按照C語(yǔ)言的規(guī)范來(lái)調(diào)整代碼的順序。

①、依然是驅(qū)動(dòng)程序的最基本結(jié)構(gòu):Watchdog驅(qū)動(dòng)的初始化和卸載部分及其他,如下:



#include

#include

#include

#include


/*Watchdog平臺(tái)驅(qū)動(dòng)結(jié)構(gòu)體,平臺(tái)驅(qū)動(dòng)結(jié)構(gòu)體定義在platform_device.h中,該結(jié)構(gòu)體內(nèi)的接口函數(shù)在第②、④步中實(shí)現(xiàn)*/

static struct platform_driver watchdog_driver =

{

.probe= watchdog_probe,/*Watchdog探測(cè)函數(shù),在第②步中實(shí)現(xiàn)*/

.remove= __devexit_p(watchdog_remove),/*Watchdog移除函數(shù), 在第④步中實(shí)現(xiàn)*/

.shutdown= watchdog_shutdown,/*Watchdog關(guān)閉函數(shù),在第④步中實(shí)現(xiàn)*/

.suspend= watchdog_suspend,/*Watchdog掛起函數(shù),在第④步中實(shí)現(xiàn)*/

.resume= watchdog_resume,/*Watchdog恢復(fù)函數(shù),在第④步中實(shí)現(xiàn)*/

.driver=

{

/*注意這里的名稱一定要和系統(tǒng)中定義平臺(tái)設(shè)備的地方一致,這樣才能把平臺(tái)設(shè)備與該平臺(tái)設(shè)備的驅(qū)動(dòng)關(guān)聯(lián)起來(lái)*/

.name= "s3c2410-wdt",

.owner= THIS_MODULE,

},

};

static int __init watchdog_init(void)

{

/*將Watchdog注冊(cè)成平臺(tái)設(shè)備驅(qū)動(dòng)*/

return platform_driver_register(&watchdog_driver);

}

static void __exit watchdog_exit(void)

{

/*注銷Watchdog平臺(tái)設(shè)備驅(qū)動(dòng)*/

platform_driver_unregister(&watchdog_driver);

}

module_init(watchdog_init);

module_exit(watchdog_exit);

/*驅(qū)動(dòng)程序模塊參數(shù),如果在加載驅(qū)動(dòng)模塊時(shí)沒有設(shè)定這些參數(shù),則這些參數(shù)將采用默認(rèn)值,

這些參數(shù)在接下來(lái)的步驟中將被一一用到,參數(shù)具體作用也將在各步驟中來(lái)說(shuō)明*/

module_param(tmr_margin, int, 0);

module_param(tmr_atboot, int, 0);

module_param(nowayout, int, 0);

module_param(soft_noboot,int, 0);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Huang Gang");

MODULE_DESCRIPTION("My2440 Watchdog Driver");



②、Watchdog平臺(tái)驅(qū)動(dòng)結(jié)構(gòu)中探測(cè)函數(shù)watchdog_probe的實(shí)現(xiàn)。探測(cè)就意味著在系統(tǒng)總線中去檢測(cè)設(shè)備的存在,然后獲取設(shè)備有用的相關(guān)資源信息,以便我們使用這些信息。代碼如下:



#include

#include

#include

#include

#include

#include

/*定義了一個(gè)用來(lái)保存watchdog的IO端口占用的IO空間和經(jīng)過虛擬映射后的內(nèi)存地址*/

static struct resource *wdt_mem;

static void __iomem *wdt_base;

/*保存watchdog中斷號(hào),NO_IRQ宏定義在irq.h中*/

static int wdt_irqno = NO_IRQ;

/*保存從平臺(tái)時(shí)鐘隊(duì)列中獲取watchdog的時(shí)鐘*/

static struct clk *wdt_clock;

#define CONFIG_WATCHDOG_ATBOOT(0)

#define CONFIG_WATCHDOG_DEFAULT_TIME(15)

static int tmr_atboot = CONFIG_WATCHDOG_ATBOOT;

static int tmr_margin = CONFIG_WATCHDOG_DEFAULT_TIME;

static int soft_noboot;

static unsigned int wdt_count;/*用于保存經(jīng)計(jì)算后得到的計(jì)數(shù)寄存器WTCNT的計(jì)數(shù)值*/

/*申明并初始化一個(gè)自旋鎖wdt_pie_lock,對(duì)Watchdog資源進(jìn)行互斥訪問*/

static DEFINE_SPINLOCK(wdt_pie_lock);

static int __devinit watchdog_probe(struct platform_device *pdev)

{

int ret;

int started = 0;

struct resource *res;/*定義一個(gè)資源,用來(lái)保存獲取的watchdog的IO資源*/

/*在系統(tǒng)定義的watchdog平臺(tái)設(shè)備中獲取watchdog中斷號(hào)

platform_get_irq定義在platform_device.h中*/

wdt_irqno = platform_get_irq(pdev, 0);

if(wdt_irqno < 0)

{

/*獲取watchdog中斷號(hào)不成功錯(cuò)誤處理

dev_err定義在device.h中,在platform_device.h中已經(jīng)引用,所以這里就不需再引用了*/

dev_err(&pdev->dev, "no irq for watchdogn");

return -ENOENT;

}

/*申請(qǐng)Watchdog中斷服務(wù),這里使用的是快速中斷:IRQF_DISABLED。

中斷服務(wù)程序?yàn)?wdt_irq,將Watchdog平臺(tái)設(shè)備pdev做參數(shù)傳遞過去了*/

ret = request_irq(wdt_irqno, wdt_irq, IRQF_DISABLED, pdev->name, pdev);

if(ret)

{

/*錯(cuò)誤處理*/

dev_err(dev, "IRQ%d error %dn", wdt_irqno, ret);

return ret;

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉