【正文】
塊動態(tài)加載到正在運(yùn)行內(nèi)核;rmmod 程序移除模塊;Linux內(nèi)核模塊的程序結(jié)構(gòu): ⑴ module_init()——加載模塊函數(shù)(必須) 使用insmod命令加載模塊時,內(nèi)核就會執(zhí)行該模塊的加載函數(shù),也就是說這就是整個模塊函數(shù)的入口,就是通過它來完成模塊的初始化相關(guān)工作。本文就是介紹基于I2C總線的Linux字符設(shè)備驅(qū)動。另外一鐘新接口是基于Linux設(shè)備驅(qū)動程序的。而在運(yùn)行期間,內(nèi)核以軟件的形式維護(hù)系統(tǒng)的當(dāng)前時間與日期,并在關(guān)機(jī)或必要的時候?qū)r間回寫RTC芯片,由它自主維護(hù)。開發(fā)板的時間系統(tǒng)可以分成兩種,分別是系統(tǒng)時間和硬件時間。⑺ /ipc 該目錄包含了核心進(jìn)程間的通信代碼,是Linux多任務(wù)特性具體實(shí)現(xiàn)。⑶ /net 該目錄里不用說就是核心的網(wǎng)絡(luò)層代碼。Linux的內(nèi)核的目錄包含很多個文件夾,分別用于實(shí)現(xiàn)不同的功能(如圖41)[7]。Boot Loader 是在硬件平臺運(yùn)行之前完成對硬件的初始化病喚醒操作系統(tǒng)的程序。然后從網(wǎng)上下載Red Hat Linux 操作系統(tǒng)安裝包iso文件,我下載的是Red Hat Linux5的iso文件,相對來說是版本比較高的內(nèi)核。在pc機(jī)上安裝一個虛擬機(jī),本文選用的虛擬機(jī)是VMware Workstation 。它采用三星S5PV210作為主處理器,運(yùn)行主頻可高達(dá)1GHz。而且Linux的極高的穩(wěn)定性使它在對要應(yīng)用到網(wǎng)絡(luò)服務(wù)器這類有較高穩(wěn)定性要求的服務(wù)上有非常高的適應(yīng)性。后者使用戶可以類似于Windows操作系統(tǒng)使用鼠標(biāo)對其進(jìn)行操作,而不會因?yàn)檗D(zhuǎn)換了操作系統(tǒng)感到不適應(yīng)。 ?、?多用戶、多任務(wù) 正如當(dāng)今世界發(fā)展的主流那樣,Linux也支持多用戶。因?yàn)楝F(xiàn)在Windows的巨大影響力,許多用戶在使用Linux前,都會因?yàn)橐郧癢indows的使用習(xí)慣而擔(dān)心能否適應(yīng)新的環(huán)境,而這一點(diǎn)就使他們不在顧慮。 Linux應(yīng)用和特性 Linux 的應(yīng)用Linux的基本思想就是——萬物皆文件,因此它擁有極高的靈活性和可移植性,再加上它的UNIX背景,使它Linux在服務(wù)器的操作系統(tǒng)方面具有廣泛運(yùn)用。 Linux是一種源于UNIX的操作系統(tǒng),雖然從嚴(yán)格意義上講,Linux這個詞實(shí)際上是指Linux內(nèi)核,但實(shí)際上人們已經(jīng)習(xí)慣了把整個基于Linux內(nèi)核以及在此基礎(chǔ)上的各種工具的操作系統(tǒng)統(tǒng)稱為Linux。直到1991 年的10 月5 日, 新聞組上發(fā)布消息,正式向外宣布Linux 內(nèi)核系統(tǒng)的誕生(Free minixlike kernel sources for 386AT)。起初,他只是為了學(xué)習(xí)386架構(gòu)的編程技術(shù),但隨后的Linux開發(fā)過程已經(jīng)徹底改變了他的主意。到1991年,隨著GNU計(jì)劃開發(fā)出來了一些工具,以及GNU C編譯器的發(fā)布。關(guān)鍵詞:Linux操作系統(tǒng);Tiny210開發(fā)板;字符設(shè)備驅(qū)動;RTC芯片蚌埠學(xué)院本科畢業(yè)設(shè)計(jì)(論文)Driver Development of Real Timer Clock(RTC) Based on LinuxAbstract:In this thesis, the RTC chip driver under Linux system architecture and design of a development board based Tiny210 RTC character device drivers. First, a brief introduction Linux system to analyze the application and features of Linux systems, and existing platforms Tiny210 development board for a simple analysis. On the basis of the actual project RTCdriven development of analysis and design, using a dynamic module loading character device driver model. Quickly build in RTC chip for each module in a brief and develop a model of the chip driver, the realization of hardware time to read and write, alarm setting function. Reducing the plexity of development and shorten the development time, and has a strong scalability, portability.Keywords: Linux operating system;Tiny210 development board;Character device driver;RTC chip第1章 Linux概述 Linux操作系統(tǒng)的誕生和發(fā)行版 Linux系統(tǒng)的誕生 1981年IBM推出了微型計(jì)算機(jī)IBM PC。首先對Linux體系進(jìn)行了簡單介紹,分析了Linux系統(tǒng)的應(yīng)用和特性,并對現(xiàn)有平臺Tiny210開發(fā)板進(jìn)行了簡單分析。在對實(shí)際項(xiàng)目RTC驅(qū)動開發(fā)的分析設(shè)計(jì)的基礎(chǔ)上,采用了以動態(tài)模塊加載方式的字符設(shè)備驅(qū)動模型。在它推出的前10年內(nèi),MSDOS操作系統(tǒng)主宰了整個計(jì)算機(jī)操作系統(tǒng)界。甚至MINIX也因?yàn)榘鏅?quán)開始需要購買才能獲得源代碼。在1991年初,萊納斯在學(xué)習(xí)MINIX的操作系統(tǒng)的時候產(chǎn)生了開發(fā)一個新的屬于自己的理想中的操作系統(tǒng)的想法。這段消息就是直到今日都廣為流傳的被稱為Linux的誕生宣言。 Linux 發(fā)行版 通常來講,一個Linux的發(fā)行版不僅僅是指Linux內(nèi)核,還包括了使用Linux的軟件的安裝工具,以及各種工具軟件,而在一些特定的版本中中也有一些特定軟件,只不過現(xiàn)在都習(xí)慣于把它們統(tǒng)稱為Linux發(fā)行版。直到現(xiàn)在,Linux還是提供網(wǎng)站服務(wù)供應(yīng)商最常使用的平臺。⑵ 完全免費(fèi),發(fā)展迅速 Linux是一款完全免費(fèi)的操作系統(tǒng)。這保證了各用戶的相對獨(dú)立,之間互不影響,都對于自己的文件設(shè)備有自己的權(quán)利。⑸ 豐富的網(wǎng)絡(luò)功能 Unix最大的優(yōu)勢就是其強(qiáng)大的網(wǎng)絡(luò)功能,而從Unix衍生出來的Linux系統(tǒng)也繼承了它在網(wǎng)絡(luò)功能上的優(yōu)勢?! 、?支持多種平臺 Linux作為一種嵌入式操作系統(tǒng),在各種移動裝置上應(yīng)用廣泛。S5PV210內(nèi)部集成了PowerVR SGX540高性能圖形引擎,支持3D圖形流暢運(yùn)行,并可流暢播放1080P大尺寸視頻[4]。虛擬機(jī)其實(shí)就是在主機(jī)中占用一塊內(nèi)存在主機(jī)的硬件平臺上搭建一個類似主機(jī)的運(yùn)行環(huán)境,在 VMware中,你可以在一個以主機(jī)的分割的內(nèi)存為基礎(chǔ)的窗口中加載一臺虛擬機(jī),運(yùn)行自己的操作系統(tǒng)和應(yīng)用程序,而不影響主機(jī)任何操作。在獲得Red Hat的iso文件后,在創(chuàng)建的虛擬機(jī)中安裝該Linux操作系統(tǒng)。就是通過Boot Loader來實(shí)現(xiàn)初始化硬件設(shè)備,從而給操作系統(tǒng)提供了一個合適的軟硬件環(huán)境,并為調(diào)用它做好準(zhǔn)備。():圖41 Linux根目錄 其中有幾個比較重要的需要著重了解: ⑴ /drivers 驅(qū)動目錄,該目錄是所有被加載到內(nèi)核的設(shè)備驅(qū)動的程序。⑷ /init 該目錄中包含內(nèi)核的所有硬件初始化代碼,這是內(nèi)核所有工作的起點(diǎn),同時也是是所有進(jìn)程的最初父進(jìn)程。⑻ /lib 該目錄是編譯默認(rèn)路徑,包含了內(nèi)核絕大部分的庫文件與代碼。硬件時間指的就是RTC芯片自主維護(hù)的時間,因?yàn)镽TC芯片是電池供電的,所以在硬件平臺掉電后時間表不會丟失。另外如果RTC擁有了IRQ中斷并且可以定時,那么RTC還可以作為一個鬧鐘用來在內(nèi)核睡眠時喚醒內(nèi)核。而后者創(chuàng)建了一個RTC驅(qū)動模型,并注冊到RTC核心中,把所有工作交由RTC芯片完成。I2C由數(shù)據(jù)線(SDA)和時鐘線(SCL)構(gòu)成的同步串行總線,可發(fā)送和接受數(shù)據(jù),在處理器與控制芯片之間、芯片與芯片之間進(jìn)行雙向傳送[8]。 ⑵ module_exit()——卸載模塊函數(shù)(必須) 當(dāng)使用rmmod命令卸載某模塊時,內(nèi)核就會執(zhí)行該這段函數(shù),完成對模塊的刪除和空間的釋放。⑹ 其他一些聲明MODULE_XXXXX()——模塊聲明(可選)不同的聲明對應(yīng)著不同的功能選項(xiàng),視實(shí)際情況而定。整數(shù)(占12bits),范圍從0到4095,通常使用1到255。? 從dev_t類型變量中獲得主設(shè)備號和次設(shè)備號:這是兩個封裝好的函數(shù)MAJOR(dev_t rtc)。 ⑹ 釋放設(shè)備號void unregister_chrdev(dev_t, unsigned int )。 /* 內(nèi)核內(nèi)嵌的對象 */ struct module *xxx。 /*設(shè)備號*/ unsigned int xxx。 ⑸ cmd 參數(shù)的定義Linux內(nèi)核對file_operations的ioctl()函數(shù)的cmd參數(shù)有特殊的定義:如圖61。 case RTC_IRQP_SET: ... break。這次的RTC驅(qū)動就采用動態(tài)模塊加載的方式,將程序主體分成3個部分。sec。hour。mon。wday。isdst。int{class_create(THIS_MODULE,int err。if (err 0) printk(KERN_ERR %s: failed to allocate char dev region\n, __FILE__)。類本身就是一個高度面向?qū)ο蟮漠a(chǎn)物,而用戶空間就可以在不知道如何實(shí)現(xiàn)的情況下直接得到結(jié)果,驅(qū)動程序也不用直接處理,只要調(diào)用就行了。static rtc_foperations.owner==release,fasync,圖71 編寫用戶層測試程序,并編譯成可執(zhí)行程序qq。在本文中嵌入式系統(tǒng)選擇的是Linux系統(tǒng),它具有占有內(nèi)存小和運(yùn)行速率高的優(yōu)點(diǎn)。在以后對驅(qū)動的學(xué)習(xí)中,希望能夠不斷完善RTC芯片的功能實(shí)現(xiàn),并在在嵌入式Linux操作系統(tǒng)的建立中,以內(nèi)核剪裁的方式將驅(qū)動程序移植到Linux內(nèi)核中去,努力做出更為精簡穩(wěn)定的內(nèi)核系統(tǒng)。 同時也要感謝培訓(xùn)班的所有同學(xué),在臨近畢業(yè)的培訓(xùn)過程中,對我的關(guān)心和幫助。 參 考 文 獻(xiàn)[1] [D]西安:西北工業(yè)大學(xué)機(jī)械電子工程學(xué)院,2007.[2] 戴明華,李長云,曾志浩,崔海燕. 嵌入式Linux驅(qū)動程序框架研究綜述[J]. 長沙大學(xué)學(xué)報,2012,02:5253.[3] [D]北京:北京郵電大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,2011.[4] [D].成都:中國西南電子技術(shù)研究所,2012.[5] [D].西安:西安電子科技大學(xué),2011.[6] 董文軍. Linux驅(qū)動程序兼容性的相關(guān)問題[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010,03:1618.[7] [D],北京:北京郵電大學(xué),2009.[8] 周立功,陳明計(jì),陳渝.ARM嵌入式Linux系統(tǒng)構(gòu)建與驅(qū)動開發(fā)范例[M].北京:北京航空航天大學(xué)出版社,2006.[9] 王淑貞.UBoot在S3C2410上的移植[J].微計(jì)算機(jī)應(yīng)用,2008,29(4):9597.[10] LTIB user manual Linux Target Image Builder,Freescale,2006.[11] [D].成都:電子科技大學(xué),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)。 mutex_lock(amp。 mutex_unlock(amp。amp。 struct timespec delta, delta_delta。 delta_delta = timespec_sub(delta, old_delta)。}static int rtc_resume(struct device *dev){ struct rtc_device *rtc = to_rtc_device(dev)。 if (strcmp(dev_name(amp。 rtc_read_time(rtc, amp。rtcdev))。)。 return 0。sleep_time)。 int id, err。 } mutex_lock(amp。id)。 id = id amp。 goto exit_idr。 rtcirq_freq = 1。 rtc = rtc_device_release。rtcirq_lock)。rtcirq_queue)。rtcirqwork, rtc_timer_do_work)。rtcuie_rtctimer, rtc_uie_update_irq, (void *)rtc)。 rtcpie_enabled = 0。amp。 strlcpy(rtcname, name, RTC_DEVICE_NAME_SIZE)。 err = device_register(amp。 goto exit_kfree。 dev_info(dev,