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

正文內(nèi)容

linu設(shè)備驅(qū)動(dòng)程序(完整版)

  

【正文】 ? 寫(xiě)設(shè)備 ? Copy_from_user() Read() ? 寫(xiě)設(shè)備 ? Copy_to_user() 其他 函數(shù)如 ioctl()和中斷處理函數(shù)等 167。 ?其它命令: modprobe、 depmod、 modinfo。 模塊方式驅(qū)動(dòng)程序 ?模塊驅(qū)動(dòng)程序?qū)嵗? include linux/ include linux/ include linux/ include linux/ include linux/ include linux/ unsigned int test_major=0 ssize_t read_test(struct file *file,char *buf,size_t count,loff_t *offset) { int left。 } Int open_test(struct inode *inode,strut file *file) { MOD_INC_USE_COUNT。 If(result0){ Printk(KERN_INFO “test:can’t get major number\n”)。 編譯 Insmod 如果安裝成功,在 /proc/devices文件中就可以看到設(shè)備test,并可以看到它的主設(shè)備號(hào)。 內(nèi)核方式驅(qū)動(dòng)程序 ?六、編譯內(nèi)核 在 make clean。 用戶模式驅(qū)動(dòng)程序 ? 適用范圍及特點(diǎn) 測(cè)試新的硬件設(shè)備 ? 測(cè)試一個(gè)新的設(shè)備是否可用 ? 觀察設(shè)備的工作情況 快速創(chuàng)建一個(gè)硬件應(yīng)用 ? 比如控制小馬達(dá)的轉(zhuǎn)動(dòng) ? 點(diǎn)亮某個(gè)指示燈 范 圍 特 點(diǎn) 優(yōu)點(diǎn): 1)可以連接完整的 C庫(kù),編程容易 2)可以使用傳統(tǒng)調(diào)試器,而不必調(diào)試內(nèi)容 缺點(diǎn): 1)不支持設(shè)備中斷 2)不支持設(shè)備定時(shí) 167。 基本概念 ? 分類(lèi) ? 硬件中斷 ?由硬件設(shè)備產(chǎn)生的中斷 ?執(zhí)行相應(yīng)的中斷處理程序 ?可以產(chǎn)生軟中斷 (tasklet)來(lái)實(shí)現(xiàn)耗時(shí)的中斷處理任務(wù),也就是下半部中斷 ? 軟中斷( softIRQ) ?內(nèi)核中共有 32個(gè) softIRQ, 其中一個(gè)就是 TASKLET_SOFTIRQ ?在內(nèi)核執(zhí)行 do_softirq()函數(shù)時(shí),輪詢這 32個(gè) softirq,如果相應(yīng)的 softirq可以執(zhí)行,就執(zhí)行它指導(dǎo)的函數(shù) ?TASKLET_SOFTIRQ對(duì)應(yīng)的函數(shù)是 tasklet_action(),它會(huì)依次執(zhí)行掛在 TASKLET_SOFTIRQ上的 tasklet 167。 /*queue the tasklet*/ ? short_bh_count++。 167。 3 等待隊(duì)列 ?概述 ? 使用時(shí)機(jī) 請(qǐng)求暫不可用的資源 ? 版本相關(guān) (/linux/) wait_queue wait_queue_head_t 167。 //currentstate=TASK_interruptible。 } 167。 ? 添加 timer void add_timer(struct timer_list *timer)。 //delay 1 sec ? … ? add_timer(my_timer)。 ? = timeout_func。 ? return 1。 ? mydriver_open()。 取消設(shè)備注冊(cè) If((rc=unregister_chrdev(mydriver_major, mydriver_name))) 167。 5 實(shí)例分析字符設(shè)備驅(qū)動(dòng)程序 ? mydriver_release(pinode,pfile) ? 增加釋放記數(shù) mydriver_release_count++,。 167。 ? 給定時(shí)器賦值,并添加定時(shí)器 =mydriver_timer_expiration。 ? 正常讀出數(shù)據(jù),將數(shù)據(jù)拷貝給用戶,返回讀出的字節(jié)數(shù) if (mydriver_final_status == 0) { if (copy_to_user(user_buf, mydriver_buffer, count)) {?} printk(“NORMALLY TERMINATTED:??”)。 5 實(shí)例分析字符設(shè)備驅(qū)動(dòng)程序 ? mydriver_write(pfile,user_buf,count,poffset)續(xù) ? 處理異常情況 if (signal_pending(current)) { del_timer(mydriver_timer)。 6 實(shí)例分析網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序 ? 函數(shù)列表 ? scc_e_init()。 scc_e_init() ? 調(diào)用路徑 (/init/)start_kernel()init()(do_basic_setup()do_initcalls() (/fs/partitions/)_initcall(partition_setup)partion_setup() (/drivers/block/)device_init()(//core/) _dev_init()work_probe(),使用 pci_probes[ ]初始化數(shù)組,其中包含 scc_e_init() ? 初始化 _device結(jié)構(gòu)的各個(gè)域 。 ? 設(shè)置并安裝中斷 。 devstop = scc_e_close。 167。 ? 開(kāi)始發(fā)送 bdpcbd_sc |=(BD_ENET_TX_READY |BD_ENET_TX_TC)。 ? 檢查收到的是否是完整幀 ? 更新統(tǒng)計(jì)信息 ? 為 skb申請(qǐng)內(nèi)存 skb= dev_alloc_skb(pkt_len4)。 ? 設(shè)置 BD ? 進(jìn)入 for循環(huán)繼續(xù)讀取收到的包 ,如果 bd為空 ,則退出循環(huán) ? 設(shè)置 cepcur_rx指針 cepcur_rx = (cbd_t *) bodp。 scc_e_interrupt(dev_id,regs) ? 如果發(fā)送緩沖區(qū)滿 ,則退出循環(huán) if((bdp==cepcur_tx) (ceptx_full==0)) break。 ? 如果 ceptx_full為 1,則將其設(shè)為 0,并喚醒相關(guān)進(jìn)程 if (ceptx_full) {ceptx_full=0。 7 用戶與內(nèi)核的接口 ? 用戶訪問(wèn)內(nèi)核的途徑:系統(tǒng)調(diào)用 ? 基本概念 ? Linux內(nèi)核中設(shè)置的一組用于實(shí)現(xiàn)各種系統(tǒng)功能的子程序。 ? =10。 ? …} 167。 ? 定義在 《 源碼目錄 》 /include/asmppc/ 167。 } ? 更新 cepdirty_tx指針 cepdirty_tx=(cbd_t *)bdp。 ? 出錯(cuò)重發(fā) if (bdpcbd_sc (BD_ENET_TX_LC |BD_ENET_TX_RL | BD_ENET_TXUN)) { must_restart =1。 scc_e_interrupt(dev_id,regs) ? 當(dāng) CPMVEC_ENET產(chǎn)生中斷時(shí) ,執(zhí)行 ? 獲取 cep指針 cep=(struct scc_e_private *)devpriv。 167。 scc_e_start_xmit(skb,dev) ? 設(shè)定發(fā)送開(kāi)始時(shí)間 deptrans_start=jiffies。 包數(shù)據(jù)指針 :bdpcbd_vufaddr = _pa(skbdata)。 devset_multicast_list = set_multicast_list。 cpm_inistall_handler(CPMVEC_ENET, scc_e_interrupt, dev)。 ep=(scc_e_t *)(cpcp_dparam[PROFF_ENET])。 ? scc_e_start_xmit()。 ? 正常寫(xiě)入數(shù)據(jù),返回寫(xiě)入的字節(jié)數(shù) if (mydriver_final_status == 0) { printk(“NORMALLY TERMINATTED:??”)。}。 =jiffies+(MYDRIVER_IO_DURATION *HZ)。 ? 設(shè)置 I/O成功標(biāo)志 mydriver_final_status=0。 ? 釋放中斷號(hào) ifndef MYDRIVER_SIMULATE_INTERRUPT free_irq(mydriver_irq,mydriver_name)。 ? 為文件的緩存區(qū)分配內(nèi)存空間 mydriver_buffer= (char *) kmalloc(MYDRIVER_BUFFERSIZE,GEP_KERNEL)。 mydriver_timer_expiration()
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1