一个在2440上使用LED之linux-2.6内核驱动的详细例子

[复制链接]
 楼主| capbily 发表于 2007-4-12 09:39 | 显示全部楼层 |阅读模式
一个在QQ2440上使用的最简单LED的linux-2.6的例子,&nbsp;适合刚刚接触arm-linux的初学者。您还可以在&nbsp;http://www.arm123.net下载更多资料<br /><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/fs.h&gt<br />#include&nbsp;&ltlinux/init.h&gt<br />#include&nbsp;&ltlinux/devfs_fs_kernel.h&gt<br />#include&nbsp;&ltlinux/miscdevice.h&gt<br />#include&nbsp;&ltlinux/delay.h&gt<br />#include&nbsp;&ltasm/irq.h&gt<br />#include&nbsp;&ltasm/arch/regs-gpio.h&gt<br />#include&nbsp;&ltasm/hardware.h&gt<br /><br />#define&nbsp;DEVICE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&quot;leds&quot;&nbsp;/*定义led设备的名字*/<br />#define&nbsp;LED_MAJOR&nbsp;231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*定义led设备的主设备号*/<br /><br />static&nbsp;unsigned&nbsp;long&nbsp;led_table&nbsp;[]&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;S3C2410_GPB5,<br />&nbsp;&nbsp;&nbsp;&nbsp;S3C2410_GPB6,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S3C2410_GPB7,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S3C2410_GPB8,<br />};<br /><br />static&nbsp;unsigned&nbsp;int&nbsp;led_cfg_table&nbsp;[]&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;S3C2410_GPB5_OUTP,<br />&nbsp;&nbsp;&nbsp;&nbsp;S3C2410_GPB6_OUTP,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S3C2410_GPB7_OUTP,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S3C2410_GPB8_OUTP,<br />};<br /><br />static&nbsp;int&nbsp;sbc2440_leds_ioctl(<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;inode&nbsp;*inode,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;file&nbsp;*file,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;cmd,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;arg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*关于ioctl的处理*/<br />&nbsp;&nbsp;&nbsp;&nbsp;switch(cmd)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(arg&nbsp;&gt&nbsp;4)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-EINVAL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s3c2410_gpio_setpin(led_table[arg],&nbsp;!cmd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-EINVAL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />static&nbsp;struct&nbsp;file_operations&nbsp;sbc2440_leds_fops&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;.owner&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;THIS_MODULE,<br />&nbsp;&nbsp;&nbsp;&nbsp;.ioctl&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;sbc2440_leds_ioctl,<br />};<br /><br />static&nbsp;int&nbsp;__init&nbsp;sbc2440_leds_init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*注册字符设备*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;register_chrdev(LED_MAJOR,&nbsp;DEVICE_NAME,&nbsp;&sbc2440_leds_fops);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ret&nbsp;&lt&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(DEVICE_NAME&nbsp;&quot;&nbsp;can't&nbsp;register&nbsp;major&nbsp;number\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*注册到devfs*/<br />&nbsp;&nbsp;&nbsp;&nbsp;devfs_mk_cdev(MKDEV(LED_MAJOR,&nbsp;0),&nbsp;S_IFCHR&nbsp;|&nbsp;S_IRUSR&nbsp;|&nbsp;S_IWUSR&nbsp;|&nbsp;S_IRGRP,&nbsp;DEVICE_NAME);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;4;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s3c2410_gpio_cfgpin(led_table,&nbsp;led_cfg_table);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s3c2410_gpio_setpin(led_table,&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printk(DEVICE_NAME&nbsp;&quot;&nbsp;initialized\n&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />static&nbsp;void&nbsp;__exit&nbsp;sbc2440_leds_exit(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;devfs_remove(DEVICE_NAME);<br />&nbsp;&nbsp;&nbsp;&nbsp;unregister_chrdev(LED_MAJOR,&nbsp;DEVICE_NAME);<br />}<br /><br />module_init(sbc2440_leds_init);<br />module_exit(sbc2440_leds_exit);<br /><br />
gusto 发表于 2007-4-12 16:40 | 显示全部楼层

你这个板在哪里卖啊。

再加个LCD&nbsp;多少钱?<br /><br /><br />JTAG下载呢?既然是学习,你们提供什么软件工具和硬件工具?。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

3

帖子

0

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

4

主题

3

帖子

0

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