环境搭建
- 平台
韦东山100ask imax6ull pro && 大象嵌入式开发板 - Build Root
使用Build root编译image,具体配置可参考《嵌入式Linux应用开发完全手册-IMX6ULL开发板(从零移植篇-预览版)-V0.1.pdf》,使用buildroot后仅需要配置menuconfig即可自动编译出完整的镜像,而且各种安装包也可以在output/build
目录下拿到,有了它就不需要再为编译各种库坑了。我的理解是,解决环境问题其实并不能帮助我们成长太多,而这又会占用很多时间。成熟的公司,比如芯片原厂都会有很成熟的编译环境,也会有专门的部门来负责各种系统集成。各个驱动模块的team只需要解决好自己模块内的事情,这样总体效率就很高。 - QT Creator
我使用的方法是直接在Windows端安装QT Creator,建立工程写代码,然后再将项目文件拷贝到ubuntu Linux下做交叉编译,具体操作见:Linux驱动-基于Buildroot构建系统镜像后实现基于QT项目开发之环境配置
LED驱动程序
固定的驱动框架编写代码即可,根据设备资源的获取方法的差异导致有几种不同的驱动框架,驱动部分都一样(file_operation实现等)
基于总线设备模型
01_all_series_quickstart
|----| 05_嵌入式 Linux 驱动开发基础知识\source
|----| |----| 02_led_drv\04_led_drv_template_bus_dev_drv
基于设备树
01_all_series_quickstart
|----| 05_嵌入式 Linux 驱动开发基础知识\source
|----| |----| 02_led_drv\05_led_drv_template_device_tree
编写代码
代码地址: git clone https://gitee.com/runluo/Linux_QT_LED_Demo.git
首先设计UI,QT Create会自动转化为cpp文件,然后再加入 你自己的业务逻辑 到 QT项目中。
我很简单的画了一个界面用来控制LED灯的亮灭
在工程项目中添加一个名为 led 的类,新增 led.c 和 led.h 文件
这里有一个问题就是驱动程序使用 C 语言,而在UI中是 CPP 语言,我们要有方法来将C函数嵌入到CPP语言中。
首先看led.h
中,使用extern “C” {C文件头}
再看在led.c
中,在C语言的前面加上 ::
UI中的业务逻辑
当点击 RatioButton 后,LED灯亮灭
在槽函数中,调用我们之前创建 Led 类中的函数,进而通过ioctl 来调用驱动程序。
这个小Demo搭起来之后,其实可以继续完善,做出很多好玩的初学Demo。文章来源:https://www.toymoban.com/news/detail-647536.html
测试
在板子上安装LED驱动程序后,执行应用程序即可
insmod led_driver.ko
./TEST
点击UI界面可以看到板子上的LED0灯有亮灭文章来源地址https://www.toymoban.com/news/detail-647536.html
到了这里,关于Linux驱动-基于QT控制LED灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!