亚洲国产成人,色呦呦内射午夜,无码一级片,无码人妻少妇色欲AV一区二区

<samp id="jg8hh"></samp>

<p id="jg8hh"></p><delect id="jg8hh"><em id="jg8hh"><blockquote id="jg8hh"></blockquote></em></delect><acronym id="jg8hh"><dd id="jg8hh"></dd></acronym><button id="jg8hh"><dd id="jg8hh"><acronym id="jg8hh"></acronym></dd></button><samp id="jg8hh"><em id="jg8hh"><blockquote id="jg8hh"></blockquote></em></samp>

<p id="jg8hh"></p>

<samp id="jg8hh"><legend id="jg8hh"></legend></samp>
<samp id="jg8hh"><legend id="jg8hh"><samp id="jg8hh"></samp></legend></samp>

<samp id="jg8hh"></samp>

<p id="jg8hh"></p><acronym id="jg8hh"></acronym><p id="jg8hh"><dd id="jg8hh"><acronym id="jg8hh"></acronym></dd></p><p id="jg8hh"></p>

<p id="jg8hh"></p><delect id="jg8hh"><legend id="jg8hh"><var id="jg8hh"></var></legend></delect><button id="jg8hh"><listing id="jg8hh"><i id="jg8hh"></i></listing></button>
<delect id="jg8hh"><legend id="jg8hh"><var id="jg8hh"></var></legend></delect>

字符驅(qū)動編寫(字符驅(qū)動程序)

