tiny-s3c6410_linux下led灯驱动移植过程

上传人:第*** 文档编号:33539585 上传时间:2018-02-15 格式:DOC 页数:11 大小:718KB
返回 下载 相关 举报
tiny-s3c6410_linux下led灯驱动移植过程_第1页
第1页 / 共11页
tiny-s3c6410_linux下led灯驱动移植过程_第2页
第2页 / 共11页
tiny-s3c6410_linux下led灯驱动移植过程_第3页
第3页 / 共11页
tiny-s3c6410_linux下led灯驱动移植过程_第4页
第4页 / 共11页
tiny-s3c6410_linux下led灯驱动移植过程_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《tiny-s3c6410_linux下led灯驱动移植过程》由会员分享,可在线阅读,更多相关《tiny-s3c6410_linux下led灯驱动移植过程(11页珍藏版)》请在金锄头文库上搜索。

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

2、-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 #includ

4、e #define 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 tmp |= ( (!cmd) ,此意为要把该选项编译为模块方式;再按下空格会变为,意为要把该选项编译到内核中,在此我们选择,如图,如果没有出现,请检查你是否已经装载了缺省的内核配置

5、文件,(2)Makefile文件Step2:通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini6410_leds.c编译进去的,还需要在Makefile 中把内核配置选项和真正的源代码联系起来,打开 linux-2.6.38-cgf/drivers/char/Makefile,obj-$(CONFIG_MINI6410_LEDS) += mini6410_leds.o添加并保存退出Step3:这时回到linux-2.6.38 源代码根目录位置,执行make modules,就可以生成我们所需要的内核模块文件drivers/char/mini6410_l

6、eds.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.则表明自己的内核里缺相关的头文件,只要把光盘里的头文件复制到相关的目录下则可以一般头文件路径会在 arch/arm/mach-s3c64xx/includecp linux-2.6.38/arc

7、h/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-FriendlyARM 目录然后在板子中现在执行insmod mini6410_leds.ko出现如下结果:leds initialized可以看到该模块已经被

8、装载了(注意:使用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

9、(argc != 3 | sscanf(argv1, %d, &led_no) != 1 | sscanf(argv2,%d, &on) != 1 |on 1 | led_no 3) fprintf(stderr, Usage: leds led_no 0|1n);exit(1);/*打开/dev/leds 设备文件 */fd = open(/dev/leds0, 0);if (fd 0) fd = open(/dev/leds, 0);if (fd 0) perror(open device leds);exit(1);/*通过系统调用ioctl 和输入的参数控制led*/ioctl(fd,

10、 on, led_no);/*关闭设备句柄*/close(fd);return 0; 3、将程序下载到开发板,推荐使用 ftp 下载将开发板的 IP 地址修改,与主机在同一个网段,并修改 PC 机上 Linux 下/etc/exports 网络配置文件的 IP 与开发板的一致。确保 PC 机上 Linux 已经安装了 NFS 服务器,。4、测试5.1 加载驱动 # insmod mini6410_leds.ko5.2 测试 ./led 3 1#chmod 777 led 5.4 卸载驱动 #rmmod mini6410_leds.ko从上面的结果我们可以看到,当用户调用相应的文件操作函数时,驱动程序中的相应的函数也会被调用。大家可以修改相应程序,测试一下其他的情况,如有什么错误也可以一起探讨,今生为嵌入式事业奋斗终身,谢谢!邮箱:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号