Thread: [tuxdroid-user] Tuxdroid ans slug (NSLU2)
Status: Beta
Brought to you by:
ks156
From: Philippe T. <ph...@te...> - 2007-04-17 22:08:07
|
Hi all, I got my NSLU2 yesterday so I couldn't resist. (http://en.wikipedia.org/wiki/NSLU2 if you don't know what's about) First I installed Debian on it this evening. Then I tried the various tuxdroid bits. Here are the very first conclusions: * compiling tuxdaemon *OK* * running tuxdaemon *FAIL* o USB part seems ok (displays tux events properly) but not TCP part, seems not to be listening on port * compiling tuxup *OK* * compiling dfu-programmer *OK* * compiling svncrev *OK* * compiling tuxcore tuxaudio *OK* * flashing tuxcore.hex tuxcore.eep tuxaudio.hex tuxaudio.eep *OK* * sound *PARTLY* o ALSA and OSS-emulation layers are up o tests with mpg321 and aplay: the sound is quite hashed and lot of "alsa underrun" msgs, slightly better results through oss than alsa o recording at 8000 Hz mono is very poor (played on host) o playing at 8000 Hz mono is poor (recorded on host) o madplay -b8 -R8000 ...mp3 is correct Note that madplay is a fixed point mp3 player. So we can compile and flash the tux, try to get audio running better and we definitively need to work on the daemon part. Of course I couldn't try the tts daemon. BTW does Acapela allow you to compile on ARM with your current agreements and does it support fixed point mode? Phil |
From: xAD <xa...@xb...> - 2007-04-17 23:42:30
|
Hi all, I'm David , i have received today the TuxDroid .. i'm a developer and i love it ;-D My photo of the tux: http://www.tuxisalive.com/author/xad this is a fix for email and clock gui , both apps crash (on_bt_cancel_clicked and window1_destroy) if used with the latest SVN code (tuxdaemon) fix for both : cut out: tux.disconnect_from_daemon() and paste: tux.destroy() - this is a easy script for run tuxTTSdaemon and TuxDaemon via /etc/init.d/ (Debian) TUXTTSDAEMON: #! /bin/sh DAEMON=/usr/local/bin/tuxttsdaemon NAME=tttsdaemon DESC="TuxDroid TTS Daemon" . /lib/lsb/init-functions test -x $DAEMON || exit 0 case "$1" in start) $DAEMON -d ;; stop) killproc $DAEMON ;; reload|force-reload|restart) killproc $DAEMON sleep 1 $DAEMON -d ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|reload| force-reload}" >&2 retval=2 ;; esac exit $retval TUXDAEMON: #! /bin/sh DAEMON=/usr/local/bin/tuxdaemon NAME=tdaemon DESC="TuxDroid Daemon" . /lib/lsb/init-functions test -x $DAEMON || exit 0 case "$1" in start) $DAEMON -d ;; stop) killall -q -9 $DAEMON ;; reload|force-reload|restart) killall -q -9 $DAEMON sleep 1 $DAEMON -d ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|reload| force-reload}" >&2 retval=2 ;; esac exit $retval |
From: xAD <xa...@xb...> - 2007-04-18 15:51:58
|
Yes, AVRUsb, i have used a Vendor-ID/Product-ID only for personal use, this is only a prototype ;-D AVRUsb: http://www.obdev.at/products/avrusb/index.html but you know it. On Wed, 2007-04-18 at 16:51 +0200, David Bourgeois wrote: > On Wed, 18 Apr 2007 14:36:18 +0200, xAD <xa...@xb...> wrote: > > > I have made a simple Power Switch via USB (i have used the open-source > > usb lib for Atmel) and with Perl GTK i test the gui for debugging. > > You mean the software USB implementation? > > > > > > > - About Email/Clock Interface without the fix the apps freez ;-D i > > looking for a SVN commit. > > It's been fixed, I guess they'll update svn tomorrow. > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ tux-droid-user mailing list tux...@li... https://lists.sourceforge.net/lists/listinfo/tux-droid-user |
From: David B. <da...@ja...> - 2007-04-18 18:07:02
|
On Wed, 18 Apr 2007 17:51:41 +0200, xAD <xa...@xb...> wrote: > Yes, AVRUsb, i have used a Vendor-ID/Product-ID only for personal use, > this is only a prototype ;-D > > AVRUsb: http://www.obdev.at/products/avrusb/index.html > > but you know it. Yes I found these software implementations around 2 years ago thinking we could use that for tux but I didn't know anything about USB at that time (still don't know much but have a better feeling). There was the Igor version and a C version ongoing which is probably the current AVR-USB. They improved the website though :-) We finally choosed the AT89C5130 as it was cheap and could support USB in hardware. But now there are a few cheap USB AVR recently released (AT90USB82 AT90USB162) which look interesting. david |
From: Florent T. <ft...@gm...> - 2007-04-18 08:43:09
|
Thanks for your report! Glad to see that most of it is working... I'm adding it ot the wiki NAS article. > * running tuxdaemon *FAIL* > o USB part seems ok (displays tux events properly) but not TCP > part, seems not to be listening on port Could you please give an strace output? > * compiling tuxup *OK* > * compiling dfu-programmer *OK* > * compiling svncrev *OK* > * compiling tuxcore tuxaudio *OK* > * flashing tuxcore.hex tuxcore.eep tuxaudio.hex tuxaudio.eep *OK* Well, that you can always do on your destkop... > * sound *PARTLY* > o ALSA and OSS-emulation layers are up > o tests with mpg321 and aplay: the sound is quite hashed and > lot of "alsa underrun" msgs, slightly better results through > oss than alsa > o recording at 8000 Hz mono is very poor (played on host) > o playing at 8000 Hz mono is poor (recorded on host) > o madplay -b8 -R8000 ...mp3 is correct > > Note that madplay is a fixed point mp3 player. Aow, i guess this will be the hard part :( |
From: Philippe T. <ph...@te...> - 2007-04-18 20:56:56
|
> Could you please give an strace output? > Here is an attempt to make a diff with the laptop + slug - laptop Big diffs: much more mprotect calls, pthreads seem different (and ps ax shows me the 4 "threads" on the slug) +mprotect(0x400b6000, 32392, PROT_NONE) = 0 +mprotect(0x400c2000, 29828, PROT_NONE) = 0 -open("/lib/tls/i686/cmov/libpthread.so.0", O_RDONLY) = 3 +open("/lib/libpthread.so.0", O_RDONLY) = 3 +mprotect(0x400d9000, 306432, PROT_NONE) = 0 +mprotect(0x4012a000, 36064, PROT_NONE) = 0 -open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3 +open("/lib/libc.so.6", O_RDONLY) = 3 +mprotect(0x4023a000, 50820, PROT_NONE) = 0 -open("/lib/tls/i686/cmov/librt.so.1", O_RDONLY) = 3 +open("/lib/librt.so.1", O_RDONLY) = 3 +mprotect(0x4024e000, 77416, PROT_NONE) = 0 -set_thread_area({entry_number:-1 -> 6, base_addr:0xb7d2fba0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 -set_tid_address(0xb7d2fbe8) = 5845 +mprotect(0x40241000, 8192, PROT_READ) = 0 +mprotect(0x400e0000, 4096, PROT_READ) = 0 +mprotect(0x4001c000, 4096, PROT_READ) = 0 -uname({sys="Linux", node="mercure", ...}) = 0 +setrlimit(RLIMIT_STACK, {rlim_cur=2044*1024, rlim_max=RLIM_INFINITY}) = 0 +getpid() = 2234 +rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0 +rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0 +getpid() = 2234 -mmap2(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb752d000 -mprotect(0xb752d000, 4096, PROT_NONE) = 0 -clone(child_stack=0xb7d2d4c4, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID|CLONE_DETACHED, parent_tidptr=0xb7d2dbf8, {entry_number:6, base_addr:0xb7d2dbb0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, child_tidptr=0xb7d2dbf8) = 5846 -mmap2(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6d2c000 -mprotect(0xb6d2c000, 4096, PROT_NONE) = 0 -clone(child_stack=0xb752c4c4, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID|CLONE_DETACHED, parent_tidptr=0xb752cbf8, {entry_number:6, base_addr:0xb752cbb0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, child_tidptr=0xb752cbf8) = 5847 +sched_get_priority_max(SCHED_OTHER) = 0 +sched_get_priority_min(SCHED_OTHER) = 0 +clone(child_stack=0x1dff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 2235 +write(4, "\330\244\1@\5\0\0\0\324*\2@\221\2\0\0\264H\2@\0\0\0\0\270"..., 148) = 148 +rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 +write(4, "`\22\16@\0\0\0\0t\375\260\276\270\243\6@ \264\1\0\0\0\0"..., 148) = 148 +rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 +rt_sigsuspend([] <unfinished ...> +--- SIGRTMIN (Unknown signal 32) @ 0 (0) --- +<... rt_sigsuspend resumed> ) = 32 +sigreturn() = ? (mask now [QUIT TRAP ABRT FPE USR2 TERM CONT SYS]) +sched_get_priority_max(SCHED_OTHER) = 0 +sched_get_priority_min(SCHED_OTHER) = 0 +rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 +write(4, "`\22\16@\0\0\0\0t\375\260\276\270\243\6@\310\250\1\0\0"..., 148) = 148 +rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 +rt_sigsuspend([] <unfinished ...> +--- SIGRTMIN (Unknown signal 32) @ 0 (0) --- +<... rt_sigsuspend resumed> ) = 32 +sigreturn() = ? (mask now [QUIT TRAP ABRT FPE USR2 TERM CONT SYS]) +pipe([5, 6]) = 0 -[{fd=3, events=POLLIN}], 1, -1) = -1 EINTR (Interrupted system call) ---- SIGRT_1 (Unknown signal 33) @ 0 (0) --- -setgid32(65534) = 0 -futex(0xb7d2d3c0, FUTEX_WAKE, 1) = 1 -rt_sigreturn(0x8052310) = -1 EINTR (Interrupted system call) ---- SIGRT_1 (Unknown signal 33) @ 0 (0) --- -setuid32(65534) = 0 -futex(0xb7d2d3c0, FUTEX_WAKE, 1) = 1 -rt_sigreturn(0x8052310) = -1 EINTR (Interrupted system call) -poll(usb_os_init: Found USB VFS at /dev/bus/usb Full strace: execve("/usr/local/bin/tuxdaemon", ["tuxdaemon"], [/* 12 vars */]) = 0 uname({sys="Linux", node="LKG63472F", ...}) = 0 brk(0) = 0x19000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=14761, ...}) = 0 mmap2(NULL, 14761, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40016000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/usr/lib/libglib-2.0.so.0", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\354\317\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=622556, ...}) = 0 mmap2(NULL, 654984, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4001e000 mprotect(0x400b6000, 32392, PROT_NONE) = 0 mmap2(0x400bd000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x97) = 0x400bd000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/usr/lib/libgthread-2.0.so.0", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\210\21\0"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=14532, ...}) = 0 mmap2(NULL, 46212, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x400be000 mprotect(0x400c2000, 29828, PROT_NONE) = 0 mmap2(0x400c9000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3) = 0x400c9000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/libpthread.so.0", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\260=\0\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=92378, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001a000 mmap2(NULL, 367872, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x400ca000 mprotect(0x400d9000, 306432, PROT_NONE) = 0 mmap2(0x400e0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe) = 0x400e0000 mmap2(0x400e2000, 269568, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x400e2000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/libusb-0.1.so.4", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0h\22\0\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=28892, ...}) = 0 mmap2(NULL, 60640, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x40124000 mprotect(0x4012a000, 36064, PROT_NONE) = 0 mmap2(0x40131000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5) = 0x40131000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0HO\1\0004"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1091040, ...}) = 0 mmap2(NULL, 1128068, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x40133000 mprotect(0x4023a000, 50820, PROT_NONE) = 0 mmap2(0x40241000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x106) = 0x40241000 mmap2(0x40244000, 9860, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40244000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/librt.so.1", O_RDONLY) = 3 read(3, "\177ELF\1\1\1a\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0000\35\0\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=30548, ...}) = 0 mmap2(NULL, 106088, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x40247000 mprotect(0x4024e000, 77416, PROT_NONE) = 0 mmap2(0x40255000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6) = 0x40255000 mmap2(0x40257000, 40552, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40257000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001b000 mprotect(0x40255000, 4096, PROT_READ) = 0 mprotect(0x40241000, 8192, PROT_READ) = 0 mprotect(0x400e0000, 4096, PROT_READ) = 0 mprotect(0x4001c000, 4096, PROT_READ) = 0 munmap(0x40016000, 14761) = 0 getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0 setrlimit(RLIMIT_STACK, {rlim_cur=2044*1024, rlim_max=RLIM_INFINITY}) = 0 getpid() = 2234 rt_sigaction(SIGRTMIN, {0x400d1e98, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0 rt_sigaction(SIGRT_1, {0x400d1b1c, [RTMIN], 0x4000000 /* SA_??? */}, NULL, 8) = 0 rt_sigaction(SIGRT_2, {0x400d1894, [], 0x4000000 /* SA_??? */}, NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0 rt_sigaction(SIGINT, {0x400d6898, [INT], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGKILL, {0x400d6898, [KILL], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = -1 EINVAL (Invalid argument) brk(0) = 0x19000 brk(0x3a000) = 0x3a000 open("/var/run/tuxdaemon.pid", O_RDONLY) = -1 ENOENT (No such file or directory) open("/var/run/tuxdaemon.pid", O_RDWR|O_CREAT|O_TRUNC, 0644) = 3 fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR) fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40016000 _llseek(3, 0, [0], SEEK_CUR) = 0 flock(3, LOCK_EX|LOCK_NB) = 0 getpid() = 2234 write(3, "2234\n", 5) = 5 flock(3, LOCK_UN) = 0 close(3) = 0 chown32("/var/run/tuxdaemon.pid", 65534, 65534) = 0 fstat64(1, {st_mode=S_IFREG|0644, st_size=6108, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000 write(2, "usb_set_debug: Setting debugging"..., 49usb_set_debug: Setting debugging level to 1 (on) ) = 49 open("/dev/bus/usb", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3 fstat64(3, {st_mode=S_IFDIR|0755, st_size=100, ...}) = 0 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 getdents64(3, /* 5 entries */, 4096) = 120 close(3) = 0 write(2, "usb_os_init: Found USB VFS at /d"..., 43usb_os_init: Found USB VFS at /dev/bus/usb ) = 43 sched_getscheduler(2234) = 0 (SCHED_OTHER) sched_getparam(2234, { 0 }) = 0 sched_get_priority_min(SCHED_OTHER) = 0 sched_get_priority_max(SCHED_OTHER) = 0 sched_get_priority_max(SCHED_OTHER) = 0 gettimeofday({1176925211, 226099}, NULL) = 0 open("/usr/lib/charset.alias", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory) open("/usr/share/locale/locale.alias", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=2582, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40018000 read(3, "# Locale name alias data base.\n#"..., 4096) = 2582 read(3, "", 4096) = 0 close(3) = 0 munmap(0x40018000, 4096) = 0 sched_get_priority_max(SCHED_OTHER) = 0 sched_get_priority_min(SCHED_OTHER) = 0 pipe([3, 4]) = 0 clone(child_stack=0x1dff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 2235 write(4, "\330\244\1@\5\0\0\0\324*\2@\221\2\0\0\264H\2@\0\0\0\0\270"..., 148) = 148 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 write(4, "`\22\16@\0\0\0\0t\375\260\276\270\243\6@ \264\1\0\0\0\0"..., 148) = 148 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 rt_sigsuspend([] <unfinished ...> --- SIGRTMIN (Unknown signal 32) @ 0 (0) --- <... rt_sigsuspend resumed> ) = 32 sigreturn() = ? (mask now [QUIT TRAP ABRT FPE USR2 TERM CONT SYS]) sched_get_priority_max(SCHED_OTHER) = 0 sched_get_priority_min(SCHED_OTHER) = 0 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 write(4, "`\22\16@\0\0\0\0t\375\260\276\270\243\6@\310\250\1\0\0"..., 148) = 148 rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0 rt_sigsuspend([] <unfinished ...> --- SIGRTMIN (Unknown signal 32) @ 0 (0) --- <... rt_sigsuspend resumed> ) = 32 sigreturn() = ? (mask now [QUIT TRAP ABRT FPE USR2 TERM CONT SYS]) pipe([5, 6]) = 0 poll(usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 usb_os_init: Found USB VFS at /dev/bus/usb skipping descriptor 0x25 skipping descriptor 0x25 skipping descriptor 0x25 <unfinished ...> Could not delete PID file |
From: Philippe T. <ph...@te...> - 2007-04-18 21:35:06
|
> Big diffs: much more mprotect calls, pthreads seem different (and ps ax > shows me the 4 "threads" on the slug) > Mmm seems this has to to with pthreads. I commented out the setuid() setgid() and now the tcp part starts too. I can connect from python but I cannot do anything there and even not ctrl-c to quit. From daemon logs I can see many client 0 connected client 0 connected I've to kill -9 python The script I tried: #!/usr/bin/python import sys sys.path.append('/opt/tuxdroid/api/python') from tux import * tux.cmd.leds_blink(2,10) tux.sys.wait(1) Now on daemon side. Ctrl-c on the daemon gives: Daemon closed Daemon closed Could not delete PID file Daemon closed Could not delete PID file Yep looks like we go 3 times through some code where we should go only once. When the daemon was running ps ax gave me root 2467 0.3 3.2 6776 960 pts/1 S+ 23:30 0:00 ./tuxdaemon root 2468 0.0 3.2 6776 960 pts/1 S+ 23:30 0:00 ./tuxdaemon root 2469 0.0 3.2 6776 960 pts/1 S+ 23:30 0:00 ./tuxdaemon root 2470 0.0 3.2 6776 960 pts/1 S+ 23:30 0:00 ./tuxdaemon And with the setuid() code: root 2476 2.0 3.1 6776 940 pts/1 S+ 23:31 0:00 tuxdaemon root 2477 0.0 3.1 6776 940 pts/1 S+ 23:31 0:00 tuxdaemon nobody 2478 0.0 3.1 6776 940 pts/1 S+ 23:31 0:00 tuxdaemon root 2479 0.0 3.1 6776 940 pts/1 S+ 23:31 0:00 tuxdaemon So it's like there is no pthreads, only forked processes and with setuid, only the current process changes actually. And when closing, all forked processes go through the same duplicated code from main(). Phil |
From: Philippe T. <ph...@te...> - 2007-04-18 22:42:11
|
> So it's like there is no pthreads, only forked processes > One more tip: HOST: ps -eLf|grep tux UID PID PPID LWP C NLWP STIME TTY TIME CMD nobody 8386 1 8386 0 3 00:30 ? 00:00:00 /opt/tuxdroid/bin/tuxdaemo nobody 8386 1 8387 0 3 00:30 ? 00:00:00 /opt/tuxdroid/bin/tuxdaemo nobody 8386 1 8388 0 3 00:30 ? 00:00:00 /opt/tuxdroid/bin/tuxdaemo NSLU2: ps -eLf|grep tux UID PID PPID LWP C NLWP STIME TTY TIME CMD root 3677 2311 3677 1 1 00:37 pts/1 00:00:00 ./tuxdaemon root 3678 3677 3678 0 1 00:37 pts/1 00:00:00 ./tuxdaemon root 3679 3678 3679 1 1 00:37 pts/1 00:00:00 ./tuxdaemon root 3680 3678 3680 0 1 00:37 pts/1 00:00:00 ./tuxdaemon Look at PID column, looks like 3 threads on the i686 and 4 processes on the XScale. Phil |
From: Florent V. <fvu...@gm...> - 2007-04-24 09:49:11
|
Hi, I tried to compile the tux daemon for OpenWrt (for an Asus WL-500GD) and I also faced a problem: The available glib is an old one (version 1.2), so the references to libgthread don't work. I tried to compile a more recent one (v 2.0.7), but it requires several other libraries -- libiconv, gettext... -- which are not provided with uClibC. This was quite laborious, so I gave up and started looking at the deamon's source code. Now, as Philippe says: >Apparently all pthreads are handled through processes on ARM, >I've seen the same with apache2-mpm-worker where what should be >plenty of threads becoming standalone processes. >Probably a kind of thread emulation if the ARM arch doesn't allow >native support of threads, no idea... I don't have much experience with threads, but I am wondering: would it be interesting to create a specific version of tuxdaemon for embedded systems, based on forks and no longer on threads ? It might be handled more reliably, be easier to compile using the different SDKs and should not require lots of modifications. Any advice ? Cheers, -- Florent Vuillemin |
From: David B. <da...@ja...> - 2007-04-24 12:09:23
|
On Tue, 24 Apr 2007 13:19:53 +0200, Philippe Teuwen <ph...@te...> wrote: > What I propose as first step is to use only the libpthread > from the GNU libc (glibc, pkg libc6) and to not mix them with the > libgthread > from the Gnome lib (glib, pkg libglib2.0). > So stick only to the pthread_xxx() fcts described in glibc-doc. > > uClibc should support pthreads properly: > > config UCLIBC_HAS_THREADS > bool "POSIX Threading Support" > depends on !HAS_NO_THREADS > default y In this case, will threads still be converted into different processes? From what I found, this was the behavior with 2.4 kernels: "linux-2.4 didn't have threads; libraries for theading forked processes to do the trick." But DebianSlug uses 2.6.18. Anyway using pthreads instead of gthreads is a first good step for ARM. |
From: Philippe T. <ph...@te...> - 2007-04-24 17:24:47
|
Hi all, Ok part of the mystery is solved: On my PC:# getconf GNU_LIBPTHREAD_VERSION NPTL 2.3.6 cf http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library On NSLU2:# getconf GNU_LIBPTHREAD_VERSION linuxthreads-0.10 So the Etch for ARM seems to still use linuxthreads and from the above webpage: "The LinuxThreads <http://en.wikipedia.org/wiki/LinuxThreads> project used this system call to simulate thread support entirely in userland. Unfortunately, it had a number of issues with true POSIX compliance, particularly in the areas of signal handling, scheduling, and inter-process synchronization primitives." Immediate conclusion is that tuxdaemon *requires* NPTL to work properly. From some posts on the net, NPTL will be available on ARM with glibc 2.5 and on Debian apparently libc6 unstable is 2.5-3 I could give a try but the I've basically to upgrade all the distro to unstable and i'll do that only if I can mirror the current setup to another external harddrive. Meanwhile we've now a better idea of what to do: read linuxthread faqs to understand te limitations and make tuxdaemon backward compatible with the slightly less POSIX compliant linuxthreads. cf http://pauillac.inria.fr/~xleroy/linuxthreads/ and its readme and faq Phil |
From: David B. <da...@ja...> - 2007-04-18 11:00:03
|
On Wed, 18 Apr 2007 01:42:19 +0200, xAD <xa...@xb...> wrote: > Hi all, > > I'm David , i have received today the TuxDroid .. i'm a developer and i > love it ;-D Welcome David, I've seen from the pictures on your blog that you're playing with USB stuff. Just for fun? What CPU do you use? > this is a fix for email and clock gui , both apps crash A new release of tuxsetup will be done very shortly now I guess (normally tomorrow) and as they spent quite some time testing it, I hope they found this already though there's nothing committed on svn. > this is a easy script for run tuxTTSdaemon and TuxDaemon > via /etc/init.d/ We also recently added support for udev to launch the 2 daemons when the dongle is plugged and the daemons exit themselves when the dongle is removed. (There's some information in the bug tracker about this and it should be part of the next tuxsetup release. I'll also add some information in the manual install notes.) Cheers, david - the other one ;-) |
From: David B. <da...@ja...> - 2007-04-18 12:01:41
|
Mine is still in the box, no time to play with it :( |
From: David B. <da...@ja...> - 2007-04-18 14:51:23
|
On Wed, 18 Apr 2007 14:36:18 +0200, xAD <xa...@xb...> wrote: > I have made a simple Power Switch via USB (i have used the open-source > usb lib for Atmel) and with Perl GTK i test the gui for debugging. You mean the software USB implementation? > > > - About Email/Clock Interface without the fix the apps freez ;-D i > looking for a SVN commit. It's been fixed, I guess they'll update svn tomorrow. |
From: xAD <xa...@xb...> - 2007-04-18 23:44:47
|
Hi all, I don't know if is a fault of my TuxDroid or a bug in the Core Firmware of the Tux. Reset your tux with a poweroff / poweron. Beak are closed Eyes are open with both LED on. Open the Tux Droid Interface (gtdi.py) now Close the Eyes (eyes and led's are off) OK. now Open the Beak .. and voila' the Eyes they are opened without LED on. David. |
From: David B. <da...@ja...> - 2007-04-19 05:57:52
|
On Thu, 19 Apr 2007 01:44:37 +0200, xAD <xa...@xb...> wrote: > Hi all, > > I don't know if is a fault of my TuxDroid or a bug in the Core Firmware > of the Tux. > > Reset your tux with a poweroff / poweron. > > Beak are closed > Eyes are open with both LED on. > > Open the Tux Droid Interface (gtdi.py) > > now Close the Eyes (eyes and led's are off) OK. > > now Open the Beak .. and voila' the Eyes they are opened without LED on. > > David. > There's been a post about this a few days ago, probably just before you joined the ML: http://article.gmane.org/gmane.comp.hardware.tuxdroid.user/184 The fact that the eyes open when you move the mouth is not a bug, just a limitation of the mechanics in the gearbox. david p.s. when you do a reply and change the subject to create a new post that has nothing to do with the former one, you don't create a new thread for your new subject, it's just threaded with the old subject (in Gmane and most mail clients), the good practice is to create (compose) a new message when you start a new topic, unless you explicitely want to continue the thread with a new subject of course. |
From: xAD <xa...@xb...> - 2007-04-19 09:50:53
|
OK David, you are right. thanks. On Thu, 2007-04-19 at 07:57 +0200, David Bourgeois wrote: > On Thu, 19 Apr 2007 01:44:37 +0200, xAD <xa...@xb...> wrote: > > > Hi all, > > > > I don't know if is a fault of my TuxDroid or a bug in the Core Firmware > > of the Tux. > > > > Reset your tux with a poweroff / poweron. > > > > Beak are closed > > Eyes are open with both LED on. > > > > Open the Tux Droid Interface (gtdi.py) > > > > now Close the Eyes (eyes and led's are off) OK. > > > > now Open the Beak .. and voila' the Eyes they are opened without LED on. > > > > David. > > > > There's been a post about this a few days ago, probably just before you > joined the ML: > http://article.gmane.org/gmane.comp.hardware.tuxdroid.user/184 > > The fact that the eyes open when you move the mouth is not a bug, just a > limitation of the mechanics in the gearbox. > > david > > p.s. when you do a reply and change the subject to create a new post that > has nothing to do with the former one, you don't create a new thread for > your new subject, it's just threaded with the old subject (in Gmane and > most mail clients), the good practice is to create (compose) a new message > when you start a new topic, unless you explicitely want to continue the > thread with a new subject of course. > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ tux-droid-user mailing list tux...@li... https://lists.sourceforge.net/lists/listinfo/tux-droid-user |
From: Philippe T. <ph...@te...> - 2007-04-23 22:11:25
|
Hi all, Some more progress with the last trunk on ARM. What I changed to get sth working up to now: Commented out pthread_cond_wait() in the tcp_server otherwise it never starts. Apparently all pthreads are handled through processes on ARM, I've seen the same with apache2-mpm-worker where what should be plenty of threads becoming standalone processes. Probably a kind of thread emulation if the ARM arch doesn't allow native support of threads, no idea... I ran the tuxdaemon on the slug and took control with gtdi from my laptop. 1st problem: I can do some actions but after a while the gui "slows down", feedback takes always 1 second when I do sth and the actions aren't performed anymore. If I restart the daemon the gui recovers very nicely till the next freeze, probably always on the daemon side. 2nd problem: After one of those freezes when I ctrl-c the daemon, I got a segfault, unfortunately I didn't get any code file, ulimit coresize was =0 and since I enabled it I could not reproduce the crash. So just a little tip for all devels here: be sure to set ulimit -c to some high value to be able to capture any segfault when it happens ;-) 3rd problem: Still as before, it looks like all forked processes (those which should be threads) still go through the main code at exit time and I get: Daemon closed Daemon closed Could not delete PID file Daemon closed Could not delete PID file -> one of the three already deleted the PID file and the 2 other complain that they cannot do it themselves. Looks like all processes herited the signal(SIGINT, on_close_daemon); and that an exit() has no effect on the other processes, which seems logical but different from what threads do. So I don't know how to maintain the thread architecture in a way compatible with ARM. 4th problem: As I said I could not use yet pthread_cond_wait() 5th problem: As I said in a previous mail only one of the processes actually changed its UID to nobody while on i686 the three threads are actually changed to UID nobody Phil |
From: David B. <da...@ja...> - 2007-04-24 10:25:11
|
> Now, as Philippe says: >> Apparently all pthreads are handled through processes on ARM, >> I've seen the same with apache2-mpm-worker where what should be >> plenty of threads becoming standalone processes. >> Probably a kind of thread emulation if the ARM arch doesn't allow >> native support of threads, no idea... > > I don't have much experience with threads, but I am wondering: would > it be interesting to create a specific version of tuxdaemon for > embedded systems, based on forks and no longer on threads ? It might > be handled more reliably, be easier to compile using the different > SDKs and should not require lots of modifications. > > Any advice ? I guess we need the following structure in any case: USB <-> status structure and command stack <-> TCP/IP I don't have any experience with threads and TCP/IP but can't we do without threads at all? Isn't select() supposed to call a function when data is available? Now we could also use pipes to communicate with a separate USB process as the data can be kept as raw there. |
From: Damien <ror...@gm...> - 2007-04-25 06:15:59
|
Le mardi 24 avril 2007, "David Bourgeois" <da...@ja...> a =C3=A9crit : [...] > I guess we need the following structure in any case: > USB <-> status structure and command stack <-> TCP/IP >=20 > I don't have any experience with threads and TCP/IP but can't we do =20 > without threads at all? Isn't select() supposed to call a function > when data is available? Yes, it is generally possible to do without threads and use instead select() along with a (more or less implicit) state machine. Haven't looked how well/easily this could be done with the current daemon, though. > Now we could also use pipes to communicate with a separate USB > process as the data can be kept as raw there. We should avoid having several processes on setups where it is not necessary. Damien |
From: Philippe T. <ph...@te...> - 2007-04-24 11:20:08
|
> The available glib is an old one (version 1.2), so the references to > libgthread don't work. I tried to compile a more recent one (v 2.0.7), > but it requires several other libraries -- libiconv, gettext... -- > which are not provided with uClibC. > What I propose as first step is to use only the libpthread from the GNU libc (glibc, pkg libc6) and to not mix them with the libgthread from the Gnome lib (glib, pkg libglib2.0). So stick only to the pthread_xxx() fcts described in glibc-doc. uClibc should support pthreads properly: config UCLIBC_HAS_THREADS bool "POSIX Threading Support" depends on !HAS_NO_THREADS default y Then, if setuid still does not setup all processes properly after that, I will reorder the operations: - (in main) USB enumerate - USB open handler - setuid nobody - create USB and TCP threads So setuid is before creating threads/forking and I don't need TCP server to wait anymore. And we'll see what is still broken. Phil |