freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)論文---基于嵌入式系統(tǒng)的圖像采集系統(tǒng)-資料下載頁(yè)

2025-11-24 17:55本頁(yè)面

【導(dǎo)讀】題目設(shè)計(jì)以嵌入式系統(tǒng)為核心的圖像采集系統(tǒng),具有一定的通用性。1.設(shè)計(jì)系統(tǒng)的總體方案。4.部分實(shí)驗(yàn)及調(diào)試。5.撰寫畢業(yè)設(shè)計(jì)論文,答辯。2.趙燕.傳感器原理及應(yīng)用,北京大學(xué)出版社,3.伊拉希(美).網(wǎng)絡(luò)通信技術(shù),科學(xué)出版社,19周-20周:確定總體方案。撰寫并完善開題報(bào)告,進(jìn)行開題答辯。01周-04周:學(xué)習(xí)相關(guān)知識(shí),設(shè)計(jì)系統(tǒng)的總體方案。11周-13周:總結(jié)畢業(yè)設(shè)計(jì)階段的工作,撰寫畢設(shè)論文,畢業(yè)設(shè)計(jì)答辯。持的硬件平臺(tái)多等特點(diǎn),linux在嵌入式系統(tǒng)和服務(wù)器上中得到了極其廣泛的應(yīng)用,Linux也是當(dāng)前最熱門的嵌入式操作系統(tǒng),嵌入式市場(chǎng)占有率最高。的操作系統(tǒng),并把linux用到更廣泛的領(lǐng)域。雜性與多樣性,極大提高了產(chǎn)品開發(fā)的效率。寫linux驅(qū)動(dòng)代碼的方法,并移植開源的gspca驅(qū)動(dòng)到內(nèi)核中。據(jù)采集程序和基于tcp/ip的圖像傳輸程序。

  

