通过前两篇文章的介绍,我们已经把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-------->这个选项,实际图如下:

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

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

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

LINUX移植——LED驱动移植相关推荐

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

    **************************************************************************************************** ...

  2. Linux WIFI模块驱动移植

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 请问有知道atheros ...

  3. 嵌入式linux usb wifi驱动移植

    文档名称:嵌入式linux usb wifi驱动移植 版本历史 版本号        时间        内容 v1.0b001        2012-6-18        初始版本,介绍在嵌入式 ...

  4. linux ec20 usb驱动移植,linux下EC20 4G模块驱动移植

    之前有移植过ME909s MU609,主要工作就是把4G模块当做USB设备,挂载在linux上,驱动移植主要是能够让板子识别到模块,并产生SUB多个虚拟的节点,用于操作模块,拨号上网 关于内核的配置, ...

  5. Linux Charger IC 驱动移植总结

    Linux Charger IC 驱动移植总结 文章目录 Linux Charger IC 驱动移植总结 1 设备树的基本知识 设备树的概念 设备树的基本结构 compatible属性 举个栗子 2 ...

  6. linux内核led驱动开发,从Linux内核LED驱动来理解字符设备驱动开发流程

    目录 博客说明 开发环境 1. Linux字符设备驱动的组成 1.1 字符设备驱动模块加载与卸载函数 1.2 字符设备驱动的file_operations 结构体中的成员函数 2. 字符设备驱动--设 ...

  7. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  8. linux不同内核驱动移植问题,基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)...

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  9. STM32MP157 Linux系统移植开发篇17:Linux内核摄像头驱动移植

    本文章为<STM32MP157 Linux系统移植开发篇>系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板).stm32mp157是ARM双核,2 ...

  10. linux字符驱动向vxworks移植,VxWorks驱动移植至SylixOS总结

    本文档描述了将VxWorks中的驱动源码快速移植至SylixOS中的方法,使用时需要结合SylixOS中的VxWorks兼容层实现. 1. 驱动注册与初始化 1.1 VxWorks中驱动注册与初始化 ...

最新文章

  1. 【Shell】fix 1032报错信息的脚本
  2. 一个功能函数所具备的要素
  3. Vue中使用vue-video-player和videojs-flash插件实现播放rtmp视频文件流
  4. python 中的序列
  5. DPDK:不仅是加速
  6. linux cent os7,Cent OS 7系统目录结构
  7. html鼠标感应图片,jQuery实现的感应鼠标悬停图片色彩渐显效果
  8. 【人工智能项目】LSTM实现电影评论情感分类实验
  9. 人工智能(机器学习)学习路线
  10. prop-types详解
  11. DK装备获取线路总结
  12. 二叉树:二叉树视频笔记
  13. 新锐房地产销售管理系统 (部分流程)技术解析(一)用三层架构搭建项目
  14. 2019/12/31 教养
  15. Nature子刊:灵活的语音皮质编码可增强与任务相关的声学信息的神经处理
  16. 中资电信银行股将成市场旗手
  17. 程序员的健康问题终于有救了,有个资深程序员写了本《程序员健康指南》!
  18. javascript简繁转换函数
  19. python云计算主要是干嘛的_阿里巴巴python云计算是干什么的
  20. 云数据中心与传统数据中心

热门文章

  1. sql2003安装sql2005企业版
  2. Amlogic Linux系列(三) 视频解码分析
  3. 打造自己的Android源码学习环境之一:序
  4. Android超级好看的动态登陆界面(附有详细代码)
  5. mysql客户端介绍
  6. (android开发http拦截)fiddler2抓包工具
  7. 《SQL必知必会阅读思维导图》PART1
  8. 佳能ir2002g无法扫描到计算机,佳能ir2002g扫描驱动
  9. everyting真是一款很好的搜索软件, 免费软件
  10. Python设计模式:抽象工厂模式