linux 驱动移植_免驱动led灯好吗

linux 驱动移植_免驱动led灯好吗通过前两篇文章的介绍,我们已经把linux内核移植到了tiny210上,但是看到的现象都是通过超级终端来观察的,下面了,我们介绍一下led灯的移植,给大家一个更直观的感受。这篇文章主要的内容如下:1.对平台总线的简介;2.led驱动的移植。一.平台总线   首先介绍一下,我们为什么要简单介绍一下平台总线呢?因为我们是做led驱动的移植,而不是自己编写led的驱动代码。我们要移植

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

通过前两篇文章的介绍,我们已经把linux内核移植到了tiny210上,但是看到的现象都是通过超级终端来观察的,下面了,我们介绍一下led灯的移植,给大家一个更直观的感受。这篇文章主要的内容如下:

1.对平台总线的简介;

2.led驱动的移植。

一.平台总线

     首先介绍一下,我们为什么要简单介绍一下平台总线呢?因为我们是做led驱动的移植,而不是自己编写led的驱动代码。我们要移植的代码是linux-3.3.5源代码目录下的driver/leds的leds-gpio.c。不用猜,大家肯定知道,每个电路板的电路都有不同,那怎么才能把一个led灯的驱动程序做成与具体的平台无关呢?这就用到了platform总线模型。整个linux的驱动模型是在2.6的内核当中提出来的,当然platf也是在2.6中诞生的。platform总线是一个虚拟总线,也就是说根本不存在这种总线。在这个虚拟的总线模型里,把总线、设备和驱动是分开的。这样做的好处是,基本上可以保证驱动的设备无关性,也使驱动有更好的移植性。platform总线给设备和驱动的注册提供了载体,一般驱动里面用到的资源都是从注册在platform总线上的设备中获取的,而设备一般就是注册的具体的电路板的资源了。通常来说,总线上会注册多个设备和驱动,那它们怎么区分彼此是对方的菜呢?要不然不就乱套了吗?好吧,注册在platform总线上的匹配方式是通过名字来完成的。好了,就说这么多吧,这样的简介可能让没有接触过设备驱动模型的朋友更好的理解移植的原理吧。

二.led驱动移植

    上面对platform总线模型的简介中,咱们提到了,要移植的源文件的地方,你可以打开看看,这就是一个与具体平台无关的led灯的驱动程序。现在驱动程序有了,platform总线当然是内核自带的,那大家应该明白了吧,咱们的移植就是注册tiny210电路板上的具体设备了,也就是具体的资源。那问题就来了,咱们到什么地方去注册呢?其实这也是移植led驱动的核心。好吧,不兜圈子了,注册的地方就是linux-3.3.5目录下的arch/arm/mach-s5pv210/mach-smdkv210.c的文件。打开mach-smdkv210.c这个文件,首先,在头文件的位置加入#include <linux/leds.h>,这个头文件里定义了咱们要移植的驱动文件总用到一下结构体一些变量。然后,在打开的mach-smdkv210.c的文件里加入下面的代码:

static struct gpio_led smdkv210_leds[] = {
	[0]= {
		.name = "LED1",
		.gpio = S5PV210_GPJ2(0),
	},
	[1]= {
		.name = "LED2",
		.gpio = S5PV210_GPJ2(1),
	},
	[2]= {
		.name = "LED3",
		.gpio = S5PV210_GPJ2(2),
	},
	[3]= {
		.name = "LED4",
		.gpio = S5PV210_GPJ2(3),
	},
};
这个结构体定义了,四个led灯在具体电路板上所对应的引脚。
static struct gpio_led_platform_data smdkv210_gpio_led_pdata ={
	.num_leds = ARRAY_SIZE(smdkv210_leds),
	.leds     = smdkv210_leds,
};
这个gpio_led_platform_data这个结构体就是在leds.h文件中定义的,所以如果不加那个头文件,编译是会出错滴。
static struct platform_device smdkv210_device_led ={
	.name   = "leds-gpio",
	.id     = -1,
	.dev    = {
		.platform_data = &smdkv210_gpio_led_pdata,
	}
};

