Useful stuff
Useful commands[edit | edit source]
cat /sys/devices/virtual/thermal/thermal_zone0/temp cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
Android shell[edit | edit source]
editing the build.prop file on the system
adb shell su mount -o remount,rw /system cd / echo "persist.service.adb.enable=1" >> default.prop echo "persist.service.debuggable=1" >> default.prop echo "persist.sys.usb.config=mtp,adb" >> default.prop echo "persist.service.adb.enable=1" >> /system/build.prop echo "persist.service.debuggable=1" >> /system/build.prop echo "persist.sys.usb.config=mtp,adb" >> /system/build.prop
debugging input devices like the touchscreen
getevent -il // display all input devices
find the device you care about
getevent -trl /dev/input/event0 | grep ABS_X // for example getevent -l | grep event0
Development system[edit | edit source]
adb install -r <filename>.apk
adb push <local filename> <target filename>
adb devices -l
adb -s <system name>
adb screencap -p /sdcard/screen.png
OTA upgrade process[edit | edit source]
rm out/target/product/hbi120/boot* rm out/target/product/hbi120/kernel make -j12 BUILD_TARGET_DEVICE=sd adb push out/target/product/hbi120/boot.img /dev/block/mmcblk3p1 adb reboot
make -j12 BUILD_TARGET_DEVICE=sd dist adb shell 'mkdir -p /cache/recovery' adb push out/dist/hbi120-ota-20160824.1441.zip /cache/update.zip adb shell 'echo "--update_package=/cache/update.zip" > /cache/recovery/command' adb reboot recovery
Write sdcard[edit | edit source]
./um.sh pushd out/target/product/hbi120 sudo ../../../../device/fsl/common/tools/fsl-sdcard-partition_1604.sh -f imx6q /dev/sdX popd
Touchscreen debugging[edit | edit source]
echo 4.8_H_640T_1.2_1WN_001.raw > /sys/bus/i2c/drivers/atmel_mxt_ts/0-004a/update_cfg
mxt-app
adb push ~/projects/Android5.1b/Android_Lolli/kernel_imx/firmware/atmel/4.8_H_640T_1.2_1WN_001.raw /sdcard/Android/data/atmel.raw adb push projects/mxt-app/libs/armeabi-v7a/mxt-app /data/local/tmp/ adb shell /data/local/tmp/mxt-app --load /sdcard/Android/data/atmel.raw
kernel output when updating the atmel device
adb shell dmesg | grep atmel [ 5.005664] atmel_mxt_ts 0-004a: Family: 164 Variant: 2 Firmware V1.2.AA Objects: 39 [ 5.014151] atmel_mxt_ts 0-004a: Enabling RETRIGEN workaround [ 5.104391] atmel_mxt_ts 0-004a: cfg_name atmel/4.8_H_640T_1.2_1WN_001.raw, error 0 [ 5.112140] atmel_mxt_ts 0-004a: Direct firmware load failed with error -2 [ 5.119072] atmel_mxt_ts 0-004a: Falling back to user helper [ 5.119104] atmel_mxt_ts 0-004a: Touchscreen size2 X0Y0 [ 5.148466] atmel_mxt_ts 0-004a: fw_load_from_user_helper fw_priv -734595072 [ 5.155552] atmel_mxt_ts 0-004a: fw_load_from_user_helper fw_priv -734595072 [ 5.162621] firmware atmel!4.8_H_640T_1.2_1WN_001.raw: _request_firmware_load: [ 7.619973] atmel_mxt_ts 0-004a: fw_load_from_user_helper ret 0 [ 7.657693] atmel_mxt_ts 0-004a: Config CRC 0xDC5CE1: does not match file 0x406817 [ 8.045181] atmel_mxt_ts 0-004a: Resetting device [ 8.165252] atmel_mxt_ts 0-004a: Config successfully updated [ 8.174276] atmel_mxt_ts 0-004a: multitouch t100 [ 8.186835] atmel_mxt_ts 0-004a: Touchscreen size1 X719Y1279
Kernel debugging stuff[edit | edit source]
/sys/devices/system/cpu/cpu0/cpufreq/ /sys/devices/virtual/thermal/thermal_zone0/temp
cat /sys/fsl_otp/HW_OCOTP_CFG0 cat /sys/fsl_otp/HW_OCOTP_CFG1
Camera stuff[edit | edit source]
pm enable com.android.gallery3d/com.android.camera.CameraLauncher
https://community.nxp.com/thread/360269
LED control from command line[edit | edit source]
echo 1 > /sys/class/gpio/gpio171/value echo 1 > /sys/class/gpio/gpio174/value
I2C debugging[edit | edit source]
probe bus[edit | edit source]
i2cdetect -y 0 i2cdetect -y 1 i2cdetect -y 2
pcf8563 rtc[edit | edit source]
links[edit | edit source]
http://lxr.free-electrons.com/source/drivers/rtc/rtc-pcf8563.c
dump rtc[edit | edit source]
@ 0x51, bus 0
i2cdump -y -f 0 0x51 b i2cdump -y -f -r 0-0xf 0 0x51 b
clear VL (voltage low)[edit | edit source]
bit in Reg 0x2
adb shell i2cset -y -f 0 0x51 2 0x80
Setting the time/date[edit | edit source]
adb shell date -s 20161206.082400
reading/writing rtc[edit | edit source]
busybox hwclock --show busybox hwclock --systohc
rtc clockout[edit | edit source]
See PCF8563.pdf doc [1]
dumping registers:
device address 0x51, register 0x2 (seconds in rtc).
i2cget -f -y 8 0x51 0x2
register CLKOUT_Control, bit 7 is the enable bit for clock output. bits 0,1 select the clock output frequency
i2cget -f -y 8 0x51 0xd i2cset -f -y 8 0x51 0xd 0
clear all bits in CLKOUT.
Kernel driver for PCF8563 is located at ./kernel_imx/drivers/rtc/rtc-pcf8563.c
JNI tricks[edit | edit source]
How to reference java object from c++
http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/example-1.1/FieldAccess.c
http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/example-1.1/FieldAccess.java
neon integration example[edit | edit source]
https://github.com/googlesamples/android-ndk
Android crashes[edit | edit source]
adb pull /data/anr/traces.txt
adb bugreport > bugreport.txt
USB Permission[edit | edit source]
Hack #1[edit | edit source]
Add:
public void onStart() { super.onStart(); mPermissionGranted = true; finish(); }
to frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java to bypass the the permission confirmation popup.
Correct way (mostly)[edit | edit source]
Call getUsbPermission(), it will take care of the getting permission if needed.
private void getUsbPermission() { UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); //UsbAccessory[] accessoryList = manager.getAccessoryList(); //if (manager.hasPermission(accessoryList[0])) { if (!manager.hasPermission(deviceList.get("/dev/bus/usb/001/002"))) { BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { startUsbDevice(); } } } } }; PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); registerReceiver(mUsbReceiver, filter); manager.requestPermission(deviceList.get("/dev/bus/usb/001/002"), pi); } else { startUsbDevice(); } }
private void startUsbDevice() { AsyncTask<Void, Void, Void> fpgaProgressBar = new AsyncTask<Void, Void, Void>() { Boolean bFpgaLoads; @Override protected Void doInBackground(Void... params) { bFpgaLoads = loadFpga(); return null; } @Override protected void onPostExecute(Void result) { if (usb.simFtdi) { //textViewTitle.setBackgroundColor(Color.YELLOW); //textViewTitle.setTextColor(Color.BLUE); toolbar.setBackgroundColor(Color.YELLOW); } if (bFpgaLoads) { // fpga load succeeded } else { // fpga load failed }
} }; fpgaProgressBar.execute(); }
Switching between openjdk java versions[edit | edit source]
List all java versions:
update-java-alternatives --list
Set java version as default (needs root permissions):
sudo update-java-alternatives --set /path/to/java/version sudo update-java-alternatives --set /usr/lib/jvm/java-1.7.0-openjdk-amd64
Wifi debugging with Android studio[edit | edit source]
Don't get confused between /usr/bin/adb and /opt/android-sdk/platform-tools/adb. If the adb is restarted, then you have to redo the connection process. Only use one version of the tool during this process. For now I'm using the /opt/android-sdk/platform-tools/adb only as it is a higher version than the /usr/bin/adb.
It appears that during the first set of commands you need to have the android target connected via usb until after the tcpip command. This maybe switching communication modes on the android targets adbd as well.
ping 192.168.1.142 ./adb kill-server ./adb devices ./adb tcpip 5555
./adb connect 192.168.1.142:5555 ./adb devices
Now I appear to be able to debug normally. The connect command may need to be run a couple of times.
git buffer size[edit | edit source]
git config --global http.postBuffer 1048576000
SQL debugging[edit | edit source]
/data/data/com.heuresistech.hbi120/databases # sqlite3 Data .schema select * from users;
Location of penguin's and splash screen[edit | edit source]
located in the kernel build
drivers/video/logo/logo_linux_clut224.ppm
located in the android build
device/heuresis/hbi120/overlay/frameworks/base/core/res/assets/images/android-logo-mask.png device/heuresis/pb200i/overlay/frameworks/base/core/res/assets/images/android-logo-shine.png
Additional tools needed
pnmnoraw ppmquant