我的第一个实验pgio驱动,就是通常点亮led的那个,居然有问题

[复制链接]
6261|2
 楼主| oiu 发表于 2008-1-24 18:28 | 显示全部楼层 |阅读模式
gpiodrv.c&nbsp;代码如下:<br />#include&nbsp;&ltlinux/config.h&gt<br />#include&nbsp;&ltlinux/init.h&gt<br />#include&nbsp;&ltlinux/module.h&gt<br />#include&nbsp;&ltlinux/fs.h&gt<br />#include&nbsp;&ltlinux/iobuf.h&gt<br />#include&nbsp;&ltlinux/kernel.h&gt<br />#include&nbsp;&ltlinux/major.h&gt<br />#include&nbsp;&ltasm/uaccess.h&gt<br />#include&nbsp;&ltasm/io.h&gt<br />#include&nbsp;&ltlinux/vmalloc.h&gt<br />#define&nbsp;IOPORT_MAJOR&nbsp;220<br />#define&nbsp;GPFCON&nbsp;(*(volatile&nbsp;unsigned&nbsp;*)0x56000050)&nbsp;&nbsp;<br />#define&nbsp;GPFDAT&nbsp;(*(volatile&nbsp;unsigned&nbsp;*)0x56000054)<br />#define&nbsp;GPFUP&nbsp;&nbsp;(*(volatile&nbsp;unsigned&nbsp;*)0x56000058)<br />int&nbsp;gpio_open(struct&nbsp;inode&nbsp;*,&nbsp;struct&nbsp;file*);<br />int&nbsp;gpio_release(struct&nbsp;inode*,&nbsp;struct&nbsp;file*);<br />int&nbsp;gpio_ctl_ioctl(struct&nbsp;inode&nbsp;*,&nbsp;struct&nbsp;file*,&nbsp;unsigned&nbsp;int,&nbsp;unsigned&nbsp;long);<br />static&nbsp;struct&nbsp;file_operations&nbsp;gpio_ctl_fops&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;ioctl&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;gpio_ctl_ioctl,<br />&nbsp;&nbsp;&nbsp;&nbsp;open&nbsp;&nbsp;:&nbsp;gpio_open,<br />&nbsp;&nbsp;&nbsp;&nbsp;release&nbsp;:&nbsp;gpio_release,<br />};<br />#define&nbsp;LED1_ON()&nbsp;&nbsp;&nbsp;&nbsp;(GPFDAT&nbsp;&=&nbsp;~0X10)<br />#define&nbsp;LED1_OFF()&nbsp;&nbsp;&nbsp;&nbsp;(GPFDAT&nbsp;|=&nbsp;0X10)<br />#define&nbsp;LED2_ON()&nbsp;&nbsp;&nbsp;&nbsp;(GPFDAT&nbsp;&=&nbsp;~0X20)<br />#define&nbsp;LED2_OFF()&nbsp;&nbsp;&nbsp;&nbsp;(GPFDAT&nbsp;|=&nbsp;0X20)<br />#define&nbsp;LED3_ON()&nbsp;&nbsp;&nbsp;&nbsp;(GPFDAT&nbsp;&=&nbsp;~0X40)<br />#define&nbsp;LED3_OFF()&nbsp;&nbsp;&nbsp;&nbsp;(GPFDAT&nbsp;|=&nbsp;0X40)<br />#define&nbsp;LED4_ON()&nbsp;&nbsp;&nbsp;&nbsp;(GPFDAT&nbsp;&=&nbsp;~0X80)<br />#define&nbsp;LED4_OFF()&nbsp;&nbsp;&nbsp;&nbsp;(GPFDAT&nbsp;|=&nbsp;0X80)<br />static&nbsp;int&nbsp;LedStatus;<br />void&nbsp;LedSet(int&nbsp;led)<br />{<br />&nbsp;&nbsp;&nbsp;LedStatus&nbsp;=&nbsp;led;<br />&nbsp;&nbsp;&nbsp;if(LedStatus&nbsp;&&nbsp;0x01)<br />&nbsp;&nbsp;&nbsp;&nbsp;LED1_ON();<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;LED1_OFF();<br />}<br /><br />void&nbsp;LedDisp(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;udelay(0x500000);<br />&nbsp;&nbsp;&nbsp;&nbsp;LedSet(0x02);<br />&nbsp;&nbsp;&nbsp;&nbsp;udelay(0x500000);<br />&nbsp;&nbsp;&nbsp;&nbsp;LedSet(0x01);<br /><br />}<br /><br />static&nbsp;int&nbsp;__init&nbsp;gpio_init(void)<br />{&nbsp;&nbsp;&nbsp;int&nbsp;err&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;gpio&nbsp;inint\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;register_chrdev(IOPORT_MAJOR,&nbsp;&quot;gpio&quot;,&nbsp;&gpio_ctl_fops);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(err)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;fail&nbsp;to&nbsp;register\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;success&nbsp;to&nbsp;register&nbsp;&nbsp;\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />int&nbsp;gpio_open(struct&nbsp;inode*&nbsp;inode,&nbsp;struct&nbsp;file*&nbsp;fllp)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;GPFCON&nbsp;=&nbsp;0X5500;<br />&nbsp;&nbsp;&nbsp;&nbsp;GPFUP&nbsp;=&nbsp;0XFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;open&nbsp;gpio&nbsp;devices\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />int&nbsp;gpio_release(struct&nbsp;inode&nbsp;*inode,&nbsp;struct&nbsp;file*&nbsp;fillp)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;release&nbsp;this&nbsp;device\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />int&nbsp;gpio_ctl_ioctl(struct&nbsp;inode&nbsp;*inode,&nbsp;struct&nbsp;file&nbsp;*flip,unsigned&nbsp;\&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;command,&nbsp;unsigned&nbsp;long&nbsp;arg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;err&nbsp;=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(command&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(arg--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LedDisp();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;......&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&quot;\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;err;<br />}<br /><br />&nbsp;module_init(gpio_init);<br />&nbsp;module_exit(gpio_release);<br /><br />我的编译方法是:arm-linux-gcc&nbsp;-O2&nbsp;-DMODULE&nbsp;-D__KERNEL__&nbsp;-c&nbsp;gpiodrv.c<br />提示如下:<br />gpiodrv.c:&nbsp;In&nbsp;function&nbsp;`__cleanup_module_inline':<br />gpiodrv.c:113:&nbsp;warning:&nbsp;return&nbsp;from&nbsp;incompatible&nbsp;pointer&nbsp;type<br /><br />请问哪里出了问题,我看了半天也没看出问题出来,谢谢高手指教。<br /><br />
Iamstudent 发表于 2008-1-25 10:26 | 显示全部楼层

113行是哪行啊?楼主还要别人给您一行行的数

  
 楼主| oiu 发表于 2008-1-25 17:28 | 显示全部楼层

谢谢大侠,现在终于调通了,

原来要加入&nbsp;__exit&nbsp;这样,不过现在生成的文件不能安装,insmod&nbsp;的时候,提示有如下问题:<br />No&nbsp;module&nbsp;found&nbsp;in&nbsp;object<br />insmod:&nbsp;cannot&nbsp;insert&nbsp;`gpiodrv.o':&nbsp;Invalid&nbsp;module&nbsp;format&nbsp;(-1):&nbsp;Exec&nbsp;format&nbsp;error<br />,还在努力中....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

oiu

28

主题

81

帖子

0

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