ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2010年7月29日 星期四

bluetooth, bluez.. linux

Linux 上的 bluetooth stack 有 affix 和 BlueZ
BlueZ 的說明有 (http://people.csail.mit.edu/albert/bluez-intro/index.html):An Introduction to Bluetooth Programming
要把 Linux 當作是 Headset。和 手機連線。有一篇 bluetooth-alsa (http://bluetooth-alsa.sourceforge.net/)說要去看 Gammu (http://wammu.eu/) 原文章還說明一下 Audio 的部份: audio 傳輸分成 同步和非同步 兩種 (其實說是 即時 與 非即時 比較適當)
  • 同步 (SCO ) : 像手機和 headset 之間,一旦傳送就要馬上送到,以免有延遲。就是同步。
  • 非同步 (A2DP) : 像播放音樂,開始播到真正放出可以有一段 delay.(?)
SCO 是由 HCI 提供。
A2DP 是上層的 profile。
--- 這一段好像寫錯,A2DP 也是用 SCO 才對。
關於把Linux當作 headset 和 phone 連接,可能可以參考 TomTom 的作法。 (http://www.tomtom.com/page.php?Page=gpl#tomtom)

每個 bluetooth device 都有一個 unique 的 48 bit address. 每個 bluetooth device 可以為自己取一個名字 (my phone, nb...),名字可能會跟其他人一樣。 把L2CAP 比作 UDP,把 RFCOMM 比作 TCP。 大概是因為 layer 也一樣吧。 RFCOMM 的底層是 L2CAP。但是實際上 L2CAP 本身就可以做到 connection 和 connection-less 兩種方式。 跟 TCP/IP 一樣,決定 protocol 後,還要只定 port number。但是 Bluetooth 的名字不叫 port。叫 multiplexer。數字也有限制。 和 TCP/IP 不一樣,port 不是寫死的,是在通訊時決定。利用 SDP (Service Discovering Protocol) 決定。 SDP 也是建在 L2CAP 之上。 用 PyBluez 寫 bluetooth code 很方便,像:import bluetooth nearby_device = bluetooth_discover_devices()就可以把所有scan 到的 bluetooth device address 放到 nearby_device 李

2010年7月27日 星期二

GLUT - some bookmarks

就 follow 這一篇 http://www.cosc.brocku.ca/Offerings/3P98/course/OpenGL/3P98Examples/glut_tutorial/glutsetup.html 要 install 的 package 是:
libglut3-dev
同時會 isntall freeglut3 libfreeimage-dev 是這個 example (load.c) 要用的,跟 glut 無關。
這一篇 http://freeglut.sourceforge.net/ 有說,因為GLUT 年久失修,最初的license 又不准人修改。所以才有 freeglut 實做,現在 freeglut已經取代 glut 了。
另一個 example : http://ubuntuforums.org/showthread.php?t=375425 就不需要 freeimage-dev 了。 另外,這是 Windows, VS 的 Glut 安裝說明l: http://www.cosc.brocku.ca/Offerings/3P98/course/OpenGL/3P98Examples/GettingStarted/msvcnetglut.html 有一個用 OpenGL 寫的 UI library (Widget?) : GLUI. 這一篇是 windows , linux 的相關說明 http://web.engr.oregonstate.edu/~mjb/cs553/gettingglut.html 這一篇是介紹(有圖)http://www.cs.unc.edu/~rademach/glui/
這是 OpenGL 的電子書 http://fly.srk.fer.hr/~unreal/theredbook/
這是某大學的 computer graphic課程,有列一堆 image, opengl 的 link http://www.cosc.brocku.ca/Offerings/3P98/course/

2010年7月26日 星期一

run uml in gdb

就先build uml..是follow : http://user-mode-linux.sourceforge.net/source.html
大概是:
所有make command (make defconfig, make menuconfig, make) 都要加上 ARCH=um
kernel config 要開啟 kernel-hacking : Compile with debug info 和 compile with frame-buffer-support (default也是開啟的)

然後 build rootfs,這部份 follow 一般用 busybox 產生 rootfs 的 instruction就可以。
我是用上一篇,kgdb 的 busybox.

用 gdb run uml linux. 重點是:
  • linux 的 rootfs 需要用 gdb -x command 的方式,讓 gdb 把 rootfs parameter 傳給 linux
  • uml linux 會產生 SIGSEGV signal ,要請 gdb bypass -- 這個也一樣放到 -x command 的 command script 中
command 這個檔的內容:
set args ubd0=/home/charles-chang/uml/linux-2.6.34.1/busybox.img
handle SIGUSR1 pass nostop noprint
handle SIGSEGV pass nostop noprint

gdb 啟動後,可以先設break pont 到 start_kernel break start_kernel 然後就可以開始 run: run 然後就會停在 start_kernel。用 continue 繼續...然後會停在一個signal 的地方...再用 continue 繼續就可以...

這個就是 gdb log: charles-chang@rbtlegacy:~/uml/linux-2.6.34.1$ gdb -x ./command ./linux GNU gdb 6.8-debian Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i486-linux-gnu"... (gdb) run Starting program: /home/charles-chang/uml/linux-2.6.34.1/linux ubd0=/home/charles-chang/uml/linux-2.6.34.1/busybox.img Locating the bottom of the address space ... 0x1000 Locating the top of the address space ... 0xc0000000 Core dump limits : soft - 0 hard - NONE Checking that ptrace can change system call numbers...OK Checking syscall emulation patch for ptrace...OK Checking advanced syscall emulation patch for ptrace...OK Checking for tmpfs mount on /dev/shm...OK Checking PROT_EXEC mmap in /dev/shm/...OK Checking for the skas3 patch in the host: - /proc/mm...not found: No such file or directory - PTRACE_FAULTINFO...not found - PTRACE_LDT...not found UML running in SKAS0 mode Linux version 2.6.34.1 (charles-chang@rbtlegacy) (gcc version 4.3.2 (Debian 4.3.2-1.1) ) #1 Mon Jul 26 15:42:19 CST 2010 Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128 Kernel command line: ubd0=/home/charles-chang/uml/linux-2.6.34.1/busybox.img root=98:0 PID hash table entries: 128 (order: -3, 512 bytes) Dentry cache hash table entries: 4096 (order: 2, 16384 bytes) Inode-cache hash table entries: 2048 (order: 1, 8192 bytes) Memory: 30048k available Hierarchical RCU implementation. RCU-based detection of stalled CPUs is enabled. NR_IRQS:15 Calibrating delay loop... 1900.54 BogoMIPS (lpj=9502720) Mount-cache hash table entries: 512 Checking for host processor cmov support...Yes Checking that host ptys support output SIGIO...Yes Checking that host ptys support SIGIO on close...No, enabling workaround Using 2.6 host AIO NET: Registered protocol family 16 bio: create slab at 0 Switching to clocksource itimer NET: Registered protocol family 2 IP route cache hash table entries: 1024 (order: 0, 4096 bytes) TCP established hash table entries: 1024 (order: 1, 8192 bytes) TCP bind hash table entries: 1024 (order: 0, 4096 bytes) TCP: Hash tables configured (established 1024 bind 1024) TCP reno registered UDP hash table entries: 256 (order: 0, 4096 bytes) UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) NET: Registered protocol family 1 IRQ 9/mconsole: IRQF_DISABLED is not guaranteed on shared IRQs mconsole (version 2) initialized on /home/charles-chang/.uml/oJVcbD/mconsole Checking host MADV_REMOVE support...OK Host TLS support detected Detected host type: i386 (GDT indexes 6 to 9) VFS: Disk quotas dquot_6.5.2 Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) msgmni has been set to 58 io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) TCP cubic registered NET: Registered protocol family 17 Initialized stdio console driver Console initialized on /dev/tty0 console [tty0] enabled Initializing software serial port version 1 console [mc-1] enabled ubda: unknown partition table IRQ 3/console-write: IRQF_DISABLED is not guaranteed on shared IRQs IRQ 2/console: IRQF_DISABLED is not guaranteed on shared IRQs IRQ 10/winch: IRQF_DISABLED is not guaranteed on shared IRQs kjournald starting. Commit interval 5 seconds EXT3-fs (ubda): mounted filesystem with writeback data mode VFS: Mounted root (ext3 filesystem) readonly on device 98:0. line_ioctl: tty0: unknown ioctl: 0x5600 [New LWP 32568] Executing new program: /proc/32568/exe /proc/32568/exe: Permission denied. (gdb) run The program being debugged has been started already. Start it from the beginning? (y or n) n Program not restarted. (gdb) c Continuing. IRQ 13/xterm: IRQF_DISABLED is not guaranteed on shared IRQs Processing /etc/profile... Done # INFO: RCU detected CPU 0 stall (t=2009 jiffies) IRQ 2/console: IRQF_DISABLED is not guaranteed on shared IRQs IRQ 3/console-write: IRQF_DISABLED is not guaranteed on shared IRQs IRQ 10/winch: IRQF_DISABLED is not guaranteed on shared IRQs INFO: RCU detected CPU 0 stall (t=1715 jiffies)
另外這一頁 http://user-mode-linux.sourceforge.net/old/debugging.html 有 configure uml kernel 另一種 mode 配合 gdb debug...下次試試.

原來這一篇 http://web2.clarkson.edu/class/cs644/kernel/setup/uml/gdb_uml.html 就有講在 gdb 下用 command 指定 root image 的方法...
# gdb ./linux (gdb) handle SIGSEGV pass nostop noprint Signal Stop Print Pass to program Description SIGSEGV No No Yes Segmentation fault (gdb) handle SIGUSR1 pass nostop noprint Signal Stop Print Pass to program Description SIGUSR1 No No Yes User defined signal 1 (gdb) r ubd0=/home/charles-chang/uml/linux-2.6.34.1/busybox.img 這一篇有exmple : 教你怎麼trace do_fork..

2010年7月23日 星期五

follow -- trace kernel with kgdb and qemu..

就照著 使用KGDB调试内核 on QEMU(一步一步跟我学) 的內容作.. --果然要用 sda
qemu -kernel ./bzImage -append "root=/dev/sda kgdboc=ttyS0,115200 kgdbwait"
-boot c -hda ./busybox.img -k en-us -serial tcp::4321,server
這樣啟動qemu 後,會等待 gdb 的連線,所以啟動 gdb 後,下一次
target remote localhost:4321
qemu 就會繼續下去.,,load linux kernel,然後 kernel 啟動後,又會等 gdb connect,所以gdb 又要下一次
target remote localhost:4321
然後 kernel 會繼續 run 到 break,等 gdb 下command..
用 ubuntu 啟動 qemu 會停在:
trying to set up timer as Virtual Wire IRQ
加上 -no-acpi 就可以。
這個寫錯 用 qemu load 的 kernel 是 bzImage 用 gdb local 的 symbol 是 vmlinux QEMU 啟動後會等 gdb.. QEMU waiting for connection on: tcp:0.0.0.0:4321,server 這時候 gdb 要下 target remote localhost:4321 連上後ˋ, qemu 會繼續 run.... 然後 kernel 開始 run .. 一直到.. kgdb : waiting for connection from remote gdb.. 這ˊ時候 gdb 會顯示: Remote debugging using localhost:4321 kgdb_breakpoint (new_kgdb_io_ops=0xc073d7f0) at kernel/kgdb.c:1721 1721 wmb(); /* Sync point after breakpoint */ (gdb) 等 gdb 的 command。 這樣就可以設 breakpoint,然後用 c 繼續 run 了

2010年7月21日 星期三

uboot\doc\README.command: uboot 利用 link config 一塊區域,放置所有 (.u_boot_cmd) mark 的變數。 所有command 都藉由以 (__u_boot_cmd) 為 prefix 而可以被放置在 這個區域。 這樣,uboot code 就可以到那個區域(位址)列出所有的command

標籤

網誌存檔