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

正文內(nèi)容

linu設備驅(qū)動程序-文庫吧資料

2025-01-05 01:06本頁面
  

【正文】 =jiffies+(MYDRIVER_IO_DURATION *HZ)。 ? 給定時器賦值,并添加定時器 =mydriver_timer_expiration。 167。 ? 調(diào)度 tasklet(下半部) tasklet_schedule(mydriver_tasklet)。 ? 設置 I/O成功標志 mydriver_final_status=0。 167。 5 實例分析字符設備驅(qū)動程序 ? mydriver_timer_expiration(mydriver_data) ? 說明 定義 MYDRIVER_SIMULATE_INTERRUPT時才編譯,其作用是用定時器來模擬硬件中斷 ? 增加定時器超時記數(shù) mydriver_timer_count++。 ? 增加使用記數(shù) MOD_DEC_USE_COUNT。 ? 釋放中斷號 ifndef MYDRIVER_SIMULATE_INTERRUPT free_irq(mydriver_irq,mydriver_name)。 5 實例分析字符設備驅(qū)動程序 ? mydriver_release(pinode,pfile) ? 增加釋放記數(shù) mydriver_release_count++,。 ? 增加使用記數(shù) MOD_INC_USE_COUNT。 ? 申請中斷號 ifndef MYDRIVER_SIMULATE_INTERRUPT rc=request_irq(mydriver_irq,mydriver_interrupt, SA_SHIRQ, mydriver_name, NULL)。 ? 為文件的緩存區(qū)分配內(nèi)存空間 mydriver_buffer= (char *) kmalloc(MYDRIVER_BUFFERSIZE,GEP_KERNEL)。 取消設備注冊 If((rc=unregister_chrdev(mydriver_major, mydriver_name))) 167。 mydriver_write() 167。 mydriver_task()。 mydriver_timer_expiration()。 ? mydriver_open()。 my_cleanup_module()。 5 實例分析字符設備驅(qū)動程序 ? 函數(shù)列表 ? my_init_module()。 ? } 167。 ? return 1。 ? del_timer(timer)。 ? debug((“going to sleep\n”))。 4 定時處理 ?等待隊列和定時器綜合實例 ? = jiffies + timeout。 ? = timeout_func。 ? } ? int sleep_or_timerout(wait_queue_head_t*wait,int timeout) ? { ? timed_out=0。 ? void timeout_func(unsigned long who) ? { ? timed_out = 1。 4 定時處理 ?等待隊列和定時器綜合實例 ? init_timer_out。 //delay 1 sec ? … ? add_timer(my_timer)。 ? = my_argu。 ? … ? init_timer(my_timer)。 167。 ? 添加 timer void add_timer(struct timer_list *timer)。 } 167。 unsigned long data。 struct timer_list *prev。 } 167。 if_full=0。 is_empty=0。} 167。 //currentstate=TASK_interruptible。 ? 在 write函數(shù)中: while(is_full) { interruptible_sleep_on(wqh)。 或者使用宏 DECLARE_WAIT_QUEUE_HEAD(wqh)。 3 等待隊列 ?使用實例 ? 情景:內(nèi)核中有一塊內(nèi)存,在寫時發(fā)現(xiàn)滿了 ? 首先在程序開始定義全局變量 strut wait_queue_head_t wqh。 3 等待隊列 ?概述 ? 使用時機 請求暫不可用的資源 ? 版本相關 (/linux/) wait_queue wait_queue_head_t 167。 ? 取消中斷 ? 取消 SIU中斷 ( do_free_irq(int irq,void* dev_id) 例: do_free_irq(SIU_IRQ3, devpointer) ? 取消 CPM中斷 cpm_free_handler(int vec) 例: cpm_free_handler(CPMVEC_ERROR) 167。 探測中斷 ? 安裝 CPM中斷 ? CPM中斷向量表 32個( /arch/ppc/8xx_io/) ? 確定相應的中斷向量,比如是 SCC1 ? 調(diào)用函數(shù) cpm_install_handler(CPMVEC_SCC1, scc1_handler, devpointer) 167。 探測中斷 ? 安裝 SIU中斷例子 ? define CPM_INTERRUPT SIU_LEVEL2 (在文件 ) ? cpm_interrupt_init()函數(shù)中 *( arch/ppc/8xx_io/) ? /* Set our interrup handler with the core CPU. */ ?If ((request_8xxirq(CPM_interrupt, cpm_interrupt, 0,”cpm”, NULL)!=0) ?Panic( “could not allocate CPM IRQ!”)。 167。 /*set the bit:interrupt*/ ? outb_p(0x00,short_base+2)。 /*enable reporting*/ ? outb_p(0x00,short_base)。 探測中斷 1. probe_irq_on(void) ? 返回一個 unsigned long 位掩碼 2. 使設備發(fā)中斷 3. probe_irq_oof(unsigned long) ? 第一步返回的位掩碼傳給此函數(shù) ? 返回值即為探測到的中斷號(如果為 0或為負則沒有可用中斷) ? 探測中斷例子 ? unsigned long ? mask=probe_irq_on()。 /*queue the tasklet*/ ? short_bh_count++。 ? if(tv_head==(tv_data+NR_TIMEVAL)) ? tv_head==tv_data。 ? void th_interrupt(int irq, void *dev_id, struct pt_regs *regs) ? { ? dl_gettimeofday(tv_head)。 基本概念 ? 中斷處理程序舉例 ? struct tasklet_struct my_tasklet。 基本概念 ? 分類 ? 硬件中斷 ?由硬件設備產(chǎn)生的中斷 ?執(zhí)行相應的中斷處理程序 ?可以產(chǎn)生軟中斷 (tasklet)來實現(xiàn)耗時的中斷處理任務,也就是下半部中斷 ? 軟中斷( softIRQ) ?內(nèi)核中共有 32個 softIRQ, 其中一個就是 TASKLET_SOFTIRQ ?在內(nèi)核執(zhí)行 do_softirq()函數(shù)時,輪詢這 32個 softirq,如果相應的 softirq可以執(zhí)行,就執(zhí)行它指導的函數(shù) ?TASKLET_SOFTIRQ對應的函數(shù)是 tasklet_action(),它會依次執(zhí)行掛在 TASKLET_SOFTIRQ上的 tasklet 167。 用戶模式驅(qū)動程序 ? 讀寫設備 ? 使用函數(shù) inb(), inw(), inl() 或readb(), readw(), readl()來讀設備 ? 使用函數(shù) outb(), outw(), outl()或writeb(), writew(),writel()來寫設備 ? 它們的頭文件是 sys/, 167。 ?*ledptr=value。 用戶模式驅(qū)動程序 ? 內(nèi)存映射 ? 通過設備 /dev/mem來訪問硬件設備 ? 使用 mmap()函數(shù)來選擇要訪問的內(nèi)存物理基址和塊大小,它返回已經(jīng)映射到物理基址的虛擬地址 ? void *mmap (void *start, size_t length, int prot, int flags,in fd,off_t offset) ? f
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1