First Computer GTA02 NEO 1973 User Manual openmoko manual 20071224
First International Computer Inc NEO 1973 openmoko manual 20071224
USERS MANUAL
www.openmoko.com OpenMoko Neo1973 user manual www.openmoko.com Federal Communication Commission Interference Statement This equipment has been tested and found to comply with the limits for a Class B digital device, pursuant to Part 15 of the FCC Rules. These limits are designed to providereasonable protection against harmful interference in a residential installation. Thisequipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one of the following measures: Reorient or relocate the receiving antenna Increase the separation between the equipment and receiver Connect the equipment into an outlet on a circuit different from that to which the receiver is connected Consult the dealer or an experienced radio/TV technician for help This device complies with Part 15 of the FCC Rules. Operation is subject to the following two conditions: (1) This device may not cause harmful interference, and (2) this device must accept any interference received, including interference that may cause undesired operation. FCC Caution: Any changes or modifications not expressly approved by the party responsible for compliance could void the user’s authority to operate this equipment. IMPORTANT NOTE: FCC Radiation Exposure Statement This equipment complies with FCC radiation exposure limits set forth for an uncontrolled environment. End users must follow the specific operating instructions for satisfying RF exposure compliance. For body worn operation, this phone has been tested and meets the FCC RF exposure guidelines for use with an accessory that contains no metal and the positions the handset a minimum of 1.5 cm from body. Use of other enhancement may not ensure compliance with FCC RF exposure guidelines. www.openmoko.com Chapter 1 Free Your Neo1973 OpenMoko is an Open Source project to create the world's first free mobile phone operating system. The OpenMoko project is a community that anyone can join, and help to design their ideal phone. The Neo1973 from FIC is the first of many phones that OpenMoko will run on. The long term goal of OpenMoko is that phone software will no longer be tied to one phone. You can buy any compatible phone, and install any software over the whole range of phones. If you upgrade your phone, you don't lose the software. Bugs fixed on one phone are fixed on all. Please join us in collaborating on the OpenMoko project through any of the project resources including the OpenMoko wiki. Please see the wiki editing help page for information on making contributions to this wiki. A core team of developers funded by FIC, Inc. leads the project. 1-1 Neo1973 package list All the following information could be found at www.openmoko.org Please go to the web site for most updated information. A Neo1973 standard package including: a. 100 to 220 v adaptor plug b. USB Charger c. USB charger cable d. USB A to mini B cable e. Stylus f. Earphone www.openmoko.com g. Battery h. SD-Card 1-2 Neo1973 GTA01 Specification Name Neo1973 Size 120.7 x 62 x 18.5 mm Weight 135 g Screen 2.8" 480x640 at 285 ppi, maybe multi-touch later Flash 128/256 MB CPU Samsung s3c2442 SoC @ 400 MHz (Source) SDRAM 128MB GSM GSM, GPRS 2.5G (Not EDGE), Bluetooth 2.0 EDR, WiFi 812.11 b/g GPS u-blox GPS System OpenMoko Linux (Source code available) Application Basic u-boot included. Software can be created by normal users. www.openmoko.com Sound Playback and recording, including playback of audio files via GSM and recording/playback of voice calls. 2x1 watt stereo speaker comment on performance, 2.5 mm jack USB Standard USB 1.1 (unpowered), with a Mini-B receptor (can be connected via adapter to both host and client devices) Battery replaceable 1200 mAh battery charged via USB and AKII charger 1-3 Enter Neo 1973 U-Boot menu Please insert the battery into the Neo1973 battery slot, then press Aux key and power key the same time. Then you could enter following u-boot menu. www.openmoko.com After enter u-boot menu, you could use [Aux] key to select the item, and [Power] key for confirm. There should be 5 items by default: 1. Boot: Direct boot 2. Set console to USB: Could use Linux terminal software (like minicom to connect Neo1973) 3. Set console to Serial: Re-Direct terminal output to Neo1973 debug port serial interface. 4. Power off: Power of Neo1973 5. Factory reset: Reset parameter into factory default value. If your Neo1973 already had kernel image or rootfs installed, once you select the boot, system will boot. If your Neo1973 doesn’t contain any kernel image, you will need to use devirginator or DFU-Util to install system and root file system. If you using the minicon or other terminal software like hyperterminal, please using following settings to connect terminal: Speed: 115200, N ,8, 1 Hardware flow control: Off 1-4 Install OpenMoko Kernel image by using DFU 1-4-1 Purpose dfu-util is a program that implements the Host (PC) side of the USB DFU (Universal Serial Bus Device Firmware Upgrade) protocol. www.openmoko.com In the OpenMoko project, we use this program to communicate with our specially enhanced u-boot boot loader, which implements the DFU device side. Using dfu-util and your Neo1973, you can Link* transfer and flash partitions to NAND Flash, such as The Linux kernel The root file system partition The splash screen partition The u-boot environment Last, but not least: The u-boot bootloader itself. transfer anything into Neo1973 RAM this can be used for fast development cycles of low-level code such as kernels without flashing them read out the current NAND partitions this is an easy and efficient way of doing full backups of your phone 1-4-2 Source Code dfu-util can be found at http://svn.openmoko.org/trunk/src/host/dfu-util/ Binary packages will be made available as part of the regular OpenMoko builds 1-4-3 help manu dfu-util - (C) 2007 by OpenMoko Inc. www.openmoko.com This program is Free Software and has ABSOLUTELY NO WARRANTY Usage: dfu-util [options] ... -h --help -V --vers ion -l --list capable USB devices -d --device vendor:product device -c --cfg config_nr device -i --intf intf_nr -a --alt alt_nr Interface -t --transfer-size Transfer -U --upload file -D --download file -R --reset we're finished Print this help mess age Print the vers ion number List the c urrently attac hed DFU Spec ify Vendor/Product ID of DFU Specify the Configuration of DFU Spec ify the DFU Interfac e number Spec ify the Alts eting of the DFU Spec ify the number of bytes per USB Read firmware from device intoWrite firmware from into device Issue USB Reset signalling once 1-4-4 List function Using the --list option, you can list the available DFU capable devices, their configuration, interface and altsettings. Below is an example for a current Neo1973 phone in u-boot Runtime Mode # ./dfu-util --lis t dfu-util - (C) 2007 by OpenMoko Inc. This program is Free Software and has ABSOLUTELY NO WARRANTY Found DFU Runtime: [0x1457:0x5119] devnum=0, cfg=0, intf=2, alt=0, name="USB Device Firmware Upgrade" Below is an example for a current Neo1973 phone in u-boot DFU Mode # ./dfu-util --lis t dfu-util - (C) 2007 by OpenMoko Inc. This program is Free Software and has ABSOLUTELY NO WARRANTY Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=0, name="RAM 0x32000000" Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=1, name="u-boot" www.openmoko.com Found DFU: [0x1457:0x5119] name="u-boot_env" Found DFU: [0x1457:0x5119] name="kernel" Found DFU: [0x1457:0x5119] name="splash" Found DFU: [0x1457:0x5119] name="rootfs" devnum=16, cfg=0, intf=0, alt=2, devnum=16, cfg=0, intf=0, alt=3, devnum=16, cfg=0, intf=0, alt=4, devnum=16, cfg=0, intf=0, alt=5, This shows you six interfaces, all in configuration 0 and interface 0, with altsetting 0...4. The name is currently not yet defined, but will be added to one of the upcoming u-boot releases. The mapping on the Neo1973 is as follows: 0: 1: 2: 3: 4: 5: RAM 'u-boot' partition 'u-boot_env' partition 'kernel' partition 'splash' partition 'rootfs' partition 1-4-5 device function You can specify the USB Vendor and Product ID of the device you want to program: dfu-util --device 0x1457:0x5119 If you only have one standards-compliant DFU device attached to your PC, this is optional. However, as soon as you have multiple DFU devices, dfu-util will detect this and abort, asking you to specify which device it shall use. 1-4-6 transfer-size Specifies the size of each individual USB transfer. If you don't use it, the maximum possible size for your combination of host operating system and USB device is chosen (for optimal performance). 1-4-7 download www.openmoko.com download the given file into the device. 1-4-8 upload upload from the DFU device into the given file[name]. NOTE: Upload support is currently broken Phrasebook There's no full-fledged manual yet. Instead, some examples: Flashing the kernel dfu-util -a 3 -R -D /path/to/uImage Flashing the bootloader dfu-util -a 1 -R -D /path/to/u-boot.bin Copying a kernel into RAM dfu-util -a 0 -R -D /path/to/uImage Once this has finished, the kernel will be available at the default load address of 0x32000000 in Neo1973 RAM. 10 www.openmoko.com Chapter 2 Applications 2-1 Overview This page describes the set of applications being developed by the core set of OpenMoko developers. This is what is intended to be eventually released on the stock firmware of OpenMoko phones (Neo1973 and successors). If the community develops an application of suitable usefulness and quality, it may also be included on stock firmware. Community applications may be found on the Wish List and on projects.openmoko.org Although OpenMoko is designed for smartphones that use a stylus, it would be foolish to expect people to only operate their handsets with stylus. For this reason, some core phone-related applications will be developed with finger (as opposed to stylus navigation) in mind. NOTE: Applications listed on this page are listing in order of priority and by phase. 0th phase is for the developers preview release in March, 1st phase is for late Marc h. 2nd phase is September... when we are ready for mass market appeal. 11 www.openmoko.com 2-1-1 General Principles All modifications are saved instantenously, there should never be a save command. Make sure users can't make interface operation errors, or that the effects are easily reversible, instead of just notifying them of the potential consequences of their actions. When you open a document you should be returned to the place where you were working when you last closed or save it (this is our concept of sessions). Label buttons with adjectives, which describe the state of the object affected Designers should seek an efficient monotonous solution to gain benefits, including ease of learning, simplicity of implementation, minimization of documentation, and lowered maintenance costs. Whenever you find yourself specifying an error message, please stop; then redesign the interface so that the condition that generated the error message doesn't arise. If the user gets no utility from a process, there is no reason to tell them that it is happening. Provide unlimited levels of Undo and Redo whenever possible. Consider adding a Trash or Deleted Items area that has everything the user has deleted. The user’s data is the most important priority. Let’s make it hard for them to lose anything and easy to recover it. 12 www.openmoko.com NOTE: Innovation us ually happens at the bottom. What we need to do is provide consistent ways to develop and deploy appliations. 2-2 OpenMoko Dialer 2-2-1 Overview This article defines the Dialer Application, an application designed for the OpenMoko platform. The Dialer Application handles all call and SMS related interactions. This is a Native Finger-Based application. 2-2-2 Use Cases Here are some possible use cases: I want to be able to dial a number I want to be able to quickly redial a number I want to be able to adjust the volume of both the speaker and microphone while in call 13 www.openmoko.com 2-2-3 Dial Mode 1) Application Title -- Title of this application. 2) Icon / Photo -- Photo of contact (if available) will be displayed if number can be autocompleted. 3) Phone Number -- Phone number is displayed. Larger font is used for first line. After reaching end of first line the entire font size should decrease to allow for two full lines. 4) Autocompleted Tail -- Automatically complete the tail of phone numbers from existing contacts (when matched). This uses the Auto-complete widget. 5) Keypad -- Standard dialing keypad. The '*' key, when pressed quickly, cycles through this list: {*, +, p, w}. 6) Possible Autocompletions -- A list of contacts that can be autcompleted. This list is only as long as the visible screen area permits. (Usually 4-5 contacts). These are buttons that, when pressed, will autocomplete the 14 www.openmoko.com current number string. 7) Delete -- Deletes the last entered digit. 8) History -- Goes to the History mode. 9) Dial -- Dials the entered number string. NOTE: If a PIN is required to access the SIM card, the "Phone number" (3) display will change to enter a PIN. "History" (8) will gray-out and "Dial" (9) will change to "OK." 2-2-3 Incoming Call Mode 1) Call Icon -- Icon representing call type. 2) Icon / Photo -- Photo of contact (if available) will be displayed. 3) Answer -- Answer the incoming call. 4) Title -- Title of this window. 5) Reject -- Rejects call. Returns to last application. 15 www.openmoko.com 6) Caller ID Title -- If contact is stored in the handset, the name will be displayed (Steve in this case). Otherwise display Unknown. Below displays the phone number of the other party. 2-2-3 In Call Mode 1) Call Icon -- Icon representing call type. 2) Icon / Photo -- Photo of contact (if available) will be displayed. 3) Volume control -- Adjust the speaker volume level. While adjusting 5) will display percentage (%) level information 4) Control Button -- This mode only has volume control. Tapping will do nothing. 5) Speaker Phone -- Turns on the speaker phone mode 6) Application Title -- Title of this application. 16 www.openmoko.com 7) DTMF -- Changes to Dial Mode for DTMF support. 8) Hang-up -- Disconnects the current phone call. Returns to Dial Mode. 9) EMPTY -- Nothing for now. (Can be toggle of dictation) 10) Caller ID Title -- If contact is stored in the handset, the name will be displayed (Steve in this case). Otherwise display Unknown. Below displays the phone number of the other party. 11) Talk Time -- Displays call talk time. 2-2-4 Outgoing Call Mode 1) Call Icon -- Icon representing call type. 2) Icon / Photo -- Photo of contact (if available) will be displayed. 3) Speaker -- Turn on speaker phone mode 17 www.openmoko.com 4) Title -- Title of this window. 5) Cancel -- Cancels call. Returns to last application. 6) Caller ID Title -- If contact is stored in the handset, the name will be displayed (Steve in this case). Otherwise display Unknown. Below displays the phone number of the other party. 2-2-5 Connection Error Mode 1) Call Icon -- Icon representing call type. 2) Icon / Photo -- Photo of contact (if available) will be displayed. 3) Redial -- Redials the last number. 4) Error Title -- Title of this error. 5) Cancel -- Cancels call. Returns to last application.. 6) Caller ID Title -- If contact is stored in the handset, the name will be displayed (Steve in this case). Otherwise display Unknown. Below displays the phone number of the other party. 18 www.openmoko.com 2-2-6 Call History Mode 1) Caller ID Title -- If contact is stored in the handset, the name will be displayed. Otherwise display number. An icon will represent the type (incoming, outgoing, missed) of call. 2) List Scroll -- Scrolls through the call history list. While scrolling, 3) will display the current / total item information (for example 2/8). 3) Control Button -- Tapping will change between the following modes: {Call History Mode, Close and returns to Dialer}. 19 www.openmoko.com 4) Call -- Call the current selected number. Grayed-out if number is unknown. 5) Application Title -- Title of this application. 6) SMS -- Send a message to this number. This will open the Messages application with a new (SMS) message. 7) Delete -- Removes this number from the call history list. 8) More Items -- Tap to reveal the next list of items. The second list has the following items: { Save, All Calls, Missed Called, Dialled Calls, Received Calls, Back} 9) List counter -- Displays the current list entry / total list entries. 10) Current List Entry -- The current list entry. The position of the highlight is fixed. Only the text moves up/down with scrolling. User can tap a list item to have this move to center. Also, scrolling effect should ease in. 11) More Items Counter -- Displays the current set / total sets of More Items. NOTE: The call list slides behind the scrolling widget. The scrolling widget and horizontal bar are 80% transparent. 2-3 OpenMoko Main menu 2-3-1 Overview This article defines the Main Menu Application, an application designed for the OpenMoko platform. The Main Menu application provides both a finger-friendly and a stylus-driven interface to lauch all installed applications. Here are some possible use cases: I want to be able to launch an application 20 www.openmoko.com I want to rearrange applications in the menu Activated by pressing the auxilary key. This is the base layout: 1) Section Name -- The name of the current section. 2) List scrolling -- Will scroll through the list of icons. While scrolling, 3) will show how many items exist in this list. 3) Control Button -- Tapping cycles through the following controls {Scroll List Control, Back}. Currently at Scroll List Control. The List is broken up into sections of applications. 21 www.openmoko.com 4) History Applications -- Are the last 3 applications launched. 5) Item / Total -- Displays the current selected item number along side the number of items. 6) Sections or Applications -- Tapping on a section will lead to subgroups of applications. Tapping on an application will launch that application. 22 www.openmoko.com Neo1973 emulation This target will (obviously) run original OpenMoko rootfs images, but then it should also be able to run the original u-boot and kernel images, the same ones that a real Neo1973 uses. Among other differences you will notice between this approach and the Integrator/CP target is you also get correct screen resolution, some (fake) battery readings, and other goodness. Currently missing parts of the emulator are: AGPS and Bluetooth - these things will still be worked on, as well as general usability. Even with these things missing, QEMU should provide substantial help in debugging kernel and u-boot issues to developers. What QEMU can *not* be used for, and probably no other emulator can, is speed measures and getting the general feel of OpenMoko performance. Code running in qemu runs with the maximum speed your host computer can provide with an overhead of translating target code to host code, and this overhead is not uniform across different instructions. This means that even if your virtual Neo reports near 100 BogoMIPS (which is the speed of a real Neo), different actions performed in the emulator will not run with the same speed. On most PCs you will notice the real Neo running faster than a virtuel one. What hardware is supported Rough status for each of the components that need emulation, following the outline of Neo1973 Hardware page. Hardware Usage notes Status S3C2410A Processor ARM920T core Works Already in mainline QEMU. 23 www.openmoko.com This includes GPIO interface, DMA, Interrupt Basic guts Work Controller, Timers, NAND controller, MMC/SD host, I2C and IIS interfaces, Memory & Clock & Power management controllers, RAM. Use the "-serial" switch (maybe be specified Serial ports Works multiple times) to tell QEMU where serial input/output should go to. GSM module will be connected on UART0. On start QEMU will load it with current time/date - RTC Works the Neo1973 kernel doesn't use it for time/date source currently. SPI Works The guest kernel can drive it using either the SPI interface or raw GPIO bitbanging. The virtual LCD will display contents in QEMU LCD Works window unless "-nographic" is specified on command line. Mouse events in QEMU window generate what ADC Works would be touchscreen events on a Neo1973 and are passed to the guest OS through the on-chip ADC. This part is in mainline QEMU. Use the "-usb" OHCI USB Works switch to enable the controller and "usb_add" in QEMU monitor to attach new virtual or physical USB devices. Linux's dummy HCD in conjunction with gadget filesystem API is used to make the virtual Neo Slave USB Works appear as a real one connected to the host computer. See Setting up USB connection below. (Experimental) 24 www.openmoko.com This is one of the less important on-chip Watchdog Works peripherals in S3C2410. It is however used by Linux for rebooting the board. I2C bus peripherals (Aka PMU) Fakes the battery charge level (set at PCF50606 Works 88%), POWER button, etc. Also contains an RTC, also unused by Linux. LM4857 Works The CODEC is also connect to the CPU's IIS port. WM8753L Works Basic audio functionality is supported - see QEMU documentation on getting audio input/output from the emulator. Volume control has no effects. Other peripherals However, some pieces are not confirmed to be completely compatible with the real hardware NAND Flash Works because of lack thereof. Use "-mtdblock flashimagefilenamehere" switch to point QEMU to your flash image. The file should be at least 69206016 bytes big. JBT6K74-AS(PI) Works (Aka LCM) Wired to the SPI channel 1 Buttons Work Enter is the AUX button, Space is the POWER button. Wired to on-chip GPIO and PCF50606. 25 www.openmoko.com This part is already in mainline QEMU. Use the "-sd cardimagegoeshere" switch to point QEMU to the card image. The regular QEMU monitor commands SD card Works for removable media can also be used. The card works, however the on-chip host controller gave block length errors on heavy I/O despite working as described in specification. I suspect the kernel driver. DMA operation is not tested. A generic Bluetooth HCI (just like the BlueCore4 chip) is connected to internal USB hub (just like the Delta DBFM dongle). Currently qemu emulates no other bluetooth devices, so the dongle behaves Bluetooth Works as if there was no BT-enabled slaves around, being the only device on the piconet, i.e. is not really useful. Likely a Bluetooth keyboard will be emulated. A physical Bluetooth dongle can also be attached to the emulator (see USB documentation in QEMU). A fake modem is connected to UART0 understanding a (currently quite limited) subset of AT commands. Ultimately it should support as much functionality as possible (basic AT command set, fake GPRS connections, dialing and SMS send/receive). This way all parts of the phone GSM Works subsystem (CALYPSO, TWL3014, TRF6151) will not have to be emulated. There is a possibility to wire a real GSM modem to QEMU's serial port, or the phonesim modem simulator from the Qtopia project (use the --enable-phonesim switch to ./configure) as well as the atinterface modem emulator, also from Qtopia. 26 www.openmoko.com There are obvious difficulties emulating the chip, but hopefully it can be made to present the guest AGPS To Do OS with some fixed coordinates later when more is known about the chip. Again a real chip could be connected to QEMU's serial port. Current development is aiming for GTA01Bv4 compatibility; earlier revisions can also be emulated if needed. The differences between the hardware revisions currently only manifest themselves in GPIO wiring. Hardware emulation is implemented in a clean-room manner using official specifications where possible. [edit] How to get it running [edit] Using MokoMakefile This is arguably the easiest way of building qemu-neo1973 since you won't need to deal with the compiling and flashing processes yourself. See MokoMakefile for details. (Installation instructions) If you *just* build QEMU and use the official images by typing "make qemu" only (as opposed to setting up monotone and openembedded and building an entire new image for yourself with MokoMakefile), then the build takes less time than the manual instructions below (since it's all done automatically). Manual setup To obtain the latest source code for the emulator, you will want to do something like the following: $ svn checkout https://svn.openmoko.org/trunk/src/host/qemu-neo1973 $ cd qemu-neo1973 Now, we're going to configure and build the emulator (Note 27 www.openmoko.com Requirements below): $ ./configure --target-list=arm-softmmu # GCC 3.x will be required, see --cc= $ make See other available options for the configure script by appending "--help". Now you should have a working emulator under the name "arm-softmmu/qemu-system-arm". To run OpenMoko you will also need to somehow install OpenMoko on your virtual phone, which is totally clean of any software at this moment. There are several block devices to choose from, the best option is probably to do exactly what the Neo1973 manufacturer does before it ships the device to the final user. This process is described in Bootloader, Kernel, NAND bad blocks and Devirginator but you don't need to know all the details. Two scripts are provided to generate a firmware for your phone, as realistic as possible. First run $ openmoko/download.sh which will look up the list of latest available OpenMoko snapshot builds from buildhost.openmoko.org and choose the most recent u-boot, Kernel, and root filesystem images, and download the images (unless they are already found in the openmoko/ directory). These binaries will be used by the flash.sh script. First make sure you have the netpbm package installed for some graphics conversion utilities. On Ubuntu this can be done by: sudo apt-get install netpbm Then run: $ openmoko/flash.sh which runs the emulator, loads u-boot into it and then uses u-boot's capability to program the Flash memory to install all the necessary parts of the system into the virtual Flash. It will also set up all the bootloading process including a boot menu (ENTER is [AUX] and SPACE is [POWER]), splash, u-boot environment and some default kernel parameters. If everything goes OK, the script should print a command which you can use to start using the emulator. 28 www.openmoko.com QEMU has *tons* of commandline switches and things that can be configured. You can look them up in QEMU user docs. You will probably want to use the "-snapshot" switch, among other ones. Saving and restoring emulation state at any point (unrelated to "-snapshot") should work as per QEMU user docs too. In addition the monitor commands "help" and "info" are of great help. The monitor usually sits in second virtual console, thus ctrl-alt-2 and ctrl-alt-1 switch to monitor and back. Pre-built binaries Win32 binaries shipped with firmware can be downloaded from openmoko-emulator-win32-bin-20070625.zip (or a mirror here). Tested on MS Windows XP and Vista Business. Requirements This QEMU tree has only been tested on GNU/Linux. To get graphical (not counting VNC) and/or audio output from the emulator you will need either SDL or Cocoa installed on your computer. To enable audio, see the available switches to the ./configure script. The scripts that sit in openmoko/ require lynx, wget, python, netpbm and most GNU base utilities installed in standard locations. The netpbm package contains tools necessary for bootsplash image conversion. All of the build-time and run-time requirements listed in QEMU documentation apply. This includes zlib, etc. On distributions that use binary packages, remember that you need the packages ending in -dev or -devel. QEMU and GNU debugger QEMU lets you debug operating system kernels and bootloaders like you debug all other programs. To do this you will need a debugger that speaks the GDB remote debugging protocol - GDB is the obvious choice. 29 www.openmoko.com Some cross toolchains come with GDB already set up. Otherwise building cross-GDB yourself is quick and easy (compared to building binutils and cross-gcc). To debug u-boot, load the file "u-boot" into gdb (not "u-boot.bin") that is produced by "make" when building u-boot. To debug a Linux kernel, load the file "vmlinux" from the main source directory into gdb. These files are in ELF format and contain all the symbol information and are not stripped of debugging data until you run "strip" on them, unlike "u-boot.bin" and "Image"/"zImage"/"uImage". Next, tell QEMU to enable the gdbserver by appending the "-s" switch or issuing "gdbserver" in the monitor. Use the command (gdb) target remote localhost:1234 to make a connection to the emulator. From there you should be able to use all the usual GDB commands, including stepping instructions, setting breakpoints, watchpoints, inspecting stack, variables, registers and more. If gdb is running in the same directory from which it grabbed the ELF executable, the "edit" command should work so you can jump right to the source line which is executing. Simple network connection with pppd One simple way to get a network connection from the emulated Neo is via an emulated serial port and pppd. Add -serial vc -serial pty to the QEMU command line, and QEMU prints a device name on a line like "char device redirected to /dev/pts/12". On the Neo side, open a terminal and run the command "pppd nodetach debug /dev/ttySAC1". On the host computer side, open a root terminal and run the command "pppd nodetach debug 192.168.68.1:192.168.68.2 noauth /dev/pts/12", substituting the actual device name from above. Now on the host computer side, you should be able to "ping 192.168.68.2" and "ssh root@192.168.68.2". 30 www.openmoko.com Setting up USB connection It is possible (although not very straight forward, probably about the complexity of tun-tap networking) to connect the virtual, emulated Neo1973 to the Linux PC on which the emulator is running, and work with it as if a real Neo1973 was plugged into the computer's USB port, but no twiddling with cables is needed. If you're testing your applications on the Neo, it may be worth setting up this kind of connection because it lets you enable normal networking between the PC and the phone and ssh into it (which is much more comfortable than typing commands into the OpenMoko's terminal emulator via on-screen keyboard). Here's what you will need in order to get this working: A Linux host with a 2.6 series kernel. The following drivers compiled-in or in modules: dummy_hcd, gadgetfs, usbnet, cdc_ether. A detailed guide to building the necessary modules is available (primarily Ubuntu focused). Generic instructions follow. Note that you need root access to perform most actions described here. Here's how to enable the drivers in menuconfig. Find and enable Device Drivers -> USB support -> USB Gadget Support -> Support for USB Gadgets Find Device Drivers -> USB support -> USB Gadget Support -> USB Peripheral Controller and set it to Dummy HCD (DEVELOPMENT) Find and enable Device Drivers -> USB support -> USB Gadget Support -> Gadget Filesystem (EXPERIMENTAL) (this one is good to have as a module) Find and enable Device Drivers -> USB support -> USB Network Adapters -> Multi-purpose USB Networking Framework Find and enable Device Drivers -> USB support -> USB Network Adapters -> Multi-purpose USB Networking Framework -> CDC Ethernet support (smart devices such as cable modems) These last two drivers are the same drivers that you need to work with a real Neo over USB network. After you've built the drivers, make sure that the copy of kernel headers in /usr/include/linux is up to date. In 31 www.openmoko.com particular the file /usr/include/linux/usb_gadgetfs.h needs to be present and if your distribution came with headers older than 2.6.18 or so, then you need tell the package manager to update them, or you can do that manually with # cp -a /usr/src/linux/include/linux/* /usr/include/linux/ (assuming that your kernel sources are in /usr/src/linux). It is important that this is done before building qemu because the build system checks if these headers are functional and in case they aren't found it will disable the USB Slave functionality. Run "grep CONFIG_GADGETFS config-host.h" in qemu build directory to make sure that the detection succeeded. If it didn't, correct your linux headers and reconfigure qemu. After building qemu and before running it, make sure that the modules are loaded into the kernel. I found it useful to load gadgetfs with the following command: # modprobe gadgetfs default_uid=1000 # assuming my User ID is 1000 and added the following line to my /etc/fstab: gadget /dev/gadget gadgetfs noauto,user,group Make sure that the mountpoint /dev/gadget exists: # mkdir -p /dev/gadget After that the rest of the procedure can be performed from your regular user account. Mounting gadgetfs is done with: $ mount /dev/gadget The "default_uid" parameter changes the ownership on all files under /dev/gadget to your own and since the files there are created and destroyed dynamically, there's no easy way to have that performed by udev. Now running qemu as you usually do but appending "-usb -usbgadget" (in the current version of the MokoMakefile this is not included) should enable the USB Slave functionality. The qemu monitor commands "info usbslave" and "usb_add gadget" will be useful. The 32 www.openmoko.com former instruction asks the OS running under the emulator (OpenMoko) to describe its slave features (that's what lsusb does after a Neo1973 is connected to a PC). You can see the available USB configurations in this command's output. Since gadgetfs allows only one configuration, we will need to choose the desired configuration - most device have only one such configuration, in which case you can use just "usb_add gadget" to connect to host; CDC ethernet devices however usually include a second configuration for RNDIS networking (i.e. Ms Windows compatibility) and so does OpenMoko when using the g_ether driver. Hence, to get this right, wait for OpenMoko to fully boot up and execute the following in QEMU monitor: QEMU 0.9.0 monitor - type 'help' for more information (qemu) info usbslave USB2.2 device 1457:5122: Manufacturer: Linux 2.6.20.7-moko8/s3c2410_udc Product: RNDIS/Ethernet Gadget Configuration 0: RNDIS Configuration 1: CDC Ethernet (qemu) (qemu) usb_add gadget:1 If qemu gives "couldn't add device gadget:1", double-check that it was built against gadgetfs - the file config-host.h must contain the line "#define CONFIG_GADGETFS 1". The "1" in "usb_add gadget:N" is the number of the USB configuration that we want to use. If everything went correctly - you can check that in dmesg - you should now have a new network interface called usb0 on the PC, through which you can talk to the OpenMoko running in QEMU: $ dmesg | tail <6>gadgetfs: bound to dummy_udc driver <7>hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101 <6>usb 3-1: new high speed USB device using dummy_hcd and address 3 <6>gadgetfs: connected <7>usb 3-1: default language 0x0409 <7>usb 3-1: new device strings: Mfr=1, Product=2, SerialNumber=0 33 www.openmoko.com <6>usb 3-1: Product: RNDIS/Ethernet Gadget <6>usb 3-1: Manufacturer: Linux 2.6.20.7-moko8/s3c2410_udc <6>usb 3-1: configuration #1 chosen from 1 choice <7>usb 3-1: adding 3-1:1.0 (config #1, interface 0) <7>usb 3-1:1.0: uevent <7>cdc_ether 3-1:1.0: usb_probe_interface - got id <7>cdc_ether 3-1:1.0: status ep3in, 16 bytes period 14 <7>usb 3-1: adding 3-1:1.1 (config #1, interface 1) <7>usb 3-1:1.1: uevent $ su Password: # tail /var/log/everything/current May 8 19:25:32 [kernel] gadgetfs: connected May 8 19:25:32 [kernel] gadgetfs: disconnected May 8 19:25:32 [kernel] gadgetfs: configuration #1 May 8 19:25:32 [kernel] usb0: register 'cdc_ether' at usb-dummy_hcd-1, CDC Ethernet Device, 52:e7:eb:76:0a:d0 # lsusb -vvv Bus 003 Device 003: ID 1457:5122 Device Descriptor: bLength 18 bDescriptorType bcdUSB 2.00 bDeviceClass 2 Communications bDeviceSubClass bDeviceProtocol bMaxPacketSize0 64 idVendor idProduct 0x1457 0x5122 bcdDevice 2.12 iManufacturer 1 Linux 2.6.20.7-moko8/s3c2410_udc iProduct 2 RNDIS/Ethernet Gadget iSerial bNumConfigurations Configuration Descriptor: bLength bDescriptorType wTotalLength 80 34 www.openmoko.com bNumInterfaces bConfigurationValue iConfiguration bmAttributes 7 CDC Ethernet 0xc0 Self Powered MaxPower 0mA Interface Descriptor: bLength bDescriptorType bInterfaceNumber bAlternateSetting bNumEndpoints bInterfaceClass bInterfaceSubClass 2 Communications 6 Ethernet Networking bInterfaceProtocol iInterface 5 CDC Communications Control CDC Header: bcdCDC 1.10 CDC Union: bMasterInterface bSlaveInterface CDC Ethernet: iMacAddress bmEthernetStatistics 3 52E7EB760AD0 0x00000000 wMaxSegmentSize 1514 wNumberMCFilters 0x0000 bNumberPowerFilters Endpoint Descriptor: bLength bDescriptorType bEndpointAddress bmAttributes Transfer Type 0x83 EP 3 IN Interrupt Synch Type None Usage Type Data wMaxPacketSize bInterval 0x0010 14 Interface Descriptor: 35 1x 16 bytes www.openmoko.com bLength bDescriptorType bInterfaceNumber bAlternateSetting bNumEndpoints bInterfaceClass 10 Data bInterfaceSubClass 0 Unused bInterfaceProtocol iInterface Interface Descriptor: bLength bDescriptorType bInterfaceNumber bAlternateSetting bNumEndpoints bInterfaceClass 10 Data bInterfaceSubClass 0 Unused bInterfaceProtocol iInterface 4 Ethernet Data Endpoint Descriptor: bLength bDescriptorType bEndpointAddress bmAttributes 0x81 EP 1 IN Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize bInterval 0x0040 1x 64 bytes Endpoint Descriptor: bLength bDescriptorType bEndpointAddress bmAttributes Transfer Type 0x02 EP 2 OUT Bulk Synch Type None Usage Type wMaxPacketSize Data 0x0040 36 1x 64 bytes www.openmoko.com bInterval Device Qualifier (for other device speed): bLength 10 bDescriptorType bcdUSB 2.00 bDeviceClass 2 Communications bDeviceSubClass bDeviceProtocol bMaxPacketSize0 64 bNumConfigurations # ifconfig usb0 inet 192.168.0.200 netmask 255.255.255.0 # exit $ ssh root@192.168.0.202 The authenticity of host '192.168.0.202 (192.168.0.202)' can't be established. RSA key fingerprint is de:21:87:93:52:1c:6b:c7:69:29:6c:af:66:50:02:02. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.202' (RSA) to the list of known hosts. root@192.168.0.202's password: root@fic-gta01:~$ uname -a Linux fic-gta01 2.6.20.7-moko8 #1 PREEMPT Wed Apr 25 11:13:52 UTC 2007 armv4tl unknown [edit] Connecting to the serial port/Communicating with u-boot If you add the option -serial telnet:localhost:1200,server to QEMU will create a telnet server on port 1200 that you can connect to as the serial port. This will allow you to experiment with u-boot configuration without risking to brick the real device. Please note that QEMU will wait for you to connect to the telnet server at port 1200 before starting the emulation. (use the command telnet localhost 1200 to establish the connection) 37 www.openmoko.com 38
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.6 Linearized : No Encryption : Standard V2.3 (128-bit) User Access : Print, Extract, Print high-res XMP Toolkit : Adobe XMP Core 4.0-c316 44.253921, Sun Oct 01 2006 17:14:39 Producer : Acrobat Distiller 6.0 (Windows) Creator Tool : PScript5.dll Version 5.2 Modify Date : 2008:01:04 17:10:30+08:00 Create Date : 2007:12:24 10:39:48+08:00 Metadata Date : 2008:01:04 17:10:30+08:00 Document ID : uuid:6087391e-5a1c-428d-991a-00b889d1d04a Instance ID : uuid:3fca783f-c959-47c6-b47a-86717657c0b0 Format : application/pdf Title : Microsoft Word - openmoko_manual_20071224.doc Creator : tt Page Count : 38 Author : ttEXIF Metadata provided by EXIF.tools