發(fā)布時間:2023-11-12
本文主要介紹字符驅(qū)動編程(字符驅(qū)動程序),下面一起看看字符驅(qū)動編程(字符驅(qū)動程序)相關(guān)資訊。
在上一篇文章中,我記錄了字符設(shè)備的發(fā)展。來讀寫內(nèi)存數(shù)據(jù),但是有一個問題。設(shè)備的創(chuàng)建依賴于手動mknod。無論改進與否,設(shè)備的自動創(chuàng)建都可以通過直接加載驅(qū)動程序來完成。這里增加了class_create的創(chuàng)建,實現(xiàn)驅(qū)動的加載,設(shè)備創(chuàng)建,同步觸發(fā)。對于基于平臺的設(shè)備,這樣的創(chuàng)建也是可以接受的。代碼附錄如下:
include linux/module . hinc lude linux/types . hinc lude linux/fs . hinc lude linux/errno . hinc lude linux/mm . hinc lude linux/sched . hinc lude linux/init . hinc lude linux/cdev . hinc lude linux/uaccess . hinc lude linux/slab . hdefine globamem _ size 0x 1000 define mem _ clear 0x 1 define global mem _ major 0 define ins mod _ create _ devstatic int global mem _ major = global mem靜態(tài)結(jié)構(gòu)類* gmem _ class
/* globalmem設(shè)備結(jié)構(gòu)*/structglobalmem _ dev { structcdev cdev;無符號字符mem[globamem _ size];};
struct global mem _ dev global mem _ devp;/文件打開函數(shù)*/int global mem _ open(struct inode * inode,struct file filp){//filp-private _ data = global mem _ devp;返回0;}/文件釋放函數(shù)*/int global mem _ release(struct inode * inode,struct file * filp){ return 0;}
/* ioctl設(shè)備控制函數(shù)*/staticlongglobalmem _ ioctl(struct file * filp,unsigned int cmd,unsigned long arg) {//stru)ct global mem _ dev dev = filp-private _ data;/獲取設(shè)備結(jié)構(gòu)指針*/
switch(cmd){ case mem _ clear:mem set(dev-mem,0,globamem _ size);printk(kern _ info globalmem被設(shè)置為零);打破;default : return-einval;}返回0;}
/* read function */static size _ t global mem _ read(struct file * filp,char _ _ user * buf,size _ t size,loft _ t * ppos) {
無符號長p = * pposunsigned int count = sizeint ret = 0;struct global mem _ dev * dev = filp-private _ data;/*獲取設(shè)備結(jié)構(gòu)指針*/ if (p = globamem_size)返回0;if(count globamem _ size-p)count = globamem _ size-p;/*內(nèi)核空間-用戶空間*/if (copy _ to _ user (buf,(void *) (dev-memp),count)){ ret = efault;} else { * ppos = countret =計數(shù);printk(kern _ info 從%lu讀取%u字節(jié)\ n ,計數(shù),p);ret返回;} static ssize _ t global mem _ write(struct file * filp,const char __user *buf,size_t size,loff_t *ppos){
無符號長p = * pposunsigned int count = sizeint ret = 0;struct global mem _ dev * dev = filp-private _ data;/*獲取設(shè)備結(jié)構(gòu)指針*/ if (p = globamem_size)返回0;如果(計數(shù)globamem _ size-p)count = globamem _ size-p;/*用戶空間-內(nèi)核空間*/if(copy _ from _ user((void *)(dev-memp),buf,count)){ ret = e fault;} else { * ppos = countret =計數(shù);printk(kern _ info 從%lu寫入%u字節(jié)\ n ,計數(shù),p);ret返回;} static loff _ t global mem _ ll seek(struct file * filp,loff_t offset,int orig){
int ret = 0;struct global mem _ dev * dev = filp-private _ data;/*獲取設(shè)備結(jié)構(gòu)指針*/ret ret;}/*文件操作結(jié)構(gòu)*/static construct file _ operationglobalmem _ fops = {。owner = this _ module,。llseek = globalmem _ llseek,。read = globalmem _ read,。write = globalmem_write,。unlocked_ioctl = globalmem_ioctl,。open = globalmem_open,。release = globalmem_release,};
/*初始化并注冊cdev */staticvoid全局mem _ setup _ cdev (struct全局mem _ dev * dev,int index) {interr,devno = mkdev(全局mem _ major,index);cdev_init(dev-cdev,global mem _ fops);dev-cdev . owner = this _ module;err = cdev_add(dev-cdev,devno,1);if(err)printk(kern _ notice 添加globalmem %d時出現(xiàn)錯誤% d ,err,index);}
/*設(shè)備驅(qū)動程序模塊加載函數(shù)*/int globalmem_init(void){
我fdef ins mod _ create _ devglobalmem _ major = register _ chrdev(0, gmem ,global mem _ fops);gmem _ class = class _ create(this _ module gmem );device_create(gmem_class,null,mkdev(globalmem_major,0),null, mgem );/*/dev/led */global mem _ devp = kmalloc(sizeof(struct global mem _ dev),gfp _ kernel);如果(!globalmem_devp) {/*應(yīng)用程序失敗*/printk(kern _ notice 錯誤kmalloc失敗 );}返回0;elseint結(jié)果;dev _ t devno = mkdev(global mem _ major,0);//* devno = (25020) | 0 *//* *應(yīng)用設(shè)備號*/if(global mem _ major)result = register _ chrdev _ region(devno,1, 全球記憶 );else {/*動態(tài)應(yīng)用設(shè)備編號*/result = alloc _ chr dev _ region(devno,0,1 全球記憶與記憶);global mem _ major = major(devno);}if(結(jié)果0)返回結(jié)果;/*動態(tài)申請設(shè)備結(jié)構(gòu)的內(nèi)存*/global mem _ devp = kmalloc(sizeof(structglobalmem _ dev),gfp _ kernel);如果(!globalmem_devp) {/*應(yīng)用程序失敗*/result =-eno mem;goto fail _ malloc}memset (globalmem_devp,0,sizeof(struct global mem _ dev));global mem _ setup _ cdev(global mem _ devp,0);返回0;fail _ malloc: unregister _ chrdev _ region(devno,1);返回result
endif}
/*模塊卸載函數(shù)*/void globalmem_exit(void){
ifdef ins mod _ create _ dev unregister _ chrdev(global mem _ major, gmem );device_destroy(gmem_class,mkdev(globalmem_major,0));class _ destroy(gmem _ class);elsecdev _ del(global mem _ devp-cdev);/*注銷cdev */kfree(global mem _ devp);/*釋放設(shè)備結(jié)構(gòu)的內(nèi)存*/unregister _ chrdev _ region(mkdev(global mem _ major,0),1);/*發(fā)布設(shè)備號*/endif}
模塊作者( 傅立葉和傅立葉變換);模塊許可證( 雙bsd/gpl );
module_param(globalmem_major,int,s _ i rugo);
module_init(全局內(nèi)存_初始化);模塊_出口(全局內(nèi)存_出口);
標簽:
設(shè)備結(jié)構(gòu)
了解更多字符驅(qū)動編程(字符驅(qū)動程序)相關(guān)內(nèi)容請關(guān)注本站點。
上一個:工程進度款支付具體概念是什么?
下一個:酸度調(diào)節(jié)劑

茶氨酸是個寶,你知道不知道?
陽臺的綠化有哪些綠化原則?
電阻器選購的機器及關(guān)注的參數(shù)
自動化儀表工年度總結(jié)
紅茶的香型
goudsmit,為客戶提供高品質(zhì)的電磁解決方案
室內(nèi)植物耐陰馴化過程
打印機無法打印的原因與解決辦法(打印機無法打印的原因和解決方法有哪些)
手機視頻刪除恢復(fù),手機錄制的視頻誤刪如何恢復(fù)
配電柜“麻”的感覺,就要當心了……