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
48
49 /* LED devices */
50
51 static struct s3c24xx_led_platdata smdk_pdata_led1 = {
52 .gpio = S3C2410_GPB(5),
53 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
54 .name = "led1",
55 .def_trigger = "timer",
56 };
57
58 static struct s3c24xx_led_platdata smdk_pdata_led2 = {
59 .gpio = S3C2410_GPB(6),
60 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
61 .name = "led2",
62 .def_trigger = "nand-disk",
63 };
64
65 static struct s3c24xx_led_platdata smdk_pdata_led3 = {
66 .gpio = S3C2410_GPB(8),
67 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
68 .name = "led3",
69 };
70
71 static struct s3c24xx_led_platdata smdk_pdata_led4 = {
72 .gpio = S3C2410_GPB(10),
73 .flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
74 .name = "led4",
75 };
177
178 void __init smdk_machine_init(void)
179 {
180 /* Configure the LEDs (even if we have no LED support)*/
181
182 s3c_gpio_cfgpin(S3C2410_GPB(5), S3C2410_GPIO_OUTPUT);
183 s3c_gpio_cfgpin(S3C2410_GPB(6), S3C2410_GPIO_OUTPUT);
184 s3c_gpio_cfgpin(S3C2410_GPB(8), S3C2410_GPIO_OUTPUT);
185 s3c_gpio_cfgpin(S3C2410_GPB(10), S3C2410_GPIO_OUTPUT);
186
187 s3c2410_gpio_setpin(S3C2410_GPB(5), 1);
188 s3c2410_gpio_setpin(S3C2410_GPB(6), 1);
189 s3c2410_gpio_setpin(S3C2410_GPB(8), 1);
190 s3c2410_gpio_setpin(S3C2410_GPB(10), 1);
2.make menuconfig配置
[zoulei@CentOS linux-3.0]$ make menuconfig
Device drivers-->
[*]LED support-->
[*]LED Class support
<*>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目录下的文件
***********************************************************************************************************************************************
代码测试:
led.c
/*********************************************************************************
* Copyright: (C) 2017 zoulei
* All rights reserved.
*
* Filename: led.c
* Description: This file
*
* Version: 1.0.0(2017年04月20日)
* Author: zoulei <zoulei121@gmail.com>
* ChangeLog: 1, Release initial version on "2017年04月20日 06时19分52秒"
*
********************************************************************************/
#include<stdint.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdio.h>
#include<linux/input.h>
#include<unistd.h>
int main(int argc, char *argv[])
{
int fd, no;
no=(int)argv[1][3]-48; /*这么做的目的是得到运行./led_test led1(led2,led3,led4)on 命令时中的第二个参数中的数字1,2,3,4*/
switch(no)
{
case 1:
fd = open("/sys/class/leds/led1/brightness", O_RDWR);
break;
case 2:
fd = open("/sys/class/leds/led2/brightness", O_RDWR);
break;
case 3:
fd = open("/sys/class/leds/led3/brightness", O_RDWR);
break;
case 4:
fd = open("/sys/class/leds/led4/brightness", O_RDWR);
break;
default:
return -1;
}
if(fd<0)
{
printf("can not open file.\n");
return -1;
}
/*完成打开或关闭LED操作*/
if(!strcmp(argv[2],"on"))
write(fd, "1", 1);
else if(!strcmp(argv[2],"off"))
write(fd, "0", 1);
close(fd);
return 0;
}
将用交叉编译器编译之后下载到开发板上运行,
测试结果为:
四个led灯成功点亮与熄灭。led驱动移植成功!
linux3.0-内核自带led驱动移植相关推荐
- 《LINUX3.0内核源代码分析》第一章:内存寻址
https://blog.csdn.net/ekenlinbing/article/details/7613334 摘要:本章主要介绍了LINUX3.0内存寻址方面的内容,重点对follow_page ...
- 《LINUX3.0内核源代码分析》第二章:中断和异常 【转】
转自:http://blog.chinaunix.net/uid-25845340-id-2982887.html 摘要:第二章主要讲述linux如何处理ARM cortex A9多核处理器的中断.异 ...
- linux内核3.4 led驱动,JZ2440_V3_内核驱动程序_点亮一个LED灯(示例代码)
为了用内核驱动程序点亮一个LED灯,真是费尽周折,参考了韦东山的<嵌入式linux驱动开发完全手册>(以下简称<完全手册>)和网上很多人的blog,最终在@Carlos·Wei ...
- 10 怎么写USB驱动,Cadence USB 2.0 Controller和PHY IP驱动移植
怎么写USB驱动,Cadence USB 2.0 Controller和PHY IP驱动移植 作者 将狼才鲸 日期 2022-03-26 本子文档所属的上级文档(Gitee仓库): 才鲸 / 嵌入式知 ...
- android 全局定时器,高通Android LED驱动移植-GPIO,内核定时器
有些设备需要有灯的闪烁来表达一些含义,比如电池电量.利用GPIO实现灯的灭.亮.慢闪.快闪需要配合内核定时器来实现. 首先我们找到高通内核自带的LED相关的文件, /kernel/drivers/l ...
- CentOS6下Xen 4.1的安装(编译linux3.0内核)
一. 准备工作 a) 一台计算机(是否支持intel-VT或AMD-V均可) 注:支持intel-VT或AMD-V技术可以实现全虚拟化(full virtualization),不支持的话 ...
- opencv 全志_移植opencv人脸识别到全志A10开发板上 +linux3.0内核
移植opencv人脸识别 libz: zlib-1.2.3 libjpeg: jpegsrc.v6b libpng: libpng-1.2.18 libyasm: yasm-0.7. ...
- linux 内存管理 代码,《LINUX3.0内核源代码分析》第四章:内存管理(3)
1.1.1.1快速分配流程 /** *遍历管理区列表,分配一个页面. *gfp_mask:分配标志. *nodemask:在哪些节点中进行分配,一般未指定. *order:分配的页面数量为2^orde ...
- Linux驱动开发学习笔记【12】:Linux自带LED灯驱动
目录 一.内核自带LED驱动使能 二.内核自带LED驱动分析 三.内核自带LED驱动使用 一.内核自带LED驱动使能 在Linux内核中,已经自带了LED灯的驱动程序,使用的就是platform平台驱 ...
最新文章
- SAP PI 适配器引擎
- OpenAI 发布通用人工智能研究纲领:以全人类的名义承诺
- numpy.core.multiarray failed to import
- 强软弱虚引用,只有体会过了,才能记住
- 百度开源分布式id生成器uid-generator源码剖析
- stm32编译时报错 ..........ER_IROM1: File exists 的问题
- 【教程】Linux下MySQL 8.0安装配置
- 日常生活小技巧 --惠普战66三代 重装系统
- 惊了!Chrome浏览器竟然自带的一款恐龙游戏【免下载】
- NodeJS(express)连接、封装操作MySQL
- springboot 增加prometeus监控
- 域渗透基础之环境搭建(单域到组件域林)
- BCP timeout prevention - 每秒刷新一次 Fiori
- .NET下使用HTTP请求的正确姿势
- java -super关键字
- word总页数不包含封面_Word技巧:除去封面后,总页码减1是如何设置的?
- 让机器耳濡目染:MIT提出跨模态机器学习模型
- 【机器学习】基于生成对抗网络的黑白图片上色
- 读书笔记-哈佛大学极简经济学2
- js 跳转到指定位置 高德地图_第三方高德地图Javascript API
热门文章
- mysql能否在手机端运行_在手机上安装linux并部署mysql,jupyter用于数据探索
- Vue 父子组件双向绑定传值
- 微信小程序入门三: 简易form、本地存储
- Linux 系统应用编程——网络编程(基础篇)
- [Oracle]使用非滚动游标
- $.ajax注册表单
- Linux 驱动编译报错:error: macro __DATE__ might prevent reproducible builds [-Werror=date-time]
- [react] react中调用setState会更新的生命周期有哪几个?
- 前端学习(3288):react hook state-hook
- 前端学习(2872):Vue路由权限『前后端全解析』3