嵌入式LINUX驱动问题(没有file_operations)

[复制链接]
 楼主| wuyunzdh 发表于 2008-10-23 12:41 | 显示全部楼层 |阅读模式
请问一下,我的开发板完整的AD驱动程序为什么没有file_operations结构。<br />能不能帮忙解释一下,<br />驱动一般都有file_operations结构来定义接口函数的呀!<br />如:<br />struct&nbsp;file_operations&nbsp;scull_fops&nbsp;=&nbsp;{&nbsp;.owner&nbsp;=&nbsp;&nbsp;THIS_MODULE,<br /><br />.llseek&nbsp;=&nbsp;&nbsp;scull_llseek,<br /><br />.read&nbsp;=&nbsp;&nbsp;scull_read,<br /><br />.write&nbsp;=&nbsp;&nbsp;scull_write,<br /><br />.ioctl&nbsp;=&nbsp;&nbsp;scull_ioctl,<br /><br />.open&nbsp;=&nbsp;&nbsp;scull_open,<br /><br />.release&nbsp;=&nbsp;&nbsp;scull_release,};<br /><br /><br /><br />我把源码贴给大家看看:<br /><br />/*<br />*&nbsp;s3c2410-adc.c<br />*<br />*&nbsp;S3C2410&nbsp;ADC&nbsp;<br />*&nbsp;&nbsp;exclusive&nbsp;with&nbsp;s3c2410-ts.c<br />*<br />*&nbsp;Author:&nbsp;SeonKon&nbsp;Choi&nbsp;&ltbushi@mizi.com&gt<br />*&nbsp;Date&nbsp;&nbsp;:&nbsp;$Date:&nbsp;2003/01/20&nbsp;14:24:49&nbsp;$&nbsp;<br />*<br />*&nbsp;$Revision:&nbsp;1.1.2.6&nbsp;$<br />*<br /><br />&nbsp;&nbsp;&nbsp;Fri&nbsp;Dec&nbsp;03&nbsp;2002&nbsp;SeonKon&nbsp;Choi&nbsp;&ltbushi@mizi.com&gt<br />&nbsp;&nbsp;&nbsp;-&nbsp;initial<br /><br />*<br />*&nbsp;This&nbsp;file&nbsp;is&nbsp;subject&nbsp;to&nbsp;the&nbsp;terms&nbsp;and&nbsp;conditions&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public<br />*&nbsp;License.&nbsp;&nbsp;See&nbsp;the&nbsp;file&nbsp;COPYING&nbsp;in&nbsp;the&nbsp;main&nbsp;directory&nbsp;of&nbsp;this&nbsp;archive<br />*&nbsp;for&nbsp;more&nbsp;details.<br />*/<br />#include&nbsp;&ltlinux/config.h&gt<br />#include&nbsp;&ltlinux/module.h&gt<br />#include&nbsp;&ltlinux/kernel.h&gt<br />#include&nbsp;&ltlinux/init.h&gt<br /><br />#include&nbsp;&ltlinux/sched.h&gt<br />#include&nbsp;&ltlinux/irq.h&gt<br />#include&nbsp;&ltlinux/delay.h&gt<br /><br />#include&nbsp;&ltasm/hardware.h&gt<br />#include&nbsp;&ltasm/semaphore.h&gt<br /><br />#undef&nbsp;DEBUG<br /><br />#ifdef&nbsp;DEBUG<br />#define&nbsp;DPRINTK(x...)&nbsp;{printk(__FUNCTION__&quot;(%d):&nbsp;&quot;,__LINE__);printk(##x);}<br />#else<br />#define&nbsp;DPRINTK(x...)&nbsp;(void)(0)<br />#endif<br /><br />#define&nbsp;START_ADC_AIN(x)&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;ADCCON&nbsp;=&nbsp;PRESCALE_EN&nbsp;|&nbsp;PRSCVL(255)&nbsp;|&nbsp;ADC_INPUT((x))&nbsp;;&nbsp;<br />&nbsp;&nbsp;ADCCON&nbsp;|=&nbsp;ADC_START;&nbsp;<br />}<br /><br />static&nbsp;struct&nbsp;semaphore&nbsp;adc_lock;<br />static&nbsp;wait_queue_head_t&nbsp;*adc_wait;<br /><br />static&nbsp;void&nbsp;adcdone_int_handler(int&nbsp;irq,&nbsp;void&nbsp;*dev_id,&nbsp;struct&nbsp;pt_regs&nbsp;*reg)<br />{<br />wake_up(adc_wait);<br />}<br /><br />int&nbsp;s3c2410_adc_read(int&nbsp;ain,&nbsp;wait_queue_head_t&nbsp;*wait)<br />{<br />int&nbsp;ret&nbsp;=&nbsp;0;<br /><br />if&nbsp;(down_interruptible(&adc_lock))<br />&nbsp;&nbsp;return&nbsp;-ERESTARTSYS;<br /><br />adc_wait&nbsp;=&nbsp;wait;<br /><br />START_ADC_AIN(ain);<br />sleep_on_timeout(adc_wait,&nbsp;HZ/100);&nbsp;/*&nbsp;10ms&nbsp;*/<br /><br />#if&nbsp;0<br />if&nbsp;(signal_pending(current))&nbsp;{<br />&nbsp;&nbsp;up(&adc_lock);<br />&nbsp;&nbsp;return&nbsp;-ERESTARTSYS;<br />}<br />#endif<br /><br />ret&nbsp;=&nbsp;ADCDAT0&nbsp;;<br /><br />up(&adc_lock);<br /><br />adc_wait&nbsp;=&nbsp;NULL;<br /><br />DPRINTK(&quot;AIN[%d]&nbsp;=&nbsp;0x%04x,&nbsp;%d
&quot;,&nbsp;ain,&nbsp;ret,&nbsp;ADCCON&nbsp;&&nbsp;0x80&nbsp;?&nbsp;1:0);<br /><br />return&nbsp;(ret&nbsp;&&nbsp;0x3ff);<br />}<br /><br />int&nbsp;__init&nbsp;s3c2410_adc_init(void)<br />{<br />init_MUTEX(&adc_lock);<br /><br />/*&nbsp;normal&nbsp;ADC&nbsp;*/<br />ADCTSC&nbsp;=&nbsp;0;&nbsp;//XP_PST(NOP_MODE);<br /><br />if&nbsp;(request_irq(IRQ_ADC_DONE,&nbsp;adcdone_int_handler,&nbsp;SA_INTERRUPT,<br />&nbsp;&nbsp;&nbsp;&quot;ADC&quot;,&nbsp;NULL)&nbsp;&lt&nbsp;0)<br />&nbsp;&nbsp;goto&nbsp;irq_err;<br /><br />return&nbsp;0;<br /><br />irq_err:<br /><br />return&nbsp;1;<br />}<br /><br />module_init(s3c2410_adc_init);<br /><br />#ifdef&nbsp;MODULE<br />void&nbsp;__exit&nbsp;s3c2410_adc_exit(void)<br />{<br />free_irq(IRQ_ADC_DONE,&nbsp;NULL);<br />}<br /><br />module_exit(s3c2410_adc_exit);<br />MODULE_LICENSE(&quot;GPL&quot;);<br />#endif<br />
2ap15 发表于 2008-12-17 22:27 | 显示全部楼层

1

int&nbsp;__init&nbsp;s3c2410_adc_init(void)<br />{<br />init_MUTEX(&adc_lock);<br /><br />/*&nbsp;normal&nbsp;ADC&nbsp;*/<br />ADCTSC&nbsp;=&nbsp;0;&nbsp;//XP_PST(NOP_MODE);<br /><br />if&nbsp;(request_irq(IRQ_ADC_DONE,&nbsp;adcdone_int_handler,&nbsp;SA_INTERRUPT,<br />&nbsp;&nbsp;&nbsp;&quot;ADC&quot;,&nbsp;NULL)&nbsp;&lt&nbsp;0)<br />&nbsp;&nbsp;goto&nbsp;irq_err;<br /><br />return&nbsp;0;<br /><br />irq_err:<br /><br />return&nbsp;1;<br />}<br /><br />没有注册设备,他直接使用了中断<br /><br />不注册设备,你搞个file_operations就没有意义啊,因为这个东西是和设备号相联的吧<br /><br />能用就好了,何必拘泥呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

71

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

24

主题

71

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部