linux3.0-内核自带led驱动移植

**********************************************************************************************************************************************************************************

cpu          : s3c2440(arm9)

linux内核:linux-3.0

开发板     :fl2440

开发模块 :LED

************************************************************************************************************************************************************************************

前言:之前为了学习了解驱动的写法,所以编写与测试过led驱动,然而linux3.0的内核已经有了这个led驱动,所以我们只需要使能移植到我们的fl2440开发板上即可

1.源码修改

查看fl2440开发板原理图,可知4个led分别是连接GPB5,GPB6.GPB8.GPB10这四个管脚,如图所示:

 

所以我们需要在arch/arm/plat-s3c24xx/common-smdk.c文件中稍作修改,将led0~led3的相关GPIO分别配置成PB5,PB6,PB8,PB10

[zoulei@CentOS linux-3.0]$ vim arch/arm/plat-s3c24xx/common-smdk.c

 

 
  1. 48

  2. 49 /* LED devices */

  3. 50

  4. 51 static struct s3c24xx_led_platdata smdk_pdata_led1 = {

  5. 52 .gpio = S3C2410_GPB(5),

  6. 53 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,

  7. 54 .name = "led1",

  8. 55 .def_trigger = "timer",

  9. 56 };

  10. 57

  11. 58 static struct s3c24xx_led_platdata smdk_pdata_led2 = {

  12. 59 .gpio = S3C2410_GPB(6),

  13. 60 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,

  14. 61 .name = "led2",

  15. 62 .def_trigger = "nand-disk",

  16. 63 };

  17. 64

  18. 65 static struct s3c24xx_led_platdata smdk_pdata_led3 = {

  19. 66 .gpio = S3C2410_GPB(8),

  20. 67 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,

  21. 68 .name = "led3",

  22. 69 };

  23. 70

  24. 71 static struct s3c24xx_led_platdata smdk_pdata_led4 = {

  25. 72 .gpio = S3C2410_GPB(10),

  26. 73 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,

  27. 74 .name = "led4",

  28. 75 };

 
  1. 177

  2. 178 void __init smdk_machine_init(void)

  3. 179 {

  4. 180 /* Configure the LEDs (even if we have no LED support)*/

  5. 181

  6. 182 s3c_gpio_cfgpin(S3C2410_GPB(5), S3C2410_GPIO_OUTPUT);

  7. 183 s3c_gpio_cfgpin(S3C2410_GPB(6), S3C2410_GPIO_OUTPUT);

  8. 184 s3c_gpio_cfgpin(S3C2410_GPB(8), S3C2410_GPIO_OUTPUT);

  9. 185 s3c_gpio_cfgpin(S3C2410_GPB(10), S3C2410_GPIO_OUTPUT);

  10. 186

  11. 187 s3c2410_gpio_setpin(S3C2410_GPB(5), 1);

  12. 188 s3c2410_gpio_setpin(S3C2410_GPB(6), 1);

  13. 189 s3c2410_gpio_setpin(S3C2410_GPB(8), 1);

  14. 190 s3c2410_gpio_setpin(S3C2410_GPB(10), 1);


2.make menuconfig配置

[zoulei@CentOS linux-3.0]$ make menuconfig

 

 
  1. Device drivers-->

  2. [*]LED support-->

  3. [*]LED Class support

  4. <*>LED Support for Samsung S3C24XX GPIO LEDs /*添加led支持*/


完成上面的操作之后重新编译内核然后烧录到开发板,运行

3.下载到开发板测试

下载到内核之后会在/sys/class/目录下生成leds目录,在leds目录下会看到led0 led1 led2 led3四个LED的目录,这就是开发板上的四个LED.

查看其中一个LED设备,如led1,可以看出led1当前的状态是关闭。其中brightness就是控制等亮灭的文件,(0表示关闭,1表示打开)

max_brightness可以控制亮灭程度的最大值假如设定是50就是0到50代表不同的亮度

向brightness写1,表示打开LED。这时led1会被点亮。

向brightness写0,表示关闭LED。这时led1会被熄灭。

其他led也是同样的操作!

**************************************************************************************************************************************************************************************

说明:对于向led这样的设备模型,系统认为所有的设备都是挂接在总线上的,而要使设备工作,就需要相应的驱动。设备模型会产生一个虚拟的文件系统——sysfs,它给用户提供了一个从用户空间去访问内核设备的方法,它在Linux里的路径是/sys。如果要写程序访问sysfs,可以像读写普通文件一样来操作/sys目录下的文件

***********************************************************************************************************************************************

代码测试:

 

 
  1. led.c

  2. /*********************************************************************************

  3. * Copyright: (C) 2017 zoulei

  4. * All rights reserved.

  5. *

  6. * Filename: led.c

  7. * Description: This file

  8. *

  9. * Version: 1.0.0(2017年04月20日)

  10. * Author: zoulei <zoulei121@gmail.com>

  11. * ChangeLog: 1, Release initial version on "2017年04月20日 06时19分52秒"

  12. *

  13. ********************************************************************************/

  14. #include<stdint.h>

  15. #include<string.h>

  16. #include<fcntl.h>

  17. #include<unistd.h>

  18. #include<stdio.h>

  19. #include<linux/input.h>

  20. #include<unistd.h>

  21.  
  22. int main(int argc, char *argv[])

  23. {

  24. int fd, no;

  25. no=(int)argv[1][3]-48; /*这么做的目的是得到运行./led_test led1(led2,led3,led4)on 命令时中的第二个参数中的数字1,2,3,4*/

  26. switch(no)

  27. {

  28. case 1:

  29. fd = open("/sys/class/leds/led1/brightness", O_RDWR);

  30. break;

  31. case 2:

  32. fd = open("/sys/class/leds/led2/brightness", O_RDWR);

  33. break;

  34. case 3:

  35. fd = open("/sys/class/leds/led3/brightness", O_RDWR);

  36. break;

  37. case 4:

  38. fd = open("/sys/class/leds/led4/brightness", O_RDWR);

  39. break;

  40. default:

  41. return -1;

  42. }

  43. if(fd<0)

  44. {

  45. printf("can not open file.\n");

  46. return -1;

  47. }

  48.  
  49. /*完成打开或关闭LED操作*/

  50. if(!strcmp(argv[2],"on"))

  51. write(fd, "1", 1);

  52. else if(!strcmp(argv[2],"off"))

  53. write(fd, "0", 1);

  54.  
  55. close(fd);

  56. return 0;

  57. }


将用交叉编译器编译之后下载到开发板上运行,

测试结果为:

四个led灯成功点亮与熄灭。led驱动移植成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派使用STEP3:更换镜像源

更换国内镜像源&#xff0c;这里使用中科大的源&#xff0c;软件下载和更新速度更快。 1、sudo nano /etc/apt/sources.list 2、sudo nano /etc/apt/sources.list.d/raspi.list 3、sudo apt-get update && apt-get upgrade

树莓派使用STEP4:安装vim

系统原装的vi操作对新手和学习者不友好&#xff0c;可以用nano编辑器&#xff0c;因为我比较熟悉vi和vim&#xff0c;这里推荐使用vim。首先需要删除原装的vi&#xff0c;然后重新安装新的vim&#xff0c;过程比较简单。 1、卸载预装的vi sudo apt-get remove vim-common 2、…

手机测试pc端网页

在这个问题上徘徊了 一个钟头了&#xff0c;终于被我找到方法了&#xff0c;就赶紧记下来&#xff0c;以后好查阅&#xff01;&#xff01; 主要问题在防火墙&#xff0c;防火墙阻当了80端口&#xff0c;所以怎么用手机访问都是访问不了的。把防火墙关闭就好了&#xff01; 贴上…

树莓派使用STEP5:安装samba文件共享服务器

samba服务器可以在多平台多操作系统搭建文件服务器&#xff0c;用于共享文件。为了方便windows和树莓派交换文件&#xff0c;将samba服务器的搭建过程记录如下。 1、安装samba服务器。 sudo apt-get install samba samba-common-bin 出现以下提示&#xff1a;Modify smb.conf…

ETH—Lwip以太网通信

第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载&#xff1a;www.firebbs.cn 野火视频教程优酷观看网址&#xff1a;http://i.youku.com/firege 互联网技术对人类社会的影响不言而喻。当今大部分电子设备都能以不同的方式接入互联网(Inter…

计算从A地出发到各个地方的路径及距离

数据库环境&#xff1a;SQL SERVER 2005 如题&#xff0c;现有bus表数据如下&#xff0c;dstart是起点&#xff0c;dend是终点&#xff0c;distance是两地的距离。 求从A地出发到各个地方的距离。 有经验的人一看&#xff0c;就知道题目关于树形查询的。SQL SERVER 2005数据库…

树莓派使用STEP6:安装git

git用于创建和管理代码仓&#xff0c;是一个很优秀的版本控制工具。linux/树莓派安装非常简单。 1、sudo apt-get install git-core

cJSON 使用笔记

缘 起 最近在stm32f103上做一个智能家居的项目&#xff0c;其中选择的实时操作系统是 rt_thread OS v1.2.2稳定版本&#xff0c;其中涉及到C和java(android)端数据…

使用虚拟路径时出现404问题

今天在做一个小项目的时候使用了如下路径 web.xml如下&#xff1a; 一切配置都正确&#xff0c;可还是404 在折腾了半天之后发现浏览器的地址栏没有项目名&#xff01;也就是说连接到项目外面去了&#xff0c;果断404。然后才记得虚拟路径前面的“/”和通常用的“../”具有同样…

树莓派使用STEP7:安装wiringPi硬件外设驱动C库

基于C/C开发树莓派外设&#xff0c;比较好的一种库是wiringPi&#xff0c;这里记录安装的流程和步骤。 一、在线安装 1、控制命令行 &#xff1a;git clone git://git.drogon.net/wiringPi 克隆git代码仓库 2、控制命令行&#xff1a; git pull origin 拉取最新的wiringPi…

STM32的I2C主从机通信

最近一段时间在做I2C通信协议&#xff0c;需要在两块STM32之间做I2C通信&#xff0c;定的是主机用IO口模拟&#xff0c;从机用的是STM32的硬件I2C&#xff0c;我的项目要求是需要主从机之间能够进行一串数据收发而不出错&#xff0c;实验时在主机方面&#xff0c;利用IO口模拟主…

css垂直居中那点事

这是我技术博客生涯的第一篇文章&#xff0c;想想还是有点小鸡冻。。。菜鸟的征程现在要开始了 学习css的时候经常被各种问题纠结到不要不要的&#xff0c;没办法&#xff0c;只能写写博客帮助整理一下自己的思绪和帮助一下和我遇到同样问题的小伙伴们 不知道各位学习css的小伙…

Windows常用shell命令大全

From: http://blog.csdn.net/yunzhongfeiniao/article/details/6564577 基于鼠标操作的后果就是OS界面外观发生改变&#xff0c;就得多花学习成本。更主要的是基于界面引导Path与命令行直达速度是难以比拟的。另外Geek很大一部分是键盘控&#xff0c;而非鼠标流的。 整理Wind…

div模拟select/option解决兼容性问题及增加可拓展性

个人博客&#xff1a; http://mcchen.club 想到做这个模拟的原因是之前使用select>option标签的时候发现没有办法操控option的很多样式&#xff0c;比如line-height等&#xff0c;还会由此导致在IE8及以下版本浏览器中的各种问题。 这个模拟思路很简单&#xff0c;也很清晰&…

Linux Socket网络通信示例

记录一下Linux 网络通信编程示例&#xff0c;主要用内网穿透和网络调试助手进行调试。 1、源文件&#xff1a; #include <stdlib.h> #include <sys/types.h> #include <stdio.h> #include <netinet/in.h> #incldue <string.h> //bze…

stm32+lwip(四):网页服务器测试

ST官方有lwip的例程&#xff0c;下载地址如下&#xff1a; https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32070.html 本文例子参考ST官方给出的例…

Linux 用C/C++创建新文件并写入内容

1、需求 在Linux环境下用C编写一个函数&#xff0c;用于记录运行日志&#xff0c;要求只存在一个同名文件&#xff0c;每次记录前清除已有的信息。 2、思路 需要完成的是&#xff1a; &#xff08;1&#xff09;查找&#xff08;access&#xff09;是否该文件存在&#xff…

如何将Eclipse中的开源项目使用到Android Studio中

近几日&#xff0c;笔者用到了一些开源项目&#xff0c;比如著名的PTR项目。但是在使用的过程中&#xff0c;遇到了一些问题。 这个开源库是在Eclipse上面写的&#xff0c;我们现在开发用的是Android stuido。 两种软件的项目结构是不同的&#xff0c;那么怎么把PTR用到我们的项…

STM32 网络通信Web Server中 SSI与CGI的应用解析

本次主要解析STM32网络通信中WebServer应用&#xff0c;从网页界面的编写到浏览器与STM32之间进行通信的数据来说明SSI与CGI的原理及应用&#xff0c;并对GET与POST指令进行应用解析。 硬件和软件环境&#xff1a; 1.硬件环境&#xff1a;STM32F407&#xff0c;网卡芯片LAN87…

树莓派SSH 连接不上:socket error Event:32 Error:10053

问题如下&#xff1a; 解决办法&#xff1a;ssh文件夹下的文件权限问题。 cd /etc/ssh sudo chmod 0644 * sudo chmod 0600 ssh_host_ecdsa_key ssh_host_rsa_key登陆成功&#xff1a;