我使用Buildroot构建了一个小型linux。我已经包含了用于嵌入式的QT和对framebuffer设备的支持,但是我无法从其中运行Qt示例。我想在没有X服务器的情况下运行GUI。
在运行/usr/share/qt/examples/qws/framebuffer/framebuffer -qws时,我会得到以下错误:
Error: cannot open framebuffer device: No such file or directory.ls /dev/fb*的输出是:
/dev/fb0 /dev/fb1 /dev/fb2 /dev/fb3strace输出:
execve("./framebuffer", ["./framebuffer", "-qws"], [/* 16 vars */]) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_UNINITIALIZED, -1, 0) = 0xb7701000
open("/lib/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/libstdc++.so.6", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=751308, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_UNINITIALIZED, -1, 0) = 0xb7700000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0004o\4\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 778240, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7642000
mmap2(0xb7642000, 729051, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb7642000
mmap2(0xb76f4000, 20864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xb2000) = 0xb76f4000
mmap2(0xb76fa000, 22428, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb76fa000
close(3) = 0
munmap(0xb7700000, 4096) = 0
open("/lib/libm.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=45864, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_UNINITIALIZED, -1, 0) = 0xb7700000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 \33\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 53248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7635000
mmap2(0xb7635000, 43784, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb7635000
mmap2(0xb7640000, 4100, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xa000) = 0xb7640000
close(3) = 0
munmap(0xb7700000, 4096) = 0
open("/lib/libgcc_s.so.1", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=86600, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_UNINITIALIZED, -1, 0) = 0xb7700000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0t\36\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 90112, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb761f000
mmap2(0xb761f000, 85004, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb761f000
mmap2(0xb7634000, 3536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x14000) = 0xb7634000
close(3) = 0
munmap(0xb7700000, 4096) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=392428, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_UNINITIALIZED, -1, 0) = 0xb7700000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0\256\0\0004\0\0\0"..., 4096) = 4096
mmap2(NULL, 413696, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb75ba000
mmap2(0xb75ba000, 385628, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xb75ba000
mmap2(0xb7619000, 4868, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x5e000) = 0xb7619000
mmap2(0xb761b000, 15928, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb761b000
close(3) = 0
munmap(0xb7700000, 4096) = 0
open("/lib/libm.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=45864, ...}) = 0
close(3) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=392428, ...}) = 0
close(3) = 0
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=25296, ...}) = 0
open("/lib/libgcc_s.so.1", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=86600, ...}) = 0
close(3) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=392428, ...}) = 0
close(3) = 0
open("/lib/libc.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=392428, ...}) = 0
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_UNINITIALIZED, -1, 0) = 0xb7700000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb77006b0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb76f4000, 16384, PROT_READ) = 0
mprotect(0xb7640000, 4096, PROT_READ) = 0
mprotect(0xb7619000, 4096, PROT_READ) = 0
mprotect(0xb7708000, 4096, PROT_READ) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
brk(0) = 0x9093000
brk(0x9094000) = 0x9094000
open("-qws", O_RDWR) = -1 ENOENT (No such file or directory)
write(2, "Error: cannot open framebuffer d"..., 37Error: cannot open framebuffer device) = 37
write(2, ": ", 2: ) = 2
write(2, "No such file or directory", 25No such file or directory) = 25
write(2, "\n", 1
) = 1
exit_group(1) = ?
+++ exited with 1 +++(不知道这意味着什么)
如果我在以下情况下运行计算器示例:
usr/share/qt/examples/widgets/calculator -qws
QLock::QLock: Cannot create semaphore /tmp/qtembedded-0/QtEmbedded-0 'd' (38, Function not implemented)
Cannot get display lock
Aborted发布于 2013-11-12 13:27:46
我似乎没有在内核中包含System 选项。我找到了这里。
发布于 2013-11-12 08:01:39
由于strace的输出,我发现了一个问题:您错误地在-和qws之间放了一个空格:
- qws应该是
-qws发布于 2013-11-12 10:20:17
strace显示该程序试图打开“-qws”框架缓冲区设备,这显然是无效的:
open("-qws", O_RDWR) = -1 ENOENT (No such file or directory)
write(2, "Error: cannot open framebuffer d"..., 37Error: cannot open framebuffer device) = 37你为什么要那样运行这个程序?你试过不带参数地运行吗?简单地看一下源代码,就会发现它应该是这样工作的。程序中默认的框架缓冲区是/dev/fb0。
https://stackoverflow.com/questions/19923741
复制相似问题