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

正文內(nèi)容

linu設(shè)備驅(qū)動程序(編輯修改稿)

2025-01-19 01:06 本頁面
 

【文章內(nèi)容簡介】 handler with the core CPU. */ ?If ((request_8xxirq(CPM_interrupt, cpm_interrupt, 0,”cpm”, NULL)!=0) ?Panic( “could not allocate CPM IRQ!”)。 167。 探測中斷 ? 安裝 CPM中斷 ? CPM中斷向量表 32個( /arch/ppc/8xx_io/) ? 確定相應(yīng)的中斷向量,比如是 SCC1 ? 調(diào)用函數(shù) cpm_install_handler(CPMVEC_SCC1, scc1_handler, devpointer) 167。 探測中斷 ? 例子 ? cpm_interrupt_init() 函數(shù)中 *( /arch/ppc/8xx_io/) ? /* Install our own error handler. */ ? cpm_install_handler(CPMVEC_ERROR, cpm_error_interrupt, NULL)。 ? 取消中斷 ? 取消 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。 探測中斷 ? 中斷處理程序任務(wù) ? 響應(yīng)中斷 ? 查看中斷狀態(tài)寄存器,判斷中斷源 ? 根據(jù)中斷源進行相應(yīng)處理 167。 3 等待隊列 ?概述 ? 使用時機 請求暫不可用的資源 ? 版本相關(guān) (/linux/) wait_queue wait_queue_head_t 167。 3 等待隊列 ?主要函數(shù) ? (/kernel/) ? sleep_on(wait_queue_head_t *q) ? interruptible_sleep_on(wait_queue_head_t *q) ? (/linux/) ? wake_up(wait_queue_head_t *q) ? wake_up_interruptible(wait_queue_head_t *q) ? (/inclued/linux/) ? DECLARE_wait_queue_head(name) ? DECLARE_waitqueue (name,tsk) ? add_wait_queue(wait_queue_head_t *head, wait_queue_t *new) ? remove_wait_queue(wait_queue_head_t *head, wait_queue_t *old) 167。 3 等待隊列 ?使用實例 ? 情景:內(nèi)核中有一塊內(nèi)存,在寫時發(fā)現(xiàn)滿了 ? 首先在程序開始定義全局變量 strut wait_queue_head_t wqh。 //struct wait_queue_t wq。 或者使用宏 DECLARE_WAIT_QUEUE_HEAD(wqh)。 //DECLARE_WAITQUEUE(wq,current)。 ? 在 write函數(shù)中: while(is_full) { interruptible_sleep_on(wqh)。 //add_wait_queue(wqh,Qwq)。 //currentstate=TASK_interruptible。 //schedule()。} 167。 3 等待隊列 ?使用實例 (續(xù) ) write_to_buffer()。 is_empty=0。 ? 在 read函數(shù)中: if(!is_empty) { read_from_buffer()。 if_full=0。 wake_up_interruptible(wqh)。 } 167。 4 定時處理 ?概述 ? 數(shù)據(jù)結(jié)構(gòu) include/linux/ struct timer_list { struct timer_list *next。 struct timer_list *prev。 unsigned long expires。 unsigned long data。 void(*function)(unsigned loing)。 } 167。 4 定時處理 ?主要函數(shù) ? 初始化 timer void init_timer(struct timer_list *timer)。 ? 添加 timer void add_timer(struct timer_list *timer)。 ? 刪除 timer void del_timer(struct timer_list *timer)。 167。 4 定時處理 ?使用實例 ? struct timer_list my_timer。 ? … ? init_timer(my_timer)。 ? = my_timerfunc。 ? = my_argu。 ? = jiffies+HZ。 //delay 1 sec ? … ? add_timer(my_timer)。 167。 4 定時處理 ?等待隊列和定時器綜合實例 ? init_timer_out。 ? struct timer_list timer。 ? void timeout_func(unsigned long who) ? { ? timed_out = 1。 ? debug((“Timing out\n”)) ? wake_up_interruptible((wait_queue_head_t*)who)。 ? } ? int sleep_or_timerout(wait_queue_head_t*wait,int timeout) ? { ? timed_out=0。 ? =(unsigned long) wait。 ? = timeout_func。 167。 4 定時處理 ?等待隊列和定時器綜合實例 ? = jiffies + timeout。 ? add_timer(timer)。 ? debug((“going to sleep\n”))。 ? interruptible_sleep_on(wait)。 ? del_timer(timer)。 ? if(timed_out) { ? timed_out = 0。 ? return 1。 ? } ? else return 0。 ? } 167。 5 實例分析字符設(shè)備驅(qū)動程序 ? 源程序 : ? 該程序是一個典型的模塊方式字符設(shè)備驅(qū)動程序 ? 該程序包含了中斷 (上下半部 ),時鐘,等待隊列 的處理例程 ? 其特點在于用時鐘中斷來模擬硬件中斷 167。 5 實例分析字符設(shè)備驅(qū)動程序 ? 函數(shù)列表 ? my_init_module()。 mydriver_init()。 my_cleanup_module()。 mydriver_stop()。 ? mydriver_open()。 mydriver_release()。 mydriver_timer_expiration()。 mydriver_interrupt()。 mydriver_task()。 mydriver_read()。 mydriver_write() 167。 5 實例分析字符設(shè)備驅(qū)動程序 ? 程序分析 ? my_init_module(void 調(diào)用 mydriver_init() ? my_cleanup_module(void) 調(diào)用 mydriver_stop() 注冊設(shè)備 if((rc=unregister_chrdev(mydriver_major, mydriver_name, my_fops))): 初始化等待隊列 Int_waitqueue_head(mydriver_zz)。 取消設(shè)備注冊 If((rc=unregister_chrdev(mydriver_major, mydriver_name))) 167。 5 實例分析字符設(shè)備驅(qū)動程序 ? mydriver_open(pinode,pfile) ? 增加打開記數(shù) mydriver_open_count++,。 ? 為文件的緩存區(qū)分配內(nèi)存空間 mydriver_buffer= (char *) kmalloc(
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1