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

正文內(nèi)容

關(guān)于linux操作系統(tǒng)設(shè)計研究畢業(yè)論文-文庫吧

2025-06-07 03:50 本頁面


【正文】 initialization_rtc(void){ /* 初始化代碼 */}module_init(initialization_rtc)。 模塊卸載函數(shù)static void __exit cleanup_rtc(void){ /* 釋放資源 */}module_exit(cleanup_rtc)。 ⑴ 向內(nèi)核確定主該設(shè)備的主次設(shè)備號 ⑵ 實現(xiàn)字符驅(qū)動程序:? 填充file_operations結(jié)構(gòu)體? 實現(xiàn)模塊加載函數(shù)用以注冊字符設(shè)備? 實現(xiàn)模塊卸載函數(shù)完成模塊的釋放和刪除 ⑶ 創(chuàng)建設(shè)備文件節(jié)點、次設(shè)備號[11] ⑴ 主設(shè)備號是內(nèi)核識別一個設(shè)備的標識。整數(shù)(占12bits),范圍從0到4095,通常使用1到255。 ⑵ 次設(shè)備號由內(nèi)核使用,用于正確確定設(shè)備文件所指的設(shè)備。整數(shù)(占20bits),范圍從0到1048575,一般使用0到255。 ⑶ 設(shè)備編號的內(nèi)部表達? dev_t類型(32位,其中主設(shè)備號12位,次設(shè)備號20位): 是屬于Linux內(nèi)核編程的專有類型,用來保存設(shè)備編號。? 從dev_t類型變量中獲得主設(shè)備號和次設(shè)備號:這是兩個封裝好的函數(shù)MAJOR(dev_t rtc)。//獲得主設(shè)備號MINOR(dev_t rtc)。//獲得次設(shè)備號? 將主設(shè)備號和次設(shè)備號轉(zhuǎn)換成dev_t類型:這也是一個封裝好的函數(shù)dev_t =MKDEV(int ,int ); ⑷ 分配主設(shè)備號 手工分配主設(shè)備號的函數(shù):include linux/ //這是Linux內(nèi)核中有關(guān)設(shè)備號的頭文件int register_chrdev_region( dev_t num, unsigned int , char *rtc );這是自己手動把num分配給rtc作為主設(shè)備號。 ⑸ 動態(tài)分配主設(shè)備號:include linux/ //這是Linux內(nèi)核中有關(guān)設(shè)備號的頭文件int alloc_chrdev_resion(dev_t *,unsigned int ,unsigned int ,char *rtc);這是內(nèi)核自動分配一個設(shè)備好給rtc。 ⑹ 釋放設(shè)備號void unregister_chrdev(dev_t, unsigned int )。在該設(shè)備號不再使用之后,釋放并刪除它,以節(jié)約內(nèi)核資源。實現(xiàn)字符設(shè)備驅(qū)動,最重要的就是字符設(shè)備結(jié)構(gòu)體cdev,以及驅(qū)動接口結(jié)構(gòu)體file_operations。 ⑴ cdev 結(jié)構(gòu)體struct cdev { struct kobject xxx。 /* 內(nèi)核內(nèi)嵌的對象 */ struct module *xxx。 /*所屬模塊*/ struct file_operations *xxx。 /*文件操作結(jié)構(gòu)體*/ struct list_head xxx。 /*不常用*/ dev_t xxx。 /*設(shè)備號*/ unsigned int xxx。 /*不常用*/ }。 ⑵ file_operations 結(jié)構(gòu)體字符驅(qū)動和內(nèi)核的接口:在內(nèi)核代碼中,./include/linux/,定義了字符驅(qū)動程序只要填充一個file_operations結(jié)構(gòu)體并把它注冊到內(nèi)核中,內(nèi)核就有了通過它操作這個字符設(shè)備的能力。 ⑶ file_operations的主要成員:struct module *xxx: 指向模塊本身open: 提供打開設(shè)備的函數(shù)接口;release:提供關(guān)閉設(shè)備的函數(shù)接口;read: 實現(xiàn)從設(shè)備上讀取數(shù)據(jù)的函數(shù)接口;write: 實現(xiàn)向設(shè)備上寫入數(shù)據(jù)的函數(shù)接口;ioctl: I/O控制函數(shù);llseek: 定位讀寫指針位置并把他們輸出出來; ⑷ ioctl函數(shù)為設(shè)備驅(qū)動程序執(zhí)行用戶空間的“命令”提供了一個特有的接口用來設(shè)置或者讀取設(shè)備的具體信息。 ⑸ cmd 參數(shù)的定義Linux內(nèi)核對file_operations的ioctl()函數(shù)的cmd參數(shù)有特殊的定義:如圖61。圖61 cmd參數(shù)構(gòu)造命令編號的宏:_IO() 給沒有參數(shù)的命令;_IOR() 給從驅(qū)動中讀數(shù)據(jù)的命令;_IOW() 給寫入數(shù)據(jù)的命令;_IOWR() 用于雙向傳輸。 ⑹ Ioctl函數(shù)模板static long rtc_dev_ioctl(struct file *file,unsigned int cmd, unsigned long arg){... switch (cmd) { case RTC_EPOCH_SET:...Break。 case RTC_SET_TIME: ... break。 case RTC_IRQP_SET: ... break。 case RTC_PIE_ON: ... break。... }圖62 字符設(shè)備驅(qū)動 第7章 RTC驅(qū)動實現(xiàn) 設(shè)計思路Linux設(shè)備驅(qū)動屬于內(nèi)核的一部分,Linux內(nèi)核的驅(qū)動模塊可以用兩種不同的方式加載和編譯: ⑴ 通過內(nèi)核裁剪,隨同Linux的啟動直接加載編譯進Linux內(nèi)核; ⑵ 把驅(qū)動程序編譯成一個可加載和刪除的動態(tài)模塊,可以在需要時隨時使用insmod命令加載,rmmod命令刪除。這種方式更快,也節(jié)省了內(nèi)核資源,控制了內(nèi)核的大小,而模塊一旦被插入內(nèi)核,就和其他被直接初始化到內(nèi)核中的模塊一樣了。這次的RTC驅(qū)動就采用動態(tài)模塊加載的方式,將程序主體分成3個部分。 RTC程序?qū)崿F(xiàn) RTC基本數(shù)據(jù)結(jié)構(gòu)struct rtc_time 結(jié)構(gòu)體structrtc_time{intsec。intmin。inthour。intmday。intmon。intyear。intwday。intyday。intisdst。}。這個結(jié)構(gòu)體代表了硬件時間與日期,從RTC芯片讀取的時間和日期就分開保存在這個結(jié)構(gòu)體中 模塊初始化函數(shù): init_rtcstaticint__initinit_rtc(void){ rtc_class=class_create(THIS_MODULE,rtc)。int err。 err = alloc_chrdev_region(amp。rtc_devt, 0, RTC_DEV_MAX, rtc)。 rtc_dev_init()。 rtc_sysfs_init(rtc_class)。 if (err 0) printk(KERN_ERR %s: failed to allocate char dev region\n, __FILE__)。 return0。 } Init_rtc首先創(chuàng)建了一個類rtc[12]。類本身就是一個高度面向?qū)ο蟮漠a(chǎn)物,而用戶空間就可以在不知道如何實現(xiàn)的情況下直接得到結(jié)果,驅(qū)動程序也不用直接處理,只要調(diào)用就行了。 定義操作函數(shù) 填充了file_operations結(jié)構(gòu)rtc_foperations,以及這些操作函數(shù)的具體實現(xiàn)。rtc_foperations rtc基本的文件操作:staticconststructfile_operations rtc_foperations={.owner =THIS_MODULE,.llseek =null,.read =read,.poll =poll,.unlocked_ioctl=ioctl,.open =openfile,.release =release,.fasync =fasync,}。 函數(shù)聲明 中rtc_ioctl相應(yīng)的命令,其中RTC_RD_TIME與RTC_SET_TIME兩個命令需要特別注意,這是RTC最基本的功能函數(shù)——獲取時間和設(shè)置時間。 運行步驟,如圖71。圖71 編寫用戶層測試程序,并編譯成可執(zhí)行程序qq。 實際運行及結(jié)果,運行過程如圖72:用insmod裝載模板。創(chuàng)建設(shè)備節(jié)點: mknod /dev/rtc c 250 0修改執(zhí)行程序權(quán)限: chmod 777 qq執(zhí)行測試程序。圖72 運行過程結(jié)果如圖73:圖73 運行結(jié)果 第8章 結(jié)論本論文中對Linux的發(fā)展跟現(xiàn)狀進行了了解,還在對課題基于Linux操作系統(tǒng)下RTC驅(qū)動開發(fā)的基礎(chǔ)上對Linux內(nèi)核進行了大致的分析,并在課題最后進行了相對于RTC驅(qū)動模塊的應(yīng)用層測試軟件的編寫。在本文中嵌入式系統(tǒng)選擇的是Linux系統(tǒng),它具有占有內(nèi)存小和運行速率高的優(yōu)點。并采用了模塊化的指導(dǎo)設(shè)計方法開發(fā)設(shè)備驅(qū)動,提高了程序的可讀性和可移植性。本文將字符設(shè)備分為了設(shè)備注冊、函數(shù)功能實現(xiàn)以及調(diào)用接口,并對程序進行了應(yīng)用層的實例驗證。由于時間的原因,本文中RTC字符驅(qū)動的程序設(shè)計還是有些簡單,在以后的學習工作中還需要進一步改善。在以后對驅(qū)動的學習中,希望能夠不斷完善RTC芯片的功能實現(xiàn),并在在嵌入式Linux操作系統(tǒng)的建立中,以內(nèi)核剪裁的方式將驅(qū)動程序移植到Linux內(nèi)核中去,努力做出更為精簡穩(wěn)定的內(nèi)核系統(tǒng)。 謝 辭首先,向我的指導(dǎo)老師趙老師和劉老師表示感謝,感謝老師們一直以來對我的關(guān)懷和悉心指導(dǎo),并在完成畢業(yè)設(shè)計的過程中讓我體會到了也學到了很多。在整個畢業(yè)設(shè)計指導(dǎo)活動中,老師的豐富經(jīng)驗和對整個行業(yè)脈絡(luò)的把握,都是年輕的我難以望其項背的,并在整個課題的完成過程中起到了至關(guān)重要的作用。趙老師教學作風的和劉老師的治學風格都讓我留下了很深的印象。
同時也要感謝培訓(xùn)班的所有同學,在臨近畢業(yè)的培訓(xùn)過程中,對我的關(guān)心和幫助。感謝他們不厭其煩地指導(dǎo)我解決了不少項目上的難題,她們積極向上的學習態(tài)度也是我奮斗下去的動力。感謝我的親人,在這四年里是他們給我無數(shù)的鼓勵、支持和幫助,正因為有他們我才能高興順利的完成大學學業(yè),并學到了很多專業(yè),以及很多人生道路上的寶貴財富。
最后感謝各位評閱老師在百忙之中抽空評閱我的論文。
參 考 文 獻[1] [D]西安:西北工業(yè)大學機械電子工程學院,2007.[2] 戴明華,李長云,曾志浩,崔海燕. 嵌入式Linux驅(qū)動程序框架研究綜述[J]. 長沙大學學報,2012,02:5253.[3] [D]北京:北京郵電大學計算機科學與技術(shù)學院,2011.[4] [D].成都:中國西南電子技術(shù)研究所,2012.[5] [D].西安:西安電子科技大學,2011.[6] 董文軍. Linux驅(qū)動程序兼容性的相關(guān)問題[J].單片機與嵌入式系統(tǒng)應(yīng)用,2010,03:1618.[7] [D],北京:北京郵電大學,2009.[8] 周立功,陳明計,陳渝.ARM嵌入式Linux系統(tǒng)構(gòu)建與驅(qū)動開發(fā)范例[M].北京:北京航空航天大學出版社,2006.[9] 王淑貞.UBoot在S3C2410上的移植[J].微計算機應(yīng)用,2008,29(4):9597.[10] LTIB user manual Linux Target Image Builder,Freescale,2006.[11] [D].成都:電子科技大學,2011.[12] MPC8536 datasheet MPC8536E PowerQUICC III tm Integrated Processor Product Brief ,2009.附錄A RTC驅(qū)動程序include linux/include linux/include linux/include linux/include linux/include linux/include static DEFINE_IDR(rtc_idr)。static DEFINE_MUTEX(idr_lock)。struct class *rtc_class。static void rtc_device_release(struct device *dev){ struct rtc_device *rtc = to_rtc_device(dev)。 mutex_lock(amp。id
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1