Mock-ril: Install: Install protoc see the external/protobuf/INSTALL.txt and external/protobuf/python/README.txt. The short answer is: $ cd external/protobuf $ ./configure $ make $ make check $ make install $ cd python $ python setup.py install If you get "from google.protobuf import xxxx" statements that google.protobuf is not found you didn't install the python support for protobuf. Also on Mac OSX I got an error running the protoc tests but installing was fine. Running/testing: See "Testing a new ril:" below for general instructions but for the mock-ril I've added some targets to the Makefile to ease testing. Execute the "first" target first to setup appropriate environment: $ cd hardware/ril/mock-ril $ make first If changes made to ".proto" files run make with the default "all" target: $ make If changes are made to "c++" file create a new library and run the "test" target: $ mm $ make test If changes to only the execute "js" target: $ make js To run the test control server: $ make tcs Implementation: The mock-ril is a library where the ril is implemented primarily in javascript, mock-ril.js. In addition it can be controlled by sending messages from another computer to port 54312 (TODO make programmable) to the ctrlServer, a Worker in In mock-ril.js. See mock_ril.js for additional documentation. files: ctrl.proto Protobuf messages for the control server ctrl.* Protobuf generated files. ctrl_pb2.py Python files generated from ctrl.proto ctrl_server.* Cpp interface routines between ctrlServer in javascript and the controller. experiments.* Early experiments js_support.* Java script support methods. Exposes various routines to javascript, such as print, readFile and include. logging.h LOG_TAG and include utils/log.h mock_ril.[cpp|h] Main module inteface code. mock_ril.js The mock ril node_buffer.* A Buffer for communicating between c++ and js. This was ported from nodejs.org. node_object.* An object wrapper to make it easier to expose c++ code to js. Ported from nodejs.org. node_util.* Some utilities ported from nodejs.org. protobuf_v8.* Protobuf code for javascript ported from http://code.google.com/p/protobuf-for-node/. requests.* Interface code for handling framework requests. responses* Interface code for handling framework responses. ril.proto The protobuf version of ril.h ril_vars.js Some additional variables defined for enums in ril.h. ril_pb2.py Python files generated from ril.proto. status.h STATUS constants. tcs.py Test the ctrlServer. util.* Utility routines worker.* Define WorkerThread and WorkerQueue. worker_v8.* Expose WorkerQueue to js. TODO: more documentation. Testing a new ril: The Makefile is used to generate files and make testing easier. I has several targets: all runs protoc and generates files, ril.desc ril.pb.* clean target removes generated files. first changes to root, remounts r/w and copies some files. test copies the latest libmock_ril.so and kills rild to run the new mockril General instructions for testing ril's: 1) On the device login in as root and remount file system so it's read/write: $ adb root restarting adbd as root $ adb remount remount succeeded 2) Set rild.libpath to the name of the ril: adb shell setprop rild.libpath /system/lib/libmock_ril.so Using setprop makes the change temporary and the old ril will be used after rebooting. (Another option is to set rild.libpath in /data/local.prop, but don't forget to reboot for it to take effect). 3) Compile and copy the ril to /system/lib/: adb push out/target/product/passion/system/lib/libmock_ril.so /system/lib/ 4) To restart the ril, kill the currently running ril and the new one will automatically be restarted. You can use the ps command to find /system/bin/rild PID, 3212 below and kill it: $ adb shell ps | grep rild radio 3212 1 3224 628 ffffffff afd0e4fc S /system/bin/rild $ adb shell kill 3212 5) Make modifications, go to step 3.