上面platform_device这个结构体是platform总线模型自带的,它表示这是一个platform的设备。看到这个结构体里的.name=”leds-gpio”了吧,这就是上面提到的驱动和设备匹配的名字。现在咱们的led这个设备算是定义好了,但还没注册到platform总线上。地方嘛,在static struct platform_device *smdkv210_devices[] __initdata这个结构体里,看看它里面的内容应该知道怎么注册了吧,对,就是简单地加入一句:

	&smdkv210_device_led,

这就把一个platform类型的led设备注册到platform总线上了。哈哈,现在应该编译一下内核了,要不然内核怎么知道你移植led驱动了,当然了,这得首先配置内核。再次进入linux-3.3.5源文件当中,用make menuconfig命令开始咱们的配置界面。进入配置界面后,选择Device Driver——>这个选项,咱们移植的是驱动嘛。在这个选项下面选择LED Support——–>这个选项,实际图如下:

linux 驱动移植_免驱动led灯好吗

当然了,肯定要选中图中高亮的部分了,选中之后就进入了下一级目录,实际如下图:

linux 驱动移植_免驱动led灯好吗

再次选中高亮部分,然后选中下图中的高亮的选项,具体如下:

linux 驱动移植_免驱动led灯好吗

现在依次退出具体配置界面,然后保存后,重新make uImage,然拷贝到tftpboot目录下,在通过上一篇文章中的下载方式,下载到tiny210中,哈哈,应该看到四个灯都亮了吧,恭喜,恭喜,你完成了led灯驱动的移植。通过这篇对led驱动的移植,对移植有了一个大概得了解,下一篇咱们介绍一下移植DM9000到tiny210,come on!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189766.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决哈希冲突(四种方法)[通俗易懂]

    解决哈希冲突(四种方法)[通俗易懂]一、了解哈希表及哈希冲突哈希表:是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。简单来说哈希表(key-value)之间存在一个映射关系,是键值对的关系,一个键对应一个值。哈希冲突:当两个不同的数经过哈希函数计算后得到了同一个结果,即他们会被映射到哈希表的同一个位置时,即称为发生了哈希冲突。简单来说就是哈希函数算出来的地址被别的元素占用了。二、解决哈希冲突办法1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。举例:就是当我们去教室上课..

    2022年6月17日
    28
  • 模电总结(一)「建议收藏」

    模电总结(一)「建议收藏」本总结用于个人复习、考研需要,也可供其他小伙伴学习、借鉴。基于GAY电期末引导,先粗略基于gay电期末写五篇。所以只为建立系统,对细节并没有深挖。第一章半导体及其器件个人概述——这一章我们学什么呢?学半导体的基本知识,pn结是什么,二极管的构造与特性,如何分析二极管的基本电路。(具体如下)但是,因为这里是现初步建立体系,我们在这讨论的是一些枝干,对部分知识忽略。gay电在此考的是半导体的基本知识和pn结和二极管基本电路。这一章我们就讲这个。首先,我们要了解半导体器件是什么?..

    2022年6月20日
    27
  • 一元线性回归-最小二乘法推导过程

    一元线性回归-最小二乘法推导过程设一元线性回归方程为,数据样本点为,要想使这n个样本点落在一元线性回归方程附近,不妨设误差为,使得没一个样本点落在一元线性回归方程上,因此有恒成立,所以回归直线应满足的条件是:实际值与回归估计值之间的误差平方和最小,即:此时令,原问题就转换成求解二元函数极小值问题,分别对求偏导:令上两式等于零,即最终求出两个数值,一元线性回归方程也就拟合出来了。…

    2022年5月17日
    61
  • CTR预估算法之FM, FFM, DeepFM及实践

    CTR预估算法之FM, FFM, DeepFM及实践目录目录CTR预估综述FactorizationMachines(FM)算法原理代码实现Field-awareFactorizationMachines(FFM)算法原理代码实现DeepFM算法原理代码实现参考文献CTR预估综述点击率(Clickthroughrate)是点击特定链接的用户与查看页面,电子邮…

    2022年6月12日
    40
  • 计算机组成原理期末复习90分以上选择填空大题总考点

    同学,你好!若觉得有用请点赞或关注~以后会发布更多有用的内容。2019-07-24更新:插入了一张“高分喷雾”。20…

    2022年4月6日
    39
  • 让引擎不再是你的唯一,对百度再见

    让引擎不再是你的唯一,对百度再见

    2022年1月12日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号