【正文】 并 同時(shí)釋放 分配得到 的主設(shè)備號(hào)。 2. 設(shè)備的打開與釋放 通過調(diào)用定義在 include/linux/ 中的 file_operations 中的 open()函數(shù) 來完成的 硬件設(shè)備的打開 , 本操作 是驅(qū)動(dòng)程序用來完成初始化工作的。以下是file_operations 的數(shù)據(jù)結(jié)構(gòu)定義: struct file_operations { struct module *owner。 loff_t( *llseek) (struct file *,loff_t,int)。 ssize_ t( *read) (struct file *,size_t,loff_t *)。 ssize t( *write) (struct file *,const char *,size_t,loff_t *)。 int( *readdir) (struct file *,void *,filldir_t *)。 unsigned int( *poll) (struct file *,struct poll_table_struct *)。 int( *ioctl) (struct inode *,struct file *,unsigned int,unsigned long)。 int( *mmap) (struct file *,struct vm_ area_struct *)。 int( *open) (struct inode *,struct file *)。 int( *flush) (struct file *)。 int( *release) (struct inode *,struct file *)。 int( *fsync) (struct file *,struct dentry *,int)。 int( *fasync) (int,struct file *,int)。 int( *lock) (struct file *,int,struct file_lock *)。 ssize_t( *readv) (struct file *,const struct iovec *,unsigned long,loff_t *)。 ssize_ t( *writev) (struct file *,const struct iovec *,unsigned long,loff_t *)。 ssize_ t ( *sendpage) (struct file *,struct page *,int,size_t,loff_t *,int)。 unsigned long( *get_unmapped_area) (struct file *,unsigned long,unsigned long,unsigned long,unsigned long)。 int (*check_flags) (int)。 } 當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行諸如 open、 close、 read、 write 等操作 時(shí) , linux內(nèi)核將通過 file_operations 結(jié)構(gòu)訪問驅(qū)動(dòng)程序提供的函數(shù)。如應(yīng)用程序?qū)υO(shè)備文件執(zhí)行讀操作 時(shí) ,內(nèi)核調(diào)用 file_operations 結(jié)構(gòu)中的 read 函數(shù)。 一般在 驅(qū)動(dòng)程序中, open()需要完成 如下 工作:首先檢查設(shè)備的相關(guān)錯(cuò)誤,如設(shè)備尚未準(zhǔn)備就緒等; 對(duì)于 第一次打開 的設(shè)備 ,則需要 對(duì)硬件設(shè)備 初始化;識(shí)北京聯(lián)合大學(xué) 畢業(yè)設(shè)計(jì) 17 別次設(shè)備號(hào); 若 有必要 的話需 更新讀寫操作的當(dāng)前位置 f_ops 指針; 對(duì)fileprivate_data 里的數(shù)據(jù) 進(jìn)行分 配和填寫 ; 引用 計(jì)數(shù) 值 增加一。 同樣,一般 通過調(diào)用 file_operations 結(jié)構(gòu)中函數(shù) release()來完成 釋放設(shè)備 ,這個(gè)方法一般 等同于 close(),作用正好與 open()相反 ,通常需要完成一下工作:使用計(jì)數(shù)減一,釋放 fileprivate_data 中分配的內(nèi)存;如果 被釋放 設(shè)備 是最后一個(gè) ,則設(shè)備 關(guān)閉 。 讀寫 字符設(shè)備的 操作使用函數(shù) read()和 write()。對(duì)于塊設(shè)備, 使用 函數(shù)block_read()和 block_write()來 對(duì) 數(shù)據(jù) 進(jìn)行 讀寫 。 4. 設(shè)備的控制操作 除了 設(shè)備的 讀 和 寫 以外,有時(shí) 應(yīng)用程序需 對(duì) 硬件 設(shè)備進(jìn)行控制,這 時(shí)需要 函數(shù) ioctl()來完成。 Ioctl()與具體的設(shè)備 對(duì)象關(guān)系密切 ,需要結(jié)合具體的設(shè)備 來 分析。 5. 設(shè)備的輪詢與中斷操作 當(dāng)設(shè)備執(zhí)行某個(gè)命令時(shí),設(shè)備驅(qū)動(dòng)可以從輪詢或者中斷中選擇一種以判斷設(shè)備是否已經(jīng)完成了此命令。 對(duì)于不支持中斷的設(shè)備,讀寫時(shí)需要輪流查詢?cè)O(shè)備狀態(tài),以便決定是否技術(shù)進(jìn)行數(shù)據(jù)傳輸。輪詢方式意味著需經(jīng)常對(duì)設(shè)備的狀態(tài)進(jìn)行讀取,直到設(shè)備狀態(tài)表明請(qǐng)求已經(jīng)完成為止。如果設(shè)備驅(qū)動(dòng)程序被連接進(jìn)入內(nèi)核,輪詢方式會(huì)帶來災(zāi)難性的后果: cpu 將無所事事,直到設(shè)備完成此請(qǐng)求。 輪詢方式最好的方法就是通過內(nèi)核定時(shí)器定期對(duì)設(shè)備的狀態(tài)進(jìn)行查詢 ,使內(nèi)核周期性調(diào)用設(shè)備驅(qū)動(dòng)中的某個(gè)例程來完成檢查設(shè)備狀態(tài)。 輪詢方式比較消耗內(nèi)核資源 。 中斷是一種更有效的方法,如果硬件支持中斷則可以按照中斷的 方式 進(jìn)行操作。讓硬件在需要的時(shí)候 會(huì) 向內(nèi)核發(fā)出 中斷請(qǐng)求信號(hào),內(nèi)核負(fù)責(zé)把信號(hào) 傳遞給 對(duì)應(yīng)的設(shè)備驅(qū)動(dòng) 程序 。 [9]此 過程由內(nèi)核 中設(shè)備驅(qū)動(dòng) 注冊(cè) 的中斷來協(xié)助完成。系統(tǒng)記錄下 中斷處理 程序 中的地址和中斷號(hào)。在 系統(tǒng)的 proc/interrupts 文件中可以看到驅(qū)動(dòng)程序?qū)?yīng)的中斷號(hào)和類型。 在驅(qū)動(dòng)初始化 一般 已經(jīng)完成 對(duì)中斷資源的請(qǐng)求 。系統(tǒng)中 某些 中斷時(shí)固定的,大多數(shù)中斷需要在啟動(dòng)時(shí)進(jìn)行動(dòng)態(tài)分配。設(shè)備驅(qū)動(dòng) 所控制的中斷號(hào) (IRQ)必須在取得對(duì)此中斷的所有權(quán)之前找到 。 體系結(jié)構(gòu)決定了 如何將中斷發(fā)送給 cpu,在大多數(shù)體系結(jié)構(gòu)中,中斷用特殊模式發(fā)送,并且會(huì)阻止 系統(tǒng) 其他中斷 的產(chǎn)生。驅(qū)動(dòng)程序在中斷處理過程中做得越少越好,這樣 linux 內(nèi)核能夠很快 從中斷 狀態(tài) 返回 。為了在 接收中斷后能夠 完成更多的 工作,設(shè)備驅(qū)動(dòng) 還需要 能夠使用內(nèi)核的底層處理 例程, 或者任務(wù)隊(duì)列來對(duì)北京聯(lián)合大學(xué) 畢業(yè)設(shè)計(jì) 18 之后 需要調(diào)用的那些 任務(wù)例程 進(jìn)行排隊(duì)。 linux 設(shè)備 模型 1. 設(shè)備模型概要 Linux 內(nèi)核 設(shè)備 模型與具體的設(shè)備驅(qū)動(dòng)編程是無關(guān)的,但是對(duì)理解 linux 下的設(shè)備驅(qū)動(dòng)程序 中設(shè)備 在底層的實(shí)現(xiàn)至關(guān)重要。 由于各種熱插拔設(shè)備特別是 usb 設(shè)備的大量使用,內(nèi)核需要處理在系統(tǒng)運(yùn)行時(shí)設(shè)備的動(dòng)態(tài)插入和拔除,以及設(shè)備間復(fù)雜的依賴關(guān)系。為此, 之后引進(jìn)了新的 內(nèi)核設(shè)備模型。 設(shè)備模型提供了獨(dú)立的機(jī)制表示設(shè)備,并表示其在系統(tǒng)中的拓?fù)浣Y(jié)構(gòu) 。這樣做的優(yōu)點(diǎn)是:代碼重復(fù)最??;提供如引用計(jì)數(shù)這樣的統(tǒng)一機(jī)制;列舉系統(tǒng)中所有的 設(shè)備 ,觀察其狀態(tài),查看其連接總線。用樹的形式將全部設(shè)備結(jié)構(gòu)完整、有效的展現(xiàn)出來,包括所有總線和內(nèi) 部連接;將設(shè)備與對(duì)應(yīng)驅(qū)動(dòng)聯(lián)系起來;將設(shè)備按照類型進(jìn)行分類;從樹的葉子向根的方向依次遍歷,確保以正確的順序關(guān)閉各個(gè)設(shè)備的電源。 [10] 設(shè)備模型 設(shè)計(jì)的初衷 是為了 節(jié)能,有助于電源管理。通過建立表示系統(tǒng)設(shè)備拓?fù)潢P(guān)系的樹結(jié)構(gòu),能夠在內(nèi)核中實(shí)現(xiàn)智能的電源管理?;驹砣缦?,當(dāng)系統(tǒng)想關(guān)閉某個(gè)設(shè)備節(jié)點(diǎn)的電源是,內(nèi)核必須首先關(guān)閉該設(shè)備節(jié)點(diǎn)一下的設(shè)備電源。舉例:內(nèi)核需要在關(guān)閉 usb 攝像頭之后,才能關(guān)閉 usb 控制器,再之后才能夠關(guān)閉 PCI 總線。 [11] 設(shè)備模型可以初略劃分為兩個(gè)層次:其中,總線、設(shè)備、 驅(qū)動(dòng) 3 個(gè)數(shù)據(jù)結(jié)構(gòu)構(gòu)成了設(shè)備模型的上層建筑,通常開發(fā)設(shè)備驅(qū)動(dòng)接觸的就是這三個(gè)概念; kobject、kset、 kobj_type 這三個(gè)數(shù)據(jù)結(jié)構(gòu)構(gòu)成了設(shè)備模型的經(jīng)濟(jì)基礎(chǔ), 經(jīng)濟(jì)基礎(chǔ)決定了上層建筑,也就是決定了總線、設(shè)備和驅(qū)動(dòng)的組織關(guān)系。 引入 kobjec 這個(gè) 新的設(shè)備管理機(jī)制,通過這個(gè)數(shù)據(jù)結(jié)構(gòu)使所有設(shè)備在底層都具有統(tǒng)一的接口, 并 提供基本的對(duì)象管理, kobject 是組成設(shè)備模型的最小單元, 是構(gòu)成 設(shè)備模型的核心結(jié)構(gòu),它與 sysfs 文件系統(tǒng)緊密相連,每個(gè)在內(nèi)核中注冊(cè)的 kobject 對(duì)象都和 sysfs 文件系統(tǒng)中的一個(gè)目錄 對(duì)應(yīng)。 [12] 設(shè)備模型的首要任務(wù)是把設(shè)備連接起來,形成樹狀結(jié)構(gòu)。雖然 設(shè)備種類的千奇百怪, 但是一些公有屬性比如引用計(jì)數(shù)、設(shè)備上鎖、用來形成樹狀結(jié)構(gòu)的鏈表指針等,都是放在數(shù)據(jù)結(jié)構(gòu) kobject 中。 kobject 定義在 include/linux/ struct kobject { const char * k_name。 /* 指向設(shè)備對(duì)象名稱的指針。 */ char name[KOBJ_NAME_LEN]。 /* 設(shè)備名稱 ,最長(zhǎng)為 20。 */ 北京聯(lián)合大學(xué) 畢業(yè)設(shè)計(jì) 19 struct kref kref。 /* 對(duì)象引用計(jì)數(shù) */ struct list_head entry。 /* 列表頭 */ struct kobject * parent。 /* 父對(duì)象 */ struct kset * kset。 /* kobject 集合 */ struct kobj_type * ktype /* kobject 類型 */ struct dentry * dentry。 /* sysfs 的目錄項(xiàng) */ wait_queue_head_t poll。 /* 等待隊(duì)列 */ }。 kset 結(jié)構(gòu) 被設(shè)計(jì)為 kobject 的集合, kobject 通過 kset 組織成層次化的 樹 結(jié)構(gòu),kset 是具有相同的類型的 kobject 的集合。 Kobject 相當(dāng)于葉子節(jié)點(diǎn), kset 相當(dāng)于內(nèi)節(jié)點(diǎn),兩者的連接形成了一個(gè)樹狀結(jié)構(gòu)。 該結(jié)構(gòu)定義在 include/linux/ struct kset{ struct kobj_type * ktype。 // ksetkobj 所屬的類型。 struct list_head list。// 鏈表頭, 用于 存放 該 kset 中所有 kobject spinlock_t list_lock。 struct kobject kobj。 // 自身的 kobject struct kset_uevent_ops * uevent_ops。 }。 kobj_type 結(jié)構(gòu)關(guān)注的是對(duì)象的類型,它是具有相同操作的 kobject 的集合,負(fù)責(zé)管理這一類 kobject 在 sysfs 下的操作,該結(jié)構(gòu)定義在 include/linux/ struct kobj_type { void (*release)(struct kobject *kobj)。 struct sysfs_ops *sysfs_ops。 struct attribute **default_attrs。 }。 設(shè)備 模型的上層建筑 總線、設(shè)備、驅(qū)動(dòng)在內(nèi)核中的結(jié)構(gòu), 全 都定義在include/linux/。 Linux中的任一設(shè)備在設(shè)備模型中都有一個(gè) device描述,設(shè)備是計(jì)算機(jī)的基礎(chǔ),操作系統(tǒng)就是一個(gè)大的接口,最后溯源都會(huì)到對(duì)于設(shè)備的操作,而對(duì)于設(shè)備的理解的程度則也是和對(duì)計(jì)算機(jī)系統(tǒng)理解程度成正比的。在最底層, linux 系統(tǒng)中的每一個(gè)設(shè)備都用 device 結(jié)構(gòu)的一個(gè) 對(duì)象 實(shí)例來表示。設(shè)備被抽象為 struct device 結(jié)構(gòu)體。這個(gè)結(jié)構(gòu)體 中每個(gè)項(xiàng)都 是 很重要 的 ,而最基本的要關(guān)注的有以下幾個(gè): parent,kobj,bus_id,bus_type,device_driver,driver_data,void(*release)(struct device *dev). 北京聯(lián)合大學(xué) 畢業(yè)設(shè)計(jì) 20 結(jié)構(gòu)體全部部分在 /usr/src/struct device { . ..... struct device *parent。 //表示父設(shè)備,一般 父設(shè)備是某種總線或者主控制器 . 指針為空 ,則此 設(shè)備是一個(gè)頂層設(shè)備 . struct kobject kobj。 //代表這個(gè)設(shè)備并且連接它到層次中的 kobject. 注意 , 作為一個(gè)通用的規(guī)則 , devicekobjparent 等同于 deviceparentkobj. char bus_id[BUS_ID_SIZE]。 /* position on parent bus */ //唯一確定 此 總線上的設(shè)備的字符串 . ...... struct bus_type *bus。 //type of bus device is on 確定設(shè)備位于哪種總線 . struct device_driver *driver。 // which driver
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1