亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: dreamice
打印 上一主題 下一主題

Linux驅(qū)動開發(fā)庖丁解牛之三——揭開字符設(shè)備驅(qū)動程序的面紗 [復(fù)制鏈接]

論壇徽章:
0
41 [報告]
發(fā)表于 2009-04-13 15:18 |只看該作者
原帖由 rico849 于 2009-4-12 17:02 發(fā)表


我編譯后沒有產(chǎn)生,不知道怎么回事,請Dreamice指教啊,初學(xué)者,呵呵!

try
cat /proc/devices

論壇徽章:
0
42 [報告]
發(fā)表于 2009-05-24 10:10 |只看該作者
這東西不錯,支持一下。

論壇徽章:
0
43 [報告]
發(fā)表于 2009-05-24 18:45 |只看該作者
dreamice兄一直在不辭辛勞地普及驅(qū)動開發(fā)方面的知識和技巧,必須得頂一下,

論壇徽章:
0
44 [報告]
發(fā)表于 2009-08-14 15:59 |只看該作者
太讓人激動了。謝謝

論壇徽章:
0
45 [報告]
發(fā)表于 2010-03-19 09:06 |只看該作者
看完了,跟著學(xué)點device的東西。!ths!

論壇徽章:
0
46 [報告]
發(fā)表于 2010-08-17 16:14 |只看該作者
樓主趕快出PDF啊,我要珍藏~~~

論壇徽章:
0
47 [報告]
發(fā)表于 2010-08-19 11:06 |只看該作者
期待關(guān)于驅(qū)動模型的文章。。。

論壇徽章:
0
48 [報告]
發(fā)表于 2010-08-26 16:26 |只看該作者
看到這里不得不佩服樓主,哥們兒,你收我為徒吧!

論壇徽章:
0
49 [報告]
發(fā)表于 2010-08-26 16:37 |只看該作者
請問樓主:
你怎么理解驅(qū)動與應(yīng)用程序函數(shù)參數(shù)變化是什么原因?
比如:write在驅(qū)動里是write(struct file ...
vincentdpan 發(fā)表于 2008-12-24 19:40



    就是。‘(dāng)初改人家的驅(qū)動的時候,一直納悶兒,為什么這兩個函數(shù)的參數(shù)個數(shù)不一樣???。!

論壇徽章:
0
50 [報告]
發(fā)表于 2010-08-27 14:58 |只看該作者
本帖最后由 zhuqing_739 于 2010-08-30 10:55 編輯

我也貼一個宋老師那本書上的驅(qū)動:
----------------------------------------------------------------------------------------

  1. include ...
  2. struct light_dev
  3. {
  4.         struct cdev cdev;
  5.         unsigned char value;
  6. };

  7. struct light_dev *light_devp;
  8. int light_major = LIGHT_MAJOR;

  9. MODULE_AUTHOR("Song Baohua");
  10. MODULE_LICENSE("Dual BSD/GPL");

  11. /*打開和關(guān)閉函數(shù)*/
  12. int light_open(struct inode *inode, struct file *file)
  13. {
  14.         struct lignt_dev *dev;
  15.         dev = container_of(inode->i_cdev, struct lignt_dev, cdev);
  16.         file->private_data = dev;
  17.         return 0;
  18. }

  19. int light_release(struct inode *inode, struct file *file)
  20. {
  21.         return 0;
  22. }

  23. ssize_t light_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
  24. {
  25.         struct lignt_dev *dev = filp->private_data;

  26.         if (copy_to_user(buf, &(dev->value), 1))
  27.         {
  28.                   return -EFAULT;
  29.         }
  30.         return 1;
  31. }

  32. ssize_t light_write(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
  33. {
  34.         struct lignt_dev *dev = filp->private_data;

  35.         if (copy_to_user(buf, &(dev->value), 1))
  36.         {
  37.                   return -EFAULT;
  38.         }
  39.         return 1;

  40.         if (dev->value == 1)
  41.                 light_on();
  42.         else
  43.                 light_off();

  44.         return 1;
  45. }

  46. int light_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
  47. {
  48.         struct light_dev *dev = filp->private_data;

  49.         switch(cmd)
  50.         {
  51.                 case LIGHT_ON:
  52.                         dev->value = 1;
  53.                         light_on();
  54.                         break;
  55.                
  56.                 case LIGHT_OFF:
  57.                         dev->value = 0;
  58.                         light_off();
  59.                         break;

  60.                 default:
  61.                         return -ENOTTY;
  62.         }

  63.         return 0;
  64. }

  65. struct file_operations light_fops =
  66. {
  67.         .owner = THIS_MODULE,
  68.         .read  = light_read,
  69.         .write = light_write,
  70.         .ioctl = light_ioctl,
  71.         .open  = light_open,
  72.         .release = light_release,
  73. };

  74. struct void light_setup_cdev(struct light_dev *dev, int index)
  75. {
  76.         int err, devno = MKDEV(light_major, index);

  77.         cdev_init(&dev->cdev, &light_fops);
  78.         dev->cdev.owner = THIS_MODULE;
  79.         dev->cdev.ops = &light_fops;
  80.         err = cdev_add(&dev->cdev, devno, 1)
  81.         if (err)
  82.         {
  83.                 printk(KERN_NOTICE "Error %d adding LED%d", err, index);
  84.         }
  85. }

  86. int light_init(void)
  87. {
  88.         int result;
  89.         dev_t dev = MKDEV(light_major, 0);

  90.         if (light_major)
  91.         {
  92.                 result = register_chrdev_region(dev, 1, "LED");
  93.         }
  94.         else
  95.         {
  96.                 result = alloc_chrdev_region(&dev, 0, 1, "LED");
  97.                 light_major = MAJOR(dev);
  98.         }

  99.         if (result < 0)
  100.                 return result;

  101.         light_devp = kmalloc(sizeof(struct light_dev), GPL_KEENEL);

  102.         if (!light_devp)
  103.         {
  104.                 result = -ENOMEM;
  105.                 goto fail_malloc;
  106.         }

  107.         memset(light_devp, 0, sizeof(struct light_dev));
  108.         light_setup_cdev(light_devp, 0);
  109.         light_init();
  110.         return 0;

  111.         fail_malloc: unregister_chrdev_region(dev, light_devp);
  112.         return result;
  113. }

  114. void light_cleanup(void)
  115. {
  116.         cdev_del (&light_devp->cdev);
  117.         kfree(light_devp);
  118.         unregister_chrdev_region(MKDEV(light_major, 0), 1);
  119.        
  120. }

  121. module_init(light_init);
  122. module_exit(light_cleanup);
復(fù)制代碼
----------------------------------------------------------------------------------------
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP