【发布时间】:2015-02-09 00:34:31
【问题描述】:
我正在使用带有 raspi 的“adafruitts”触摸屏来控制 USB 外围设备。
完整的 raspbian 内核需要永远启动(50 秒),其中一部分是由于触摸屏驱动程序加载(通过 modprobe/udev)和初始化。
在启动的前 20-30 秒内,显示器未加载,因此为空白。我需要它是一个用户友好的项目,每次打开时不能空白 30 秒,所以我使用 buildroot 构建了一个内置触摸屏驱动程序的小内核。 (总的来说,我在 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 一半:
}, {
/* 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/matchbox 桌面显示桌面,但我无法获得触摸屏部分工作(当我触摸屏幕时光标不会移动)。
不知何故,我必须将触摸屏的触摸部分绑定到 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 和鼠标。 event0 和 event1 与连接的键盘相关联(根据引导日志),我没有连接鼠标。输入中应该还有其他项目吗?
如果已加载触摸屏输入设备,如何为 tinyX 指定正确的驱动程序?
谢谢
【问题讨论】:
-
我比较了来自内置驱动程序和模块加载驱动程序的系统日志。模块加载的驱动程序没有:
标签: linux raspbian touchscreen buildroot