概述
深入理解FBTFT--编写自己的FB驱动
- 文章适用人群
- 写前分析
- 开始
- 结尾
文章适用人群
本系列适合有一定内核基础,并向要往内核层发展的人阅读,应用层开发和0基础的人群不适合阅读本篇文章。本篇在Linux统一设备模型中,属于Device的教程。
写前分析
我们在不看源码前简单分析一下,FBTFT设备模块涉及到哪些组成部分。
- TBTFT控制显示屏主要通过SPI协议,应该会涉及到SPI设备的注册
- 显示屏像素之类的信息
设备模块比较简单,只负责添加一些描述数据传给驱动,另外在总线上申请资源。
开始
fbtft_device.c的逻辑。
我们改一下fbtft的源码,在device里只负责向总线申请硬件资源,而不在deivce里填写自己的platform_data,因为支持的显示屏有很多种,这些显示屏的信息完全可以放在各自的driver中进行设置。
自己的fboled_device.c
弃坑了,想清楚了一个道理,现在的能力写不了框架,等之后再来填坑。
#define pr_fmt(fmt) "fboled_device: " fmt
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/gpio/consumer.h>
#include <linux/spi/spi.h>
#include <video/mipi_display.h>
#include "fboled.h"
//deivice负责设置SPI的四根引脚,其他的GPIO(电源,DC)在Driver里设置
static struct spi_device *spi_device;
static struct spi_board_info *spi;
static void fboled_device_spi_delete(struct spi_master *master, unsigned int cs)
{
struct device *dev;
char str[32];
snprintf(str, sizeof(str), "%s.%u", dev_name(&master->dev), cs);
dev = bus_find_device_by_name(&spi_bus_type, NULL, str);
if (dev) {
dev_info(dev, "Deleting %sn", str);
device_del(dev);
}
}
static int fboled_device_spi_device_register(struct spi_board_info *spi)
{
struct spi_master *master;
master = spi_busnum_to_master(spi->bus_num);
if (!master) {
pr_err("spi_busnum_to_master(%d) returned NULLn",
spi->bus_num);
return -EINVAL;
}
/* make sure it's available */
fboled_device_spi_delete(master, spi->chip_select);
spi_device = spi_new_device(master, spi);
put_device(&master->dev);
if (!spi_device) {
dev_err(&master->dev, "spi_new_device() returned NULLn");
return -EPERM;
}
return 0;
}
static int fboled_Register_SpiDevice(void)
{
spi->modalias="Test";
spi->max_speed_hz="100000000";//100M
spi->mode=SPI_MODE_0;
spi->platform_data=NULL;
spi->chip_select=1;
spi->bus_num = 0;
return fboled_device_spi_device_register(spi);
}
static int __init fboled_device_init(void)
{
spi=kzalloc(sizeof(*spi),GFP_KERNEL);
fboled_Register_SpiDevice();
int ret = 0;
}
static void __exit fboled_device_exit(void)
{
device_del(&spi_device->dev);
kfree(spi_device);
}
arch_initcall(fboled_device_init);
module_exit(fboled_device_exit);
MODULE_DESCRIPTION("Add a FB device.Display image or vidieo on the screen");
MODULE_AUTHOR("Boss poipoi");
MODULE_LICENSE("GPL");
填写需要的SPI控制器信息,检测申请的SPI是否被占用,向SPI总线申请这些资源,完成设置等待驱动进行匹配。
结尾
如果你看到了这句话,说明我还没编译测试(x
最后
以上就是整齐帅哥为你收集整理的深入理解FBTFT--编写自己的FB驱动1(Device)文章适用人群写前分析开始结尾的全部内容,希望文章能够帮你解决深入理解FBTFT--编写自己的FB驱动1(Device)文章适用人群写前分析开始结尾所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复