ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:549.42KB ,
资源ID:2129152      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2129152.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(TinyS3C6410Linux下LED灯驱动移植过程.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

TinyS3C6410Linux下LED灯驱动移植过程.docx

1、TinyS3C6410Linux下LED灯驱动移植过程UT-S3C6410 ARM11 Linux 下的LED驱动一 、实验环境操作系统:fedora13交叉编译环境:arm-Linux-gcc 或以上,6410板子内核源码路径在:忘了,需要厂家给的内核源代码硬件平台:S3C6410开发板(其他类型的开发板也可以注意配置GPIO)注:交叉编译环境一定要装好,一般的开发板给的配套资料中都会有,安装过程也都有详细的过程,如果没有,亲,你只有自己解决了。也可以联系我(*),泪奔支持你们。二 、实验原理控制LED是最简单的一件事情,就像学C语言时候写的“hello world”程序一样,是一个入门的程

2、序。首先来了解一下相关的硬件知识:UT-S3C6410 LED原理图 UT-S3C6410 LED外部引脚图 从上面的原理图可以得知,LED与CPU引脚的连接方法如下,高电平点亮。LED1-GPM0LED2 -GPM1LED3-GPM2LED4-GPM3 从数据手册可以找到相应的控制方法。这里我们以LED1为例,介绍一下LED1的操作方法,其他的类似,请大家自行分析。通过上面可以得知,需要先将GPM0设置为输出方式。将寄存器GPMCON低四位配置成0001。然后将GPMDAT寄存器的第0位置1灯亮,置LED0灯亮,开发板上有四个LED所以要对GPMDAT的低四位进行操作,就可以实现对灯的亮灭操

3、作了。三、实验步骤1、编写驱动程序mini6410_leds.c#include #include #include /#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #defin

4、e DEVICE_NAME ledsstatic long sbc2440_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)switch(cmd) unsigned tmp;case 0:case 1:if (arg 4) return -EINVAL;tmp = readl(S3C64XX_GPKDAT);tmp &= (1 (4 + arg);tmp |= ( (!cmd) (4 + arg) );writel(tmp, S3C64XX_GPKDAT);/printk (DEVICE_NAME: %d %d

5、n, arg, cmd);return 0;default:return -EINVAL;static struct file_operations dev_fops = .owner = THIS_MODULE,.unlocked_ioctl = sbc2440_leds_ioctl,;static struct miscdevice misc = .minor = MISC_DYNAMIC_MINOR,.name = DEVICE_NAME,.fops = &dev_fops,;static int _init dev_init(void)int ret;unsigned tmp;tmp

6、= readl(S3C64XX_GPKCON);tmp = (tmp & (0xffffU16)|(0x1111U16);writel(tmp, S3C64XX_GPKCON);tmp = readl(S3C64XX_GPKDAT);tmp |= (0xF 4);writel(tmp, S3C64XX_GPKDAT);ret = misc_register(&misc);printk (DEVICE_NAMEtinitializedn);return ret;static void _exit dev_exit(void)misc_deregister(&misc);module_init(d

7、ev_init);module_exit(dev_exit);MODULE_LICENSE(GPL);MODULE_AUTHOR(FriendlyARM Inc.);(1)把Hello,Module 加入内核代码树,并编译一般编译 2.6 版本的驱动模块需要把驱动代码加入内核代码树,并做相应的配置,如下步骤(注意:实际上以下步骤均已经做好,你只需要打开检查一下直接编译就可以了):Step1:编辑配置文件Kconfig,加入驱动选项,使之在make menuconfig 的时候出现打开 linux-2.6.38/drivers/char/Kconfig 文件,添加如图所示:#=cgf add=c

8、onfig MINI6410_LEDS tristate LED Support for Mini6410 GPIO LEDs depends on CPU_S3C6410 default y help This option enables support for LEDs connected to GPIO lines on Mini6410 boards.#=保存退出,这时在 linux-2.6.38 目录位置运行一下make menuconfig 就可以在DeviceDrivers 􀃆 Character devices 菜单中看到刚才所添加的选项了,按下空格键将会选

9、择为,此意为要把该选项编译为模块方式;再按下空格会变为,意为要把该选项编译到内核中,在此我们选择,如图,如果没有出现,请检查你是否已经装载了缺省的内核配置文件,(2)Makefile文件Step2:通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini6410_leds.c编译进去的,还需要在Makefile 中把内核配置选项和真正的源代码联系起来,打开linux-2.6.38-cgf/drivers/char/Makefile,obj-$(CONFIG_MINI6410_LEDS) += mini6410_leds.o添加并保存退出Step3:这时回到l

10、inux-2.6.38 源代码根目录位置,执行make modules,就可以生成我们所需要的内核模块文件drivers/char/mini6410_leds.ko 了,注意:执行make modules 之前,必须先执行make zImage,只需一次就可以了。至此,我们已经完成了模块驱动的编译。注意:在编译过程中会出现drivers/char/mini6410_leds.c:31:30: fatal error: mach/gpio-bank-k.h: No such file or directorycompilation terminated.则表明自己的内核里缺相关的头文件,只要把光

11、盘里的头文件复制到相关的目录下则可以一般头文件路径会在arch/arm/mach-s3c64xx/includecp linux-2.6.38/arch/arm/mach-s3c64xx/include/mach/gpio-bank-k.h /root/mywork/linux-2.6.38-cgf/arch/arm/mach-s3c64xx/include/mach/gpio-bank-k.h(3)把Module 下载到开发板并安装使用在此使用 ftp 命令把编译出的mini6410_hello_module.ko 下载到板子中,并把它移动到/lib/modules/2.6.38-Frien

12、dlyARM 目录然后在板子中现在执行insmod mini6410_leds.ko出现如下结果:leds initialized可以看到该模块已经被装载了(注意:使用modprobe 命令加载模块不需要加“ko”尾缀)再执行以下命令,可以看到该模块被卸载#rmmod mini6410_hello_module注意: 要能够正常卸载模块, 必须把模块放入开发板的/lib/modules/2.6.38-FriendlyARM 目录2、编写测试程序光盘中的样例测试程序:mini6410_leds.c #include #include #include #include int main(int argc, char *argv)int on;int led_no;int fd;/* 检查led 控制的两个参数,如果没有参数输入则退出。*/if (argc != 3 | sscanf(argv1, %d, &led_no) != 1 | sscanf(argv2,%d, &on) != 1 |on 1 | led_no 3) fprintf(stder

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1