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

正文內(nèi)容

基于linux操作系統(tǒng)下rtc驅(qū)動(dòng)開發(fā)(完整版)

  

【正文】 用以注冊(cè)字符設(shè)備? 實(shí)現(xiàn)模塊卸載函數(shù)完成模塊的釋放和刪除 ⑶ 創(chuàng)建設(shè)備文件節(jié)點(diǎn)、次設(shè)備號(hào)[11] ⑴ 主設(shè)備號(hào)是內(nèi)核識(shí)別一個(gè)設(shè)備的標(biāo)識(shí)。insmod 將模塊動(dòng)態(tài)加載到正在運(yùn)行內(nèi)核;rmmod 程序移除模塊;Linux內(nèi)核模塊的程序結(jié)構(gòu): ⑴ module_init()——加載模塊函數(shù)(必須) 使用insmod命令加載模塊時(shí),內(nèi)核就會(huì)執(zhí)行該模塊的加載函數(shù),也就是說(shuō)這就是整個(gè)模塊函數(shù)的入口,就是通過(guò)它來(lái)完成模塊的初始化相關(guān)工作。另外一鐘新接口是基于Linux設(shè)備驅(qū)動(dòng)程序的。開發(fā)板的時(shí)間系統(tǒng)可以分成兩種,分別是系統(tǒng)時(shí)間和硬件時(shí)間。⑶ /net 該目錄里不用說(shuō)就是核心的網(wǎng)絡(luò)層代碼。Boot Loader 是在硬件平臺(tái)運(yùn)行之前完成對(duì)硬件的初始化病喚醒操作系統(tǒng)的程序。在pc機(jī)上安裝一個(gè)虛擬機(jī),本文選用的虛擬機(jī)是VMware Workstation 。而且Linux的極高的穩(wěn)定性使它在對(duì)要應(yīng)用到網(wǎng)絡(luò)服務(wù)器這類有較高穩(wěn)定性要求的服務(wù)上有非常高的適應(yīng)性。  ?、?多用戶、多任務(wù) 正如當(dāng)今世界發(fā)展的主流那樣,Linux也支持多用戶。 Linux應(yīng)用和特性 Linux 的應(yīng)用Linux的基本思想就是——萬(wàn)物皆文件,因此它擁有極高的靈活性和可移植性,再加上它的UNIX背景,使它Linux在服務(wù)器的操作系統(tǒng)方面具有廣泛運(yùn)用。直到1991 年的10 月5 日, 新聞組上發(fā)布消息,正式向外宣布Linux 內(nèi)核系統(tǒng)的誕生(Free minixlike kernel sources for 386AT)。到1991年,隨著GNU計(jì)劃開發(fā)出來(lái)了一些工具,以及GNU C編譯器的發(fā)布。首先對(duì)Linux體系進(jìn)行了簡(jiǎn)單介紹,分析了Linux系統(tǒng)的應(yīng)用和特性,并對(duì)現(xiàn)有平臺(tái)Tiny210開發(fā)板進(jìn)行了簡(jiǎn)單分析。在它推出的前10年內(nèi),MSDOS操作系統(tǒng)主宰了整個(gè)計(jì)算機(jī)操作系統(tǒng)界。在1991年初,萊納斯在學(xué)習(xí)MINIX的操作系統(tǒng)的時(shí)候產(chǎn)生了開發(fā)一個(gè)新的屬于自己的理想中的操作系統(tǒng)的想法。 Linux 發(fā)行版 通常來(lái)講,一個(gè)Linux的發(fā)行版不僅僅是指Linux內(nèi)核,還包括了使用Linux的軟件的安裝工具,以及各種工具軟件,而在一些特定的版本中中也有一些特定軟件,只不過(guò)現(xiàn)在都習(xí)慣于把它們統(tǒng)稱為L(zhǎng)inux發(fā)行版。⑵ 完全免費(fèi),發(fā)展迅速 Linux是一款完全免費(fèi)的操作系統(tǒng)。⑸ 豐富的網(wǎng)絡(luò)功能 Unix最大的優(yōu)勢(shì)就是其強(qiáng)大的網(wǎng)絡(luò)功能,而從Unix衍生出來(lái)的Linux系統(tǒng)也繼承了它在網(wǎng)絡(luò)功能上的優(yōu)勢(shì)。S5PV210內(nèi)部集成了PowerVR SGX540高性能圖形引擎,支持3D圖形流暢運(yùn)行,并可流暢播放1080P大尺寸視頻[4]。在獲得Red Hat的iso文件后,在創(chuàng)建的虛擬機(jī)中安裝該Linux操作系統(tǒng)。():圖41 Linux根目錄 其中有幾個(gè)比較重要的需要著重了解: ⑴ /drivers 驅(qū)動(dòng)目錄,該目錄是所有被加載到內(nèi)核的設(shè)備驅(qū)動(dòng)的程序。⑻ /lib 該目錄是編譯默認(rèn)路徑,包含了內(nèi)核絕大部分的庫(kù)文件與代碼。另外如果RTC擁有了IRQ中斷并且可以定時(shí),那么RTC還可以作為一個(gè)鬧鐘用來(lái)在內(nèi)核睡眠時(shí)喚醒內(nèi)核。I2C由數(shù)據(jù)線(SDA)和時(shí)鐘線(SCL)構(gòu)成的同步串行總線,可發(fā)送和接受數(shù)據(jù),在處理器與控制芯片之間、芯片與芯片之間進(jìn)行雙向傳送[8]。⑹ 其他一些聲明MODULE_XXXXX()——模塊聲明(可選)不同的聲明對(duì)應(yīng)著不同的功能選項(xiàng),視實(shí)際情況而定。? 從dev_t類型變量中獲得主設(shè)備號(hào)和次設(shè)備號(hào):這是兩個(gè)封裝好的函數(shù)MAJOR(dev_t rtc)。 /* 內(nèi)核內(nèi)嵌的對(duì)象 */ struct module *xxx。 ⑸ cmd 參數(shù)的定義Linux內(nèi)核對(duì)file_operations的ioctl()函數(shù)的cmd參數(shù)有特殊的定義:如圖61。這次的RTC驅(qū)動(dòng)就采用動(dòng)態(tài)模塊加載的方式,將程序主體分成3個(gè)部分。hour。wday。intint err。static.owner==release,fasync,圖71 編寫用戶層測(cè)試程序,并編譯成可執(zhí)行程序qq。在以后對(duì)驅(qū)動(dòng)的學(xué)習(xí)中,希望能夠不斷完善RTC芯片的功能實(shí)現(xiàn),并在在嵌入式Linux操作系統(tǒng)的建立中,以內(nèi)核剪裁的方式將驅(qū)動(dòng)程序移植到Linux內(nèi)核中去,努力做出更為精簡(jiǎn)穩(wěn)定的內(nèi)核系統(tǒng)。
參 考 文 獻(xiàn)[1] [D]西安:西北工業(yè)大學(xué)機(jī)械電子工程學(xué)院,2007.[2] 戴明華,李長(zhǎng)云,曾志浩,崔海燕. 嵌入式Linux驅(qū)動(dòng)程序框架研究綜述[J]. 長(zhǎng)沙大學(xué)學(xué)報(bào),2012,02:5253.[3] [D]北京:北京郵電大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,2011.[4] [D].成都:中國(guó)西南電子技術(shù)研究所,2012.[5] [D].西安:西安電子科技大學(xué),2011.[6] 董文軍. Linux驅(qū)動(dòng)程序兼容性的相關(guān)問(wèn)題[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010,03:1618.[7] [D],北京:北京郵電大學(xué),2009.[8] 周立功,陳明計(jì),陳渝.ARM嵌入式Linux系統(tǒng)構(gòu)建與驅(qū)動(dòng)開發(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ū)動(dòng)程序include linux/include linux/include linux/include linux/include linux/include linux/include static DEFINE_IDR(rtc_idr)。 mutex_unlock(amp。 struct timespec delta, delta_delta。}static int rtc_resume(struct device *dev){ struct rtc_device *rtc = to_rtc_device(dev)。 rtc_read_time(rtc, amp。)。sleep_time)。 } mutex_lock(amp。 id = id amp。 rtcirq_freq = 1。rtcirq_lock)。rtcirqwork, rtc_timer_do_work)。 rtcpie_enabled = 0。 strlcpy(rtcname, name, RTC_DEVICE_NAME_SIZE)。 goto exit_kfree。exit_idr: mutex_lock(amp。}EXPORT_SYMBOL_GPL(rtc_device_register)。rtcdev)。 if (IS_ERR(rtc_class)) { printk(KERN_ERR %s: couldn39。}static void __exit rtc_exit(void){ rtc_dev_exit()。MODULE_LICENSE(GPL)。 err = opsopen ? opsopen(rtc) : 0。 return 0。 spin_lock_irq(amp。 add_timer(amp。 unsigned long flags。rtcirq_lock, flags)。 spin_lock_irq(amp。 } rtcuie_irq_active = 0。 if (err) return err。rtcuie_task) == 0) rtcuie_task_active = 0。endif /* CONFIG_RTC_INTF_DEV_UIE_EMUL */static ssize_trtc_dev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos){ struct rtc_device *rtc = fileprivate_data。rtcirq_queue, amp。rtcirq_lock)。 } schedule()。amp。 data = rtcirq_data。 err = mutex_lock_interruptible(amp。 break。 err = rtc_read_alarm(rtc, amp。 if (copy_from_user(amp。 err = rtc_read_time(rtc, amp。 = 。tm)。 err = rtc_read_time(rtc, amp。 if (copy_from_user(amp。 case RTC_AIE_ON: mutex_unlock(amp。 return rtc_update_irq_enable(rtc, 1)。if 0 case RTC_EPOCH_SET:ifndef rtc_epoch if (arg 1900) { err = EINVAL。rtcops_lock)。alarm)。 break。 rtc_dev_ioctl(file, RTC_UIE_OFF, 0)。void rtc_dev_prepare(struct rtc_device *rtc){ if (!rtc_devt) return。endif cdev_init(amp。rtcchar_dev)。 unsigned long tmp, data。 if (fd == 1) { perror(rtc)。 fflush(stderr)。 fflush(stderr)。 FD_ZERO(amp。 exit(errno)。 } retval = ioctl(fd, RTC_UIE_OFF, 0)。 += 5。 exit(errno)。data, sizeof(unsigned long))。 FD_SET(fd, amp。 } fprintf(stderr, \nAgain, from using select(2) on /dev/rtc:)。 i6。 } retval = ioctl(fd, RTC_UIE_ON, 0)。 const char *rtc = default_rtc。 err = alloc_chrdev_region(amp。rtc_dev_fops)。 return。 rtc_irq_set_state(rtc, NULL, 0)。rtcops_lock)。 if (copy_to_user(uarg, amp。alarm, uarg, sizeof(alarm))) return EFAULT。 } rtc_epoch = arg。rtcops_lock)。 return rtc_alarm_irq_enable(rtc, 1)。 return rtc_set_time(rtc, amp。 if (err 0) return err。 = 。)。 if (err 0) return err。 = 0。 if (err 0) return err。amp。 if (err) return err。}static long rtc_dev_ioctl(struct file *file, unsigned int cmd, unsigned long arg){ int err = 0。 else ret = put_user(data, (unsigned long __user *)buf) ?: sizeof(unsigned long)。 set_current_state(TASK_RUNNING)。 break。 do { __set_current_state(TASK_INTERRUPTIBLE)。 unsigned long data。 spin_unlock_irq(amp。rtcirq_lock)。rtcirq_lock)。 rtcuie_timer_active = 0。rtcirq_lock)。rtcirq_lock, flags)。 } else if (schedule_work(amp。 if (rtcstop_uie_polling || err) { rtcuie_task_active = 0。rtcflags)。rtcirq_lock)。define RTC_DEV_MAX 16 static int rtc_dev_open(struct inode *inode, struct file *file){ int err。 idr_destroy(amp。 retu
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1