TinyX 使用内置的 fbtft 触摸屏驱动程序显示显示,但触摸不起作用



我正在使用带有raspi的"adafruitts"触摸屏来控制USB外围设备。

完整的 raspbian 内核需要很长时间才能启动(50 秒(,其中一部分是由于触摸屏驱动程序加载(通过 modprobe/udev(和初始化。

在启动的前 20-30 秒内,显示屏未加载,因此为空白。 我需要这是一个用户友好的项目,每次打开时不能空白 30 秒,所以我使用 buildroot 构建了一个内置触摸屏驱动程序的小内核。 (我正处于构建根和内核构建的陡峭学习曲线上(。

显示驱动程序已fbtft_device.c修补,以包含adafruitts显示。 此补丁定义了"触摸"的一半:

                /* Touch device spi-half of adafruit touchscreen */
            .name = "adafruitts",
            .spi = &(struct spi_board_info) {
                    .modalias = "stmpe610",
                    .max_speed_hz = 500000,
                    .mode = SPI_MODE_0,
                    .chip_select = 1,
                    .platform_data = &(struct stmpe_platform_data) {
                            .blocks = STMPE_BLOCK_TOUCHSCREEN | STMPE_BLOCK_GPIO,
                            .irq_over_gpio = 1,
                            .irq_gpio = 24,
                            .irq_trigger = IRQF_TRIGGER_FALLING,
                            .irq_base = GPIO_IRQ_START + GPIO_IRQS,
                            .ts = &(struct stmpe_ts_platform_data) {
                                    .sample_time = 4,
                                    .mod_12b = 1,
                                    .ref_sel = 0,
                                    .adc_freq = 2,
                                    .ave_ctrl = 3,
                                    .touch_det_delay = 4,
                                    .settling = 2,
                                    .fraction_z = 7,
                                    .i_drive = 0,
                            },
                    }
            },
            .is_support = 1,
            .gpio_settings = (struct gpio_setting []) {
                    {
                            .gpio = 24,
                            .pull = pull_up,
                    }
            },
            .gpio_num_settings = 1,
    }, 

和液晶屏的一半:

        }, {
            /* LCD component of adafruit touchscreen */
            .name = "adafruitts",
            .spi = &(struct spi_board_info) {
                    .modalias = "fb_ili9340",
                    .max_speed_hz = 16000000,
                    .mode = SPI_MODE_0,
                    .chip_select = 0,
                    .platform_data = &(struct fbtft_platform_data) {
                            .display = {
                                    .buswidth = 8,
                                    .backlight = 1,
                            },
                            .bgr = true,
                            .gpios = (const struct fbtft_gpio []) {
                                    { "dc", 25 },
                                    {},
                            },
                    }
            }
    }, {

通过包括:

fbtft_device.name=adafruitts

在 cmdline 中.txt对于引导加载程序,我已经让系统的显示一半工作(它在 ~ 5 秒:)启动(,tinyX/火柴盒桌面显示桌面,但我无法让触摸屏部分工作(当我触摸尖叫时光标不会移动(。

不知何故,我必须将触摸屏的触摸部分绑定到 tinyX,但我无法弄清楚如何做到这一点。

我尝试在启动tinyX时指定键盘(和鼠标(:

X -keybd smpte610 (for example)

但 X 报告找不到驱动程序。

如何验证触摸屏输入设备是否已成功加载?

引导日志包含以下有关fbtft_device的消息:

fbtft_device:  SPI devices registered:
fbtft_device:      spidev spi0.0 500kHz 8 bits mode=0x00
fbtft_device:      spidev spi0.1 500kHz 8 bits mode=0x00
fbtft_device:  'fb' Platform devices registered:
fbtft_device:      bcm2708_fb id=-1 pdata? no
fbtft_device: Deleting spi0.1 (spi0.1)
fbtft_device: Looking at item 0
fbtft_device: Setting pin 24 to 2
stmpe-spi: probe of spi0.1 failed with error -22
fbtft_device: Deleting spi0.0 (spi0.0)
Console: switching to colour frame buffer device 40x30
graphics fb0: fb_ili9340 frame buffer, 320x240, 150 KiB video memory, 16 KiB buffer memory, fps=20, spi0.0 at 16 MHz
fbtft_device:  GPIOS used by 'adafruitts':
fbtft_device:    'dc' = GPIO25
fbtft_device:  SPI devices registered:
fbtft_device:      stmpe610 spi0.1 48000kHz 8 bits mode=0x00
fbtft_device:      fb_ili9340 spi0.0 16000kHz 8 bits mode=0x00
kgdb: Registered I/O driver kgdboc.

kgdb 消息是否与fbtft_device或其他内容相关联?

如果我查看/dev/input,我会看到:event0、event1 和 mousee。 event0 和 event1 与连接的键盘相关联(根据启动日志(,我没有连接鼠标。 输入中是否应该有其他项目?

如果加载了触摸屏输入设备,如何为 tinyX 指定正确的驱动程序?

谢谢

我学到了什么:

通过将我的modprobe/udev/module加载内核中的引导消息与快速内置内核进行比较,它显示:

stmpe-spi: probe of spi0.1 failed with error -22

是一件"坏"事。

成功的驱动程序加载会说(如下所示(:

bcm2708_spi.0: registered child spi0.0

然后以后:

input: stmpe-ts as /devices/virtual/input/input0

我通过对内核配置文件进行这些更改来修复"探测"故障。 (抱歉,我不想包含整个内容,因此这些是从我遇到问题到驱动程序根据系统日志成功加载时的变化(:

< Touch Did Not respond              > Touch Did respond
                                     > CONFIG_INPUT_FF_MEMLESS=y
< CONFIG_INPUT_POLLDEV=m             > CONFIG_INPUT_POLLDEV=y
< CONFIG_INPUT_EVDEV=m               > CONFIG_INPUT_EVDEV=y
< CONFIG_TOUCHSCREEN_STMPE=m         > CONFIG_TOUCHSCREEN_STMPE=y
                                     > CONFIG_KEYBOARD_STMPE=y
< CONFIG_SERIO=m                     > CONFIG_SERIO_SERPORT=m
                                     > CONFIG_SPI_DEBUG=y
< CONFIG_SPI_SPIDEV=y
                                     > CONFIG_SPI_GPIO=y

进行这些更改的主要目标是尝试确保依赖驱动程序也是内置的,并且我启用了调试。 (其中一些是由menuconfig神奇地设置的,这与buildroot的"非默认"值不同,所以差异是 - 不同(

使用此配置,我现在有事件0、事件 1、事件 2、鼠标和鼠标 0。系统日志显示事件 1 和事件 2 与我连接的 USB 键盘相关联。 我没有附加额外的鼠标。

每当我触摸显示器时,我都可以使用"evtest"查看来自/dev/input/event0 的事件。 evtest'ing/dev/input/mouse0 抛出"设备不合适的 ioctl">

我使用以下命令重新启动了X(tinyX(:

X -mouse mouse,,/dev/input/mouse0

和触摸工作,但触摸轴从显示轴旋转。

我无法找到在tinyX中解决此问题的方法,因此我将采用完整的Xorg实现。

确保您已在tinyx(BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE_EVDEV(中启用了evdev输入支持,并使用hw/kdrive/src/kinput.c中指定的语法:

/* * 您可以使用以下内容调用您的 kdriver 服务器: * $ ./hw/kdrive/yourserver/X :1 -mouse evdev,,device=/dev/input/event4 -keybd * evdev,,device=/dev/input/event1,xkbmodel=abnt2,xkblayout=br */

最新更新