wiki:osmocon

osmocon

osmocon is a console tool for interfacing our baseband firmware on the phone with applications on the host PC.

It is also used to download a firmware or bootloader into the phone over the serial line, which is currently implemented for the CompalE88 (C118/C120/C121/C123), the CompalE99 (C155).

Supported Bootloaders are currently the CompalRamloader and the Hardware/CalypsoRomloader?.

After uploading a firmware, it turns into an HDLC mulitplexer/demultiplexer, allowing for multichannel communication with the device.

The phones console is on one such channel and will be redirected to the terminal (stdout) on which osmocom runs.

Several other HDLC channels are accessible by means of the following unix domain sockets:

GraphViz image

General Usage

  • Connect your phone UART to a serial port of your PC, using a Hardware/SerialCable (3.3V RS232 on 2.5mm headphone jack)
  • Choose firmware you have to load, depending on a host program you want to run (see Applications)
  • Load firmware to the phone, running osmocon like below. Fill in phone type and firmware name with your values. See Hardware/Phones if you need to look up the phone type.
    $ ./osmocon -p /dev/ttyUSB0 -m c123xor ../../target/firmware/board/PHONE_TYPE/FIRMWARE.compalram.bin
    
  • Make sure your phone is off. Briefly press the power-on button of your phone (short push, not like a regular phone boot!). Avoid charging the phone while using osmocon, this can inhibit the loader.
  • Observe output resembling the following
    got 2 bytes from modem, data looks like: 2f c8 
    got 5 bytes from modem, data looks like: 1b f6 02 00 41 
    got 1 bytes from modem, data looks like: 01 
    got 1 bytes from modem, data looks like: 40 
    Received PROMPT1 from phone, responding with CMD
    read_file(../../target/firmware/board/compal_e88/loader.compalram.bin): file_size=13404, hdr_len=4, dnload_len=13411
    got 1 bytes from modem, data looks like: 1b 
    got 1 bytes from modem, data looks like: f6 
    got 1 bytes from modem, data looks like: 02 
    got 1 bytes from modem, data looks like: 00 
    got 1 bytes from modem, data looks like: 41 
    got 1 bytes from modem, data looks like: 02 
    got 1 bytes from modem, data looks like: 43 
    Received PROMPT2 from phone, starting download
    handle_write(): 1023 bytes (1023/13411)
    handle_write(): 768 bytes (1791/13411)
    handle_write(): 768 bytes (2559/13411)
    handle_write(): 768 bytes (3327/13411)
    handle_write(): 768 bytes (4095/13411)
    handle_write(): 768 bytes (4863/13411)
    handle_write(): 768 bytes (5631/13411)
    handle_write(): 768 bytes (6399/13411)
    handle_write(): 768 bytes (7167/13411)
    handle_write(): 768 bytes (7935/13411)
    handle_write(): 768 bytes (8703/13411)
    handle_write(): 768 bytes (9471/13411)
    handle_write(): 768 bytes (10239/13411)
    handle_write(): 768 bytes (11007/13411)
    handle_write(): 768 bytes (11775/13411)
    handle_write(): 768 bytes (12543/13411)
    handle_write(): 768 bytes (13311/13411)
    handle_write(): 100 bytes (13411/13411)
    handle_write(): finished
    got 1 bytes from modem, data looks like: 1b 
    got 1 bytes from modem, data looks like: f6 
    got 1 bytes from modem, data looks like: 02 
    got 1 bytes from modem, data looks like: 00 
    got 1 bytes from modem, data looks like: 41 
    got 1 bytes from modem, data looks like: 03 
    got 1 bytes from modem, data looks like: 42 
    Received DOWNLOAD ACK from phone, your code is running now!
    
    
    OSMOCOM Calypso loader (revision f45c5ee-modified)
    ======================================================================
    Running on compal_e88 in environment ramload
    
    
  • You can now interact with the phone through application programs like mobile, ccch_scan, osmoload, and others, depending on the firmware you loaded.

Command Line Parameters

Usage: ./osmocon [ -v | -h ] [ -d [t][r] ] [ -p /dev/ttyXXXX ]
                 [ -s /tmp/osmocom_l2 ]
                 [ -l /tmp/osmocom_loader ]
                 [ -m {c123,c123xor,c140,c140xor,c155,romload,mtk} ]
                 [ -c /to-be-chainloaded-file.bin ]
                 [ -i beacon-interval (mS) ]
                  file.bin

-v Version

Show the version of the program

-h Help

Get a short help message

-d [t][r] Debug flags

Enable debug output of transmitted t and/or received r serial data

-p /dev/ttyXXXX Serial Device

Specify the Serial Port to which your phone is connected, e.g. /dev/ttyUSB0 for the first USB-Serial converter in your system

-s /path/to/socket Path of L1CTL socket

Specify the file system path for the unix domain socket to be used for L1CTL

-l /path/to/socket Path to Loader socket

Specify the file system path for the unix domain socket to be used for interaction with osmoload

-i time beacon interval, in milliseconds

Specify the beacon interval. On some devices default value should be adjusted in order for loading to work (for example Neo Freerunner works wit -i 13)

-m {c123,c123xor,c140,c140xor,c155,romload,mtk} Download protocol mode

Select the protocol to be used for interaction with the phone:

  • c123 use the variant implemented by C118/C121/C123
  • c123xor use the variant implemented by C118/C121/C123 including XOR checksum
  • c140 use the variant implemented by C139/C140
  • c140xor use the variant implemented by C139/C140 including XOR checksum
  • c155 use the variant implemented by C155
  • romload use the variant implemented by the Ti Calypso rom-loader (aka fluid)
  • mtk use the protocol used by Mediatek DBB

Known Problems

In some situations (like, apparently, using FTDI serial cables), you might need the -m c123 mode for your MotorolaC123 instead of the normal -m c123xor.

Last modified 4 months ago Last modified on Dec 31, 2013, 2:08:28 AM