description |
---|
This article shows how OEMs can create images including custom applications and settings |
Prerequisites:
Android-tools:https://developer.android.com/studio/releases/platform-tools
Step
- Download and unzip following files:
- simg2img](https://herelinkfw.cubepilot.org/tools/simg2img\_linux.zip)
- img2simg](https://herelinkfw.cubepilot.org/tools/img2simg\_linux.zip)
- Remote Unit: oem_ru_base.img
- Air Unit: oem_au_base.img
- Ensure that you select the base image depending upon which unit you are modifying.
- Download and extract zips into same directory.
- Now to generate ext4fs image from the sparse image (.img) downloaded above do
./simg2img_mac oem_au_base.img raw_oem_au_base.img
- Create a mount point directory using
mkdir oem
- Mount the image using
mount raw_oem_au_base.img oem
- Now you should be able to modify files inside the mount directory.
- You need to use
sudo
to be able to do any writes the files inside the mount point. - Once you have made your changes, you need to unmount your drive using command
sudo umount oem
- Afterwards convert the ext4fs image back to android sparse image using command
./img2simg raw_oem_au_base.img oem_au.img
- Now you may flash this image into Herelink Air Unit, by putting it under bootloader using command
adb reboot bootloader
- And finally to flash to image run command
fastboot flash oem oem_au.img
- Check example below for a sample modification.
Prerequisites:
Homebrew:https://brew.sh/
Android:https://developer.android.com/studio/releases/platform-tools
Step
-
Setup osxfuse in your system using
brew cask install osxfuse
, this will require rebooting your system proceed and do that。 -
Follow the steps here to install fuse-ext2. This will allow you to mount ext4fs we will be generating.
-
Download and unzip following files:
-
Ensure that you select the base image depending upon which unit you are modifying.
-
Download and extract zips into same directory.
-
Now to generate ext4fs image from the sparse image (.img) downloaded above do
./simg2img_mac oem_au_base.img raw_oem_au_base.img
-
Create a mount point directory using
mkdir oem
-
Mount the image using
-
fuse-ext2 raw_oem_au_base.img oem -o rw+
-
Now you should be able to modify files inside the mount directory.
-
You need to use
sudo
to be able to do any writes the files inside the mount point. -
Once you have made your changes, you need to unmount your drive using command
sudo umount oem
-
Afterwards convert the ext4fs image back to android sparse image using command
./img2simg raw_oem_au_base.img oem_au.img
-
Now you may flash this image into Herelink Air Unit, by putting it under bootloader using command
adb reboot bootloader
-
And finally to flash to image run command:
fastboot flash oem oem_au.img
Example:
- In the following example we change the system_id used by herelink air unit for board specific messages.
- Most config files are located in you unit at
/system/etc
in the following example we will pull config using commandadb pull /system/etc/system-control.telepathy-air.conf
- Once pulled the file will contain information like bellow:
# module on/off
board_control_enabled = true
d2d_tracker_enabled = true
camera_control_enabled = true
# board control
board_system_id = 42
# camera control
video_stream_ip_address = 192.168.0.10
camera_system_id = 42
support_multiple_camera = true
support_camera_capture = false
- You can change the value of
board_system_id
andcamera_system_id
fields as per your requirement in your favourite editor. - Once done save this file and exit editor.
- Create a folder inside oem image called
etc
using commandsudo mkdir oem/etc
- Copy file using command
sudo cp system-control.telepathy-air.conf oem/etc/
- Continue to unmount the image and flashing into the unit as described in above steps.
- In the following example we override the installed QGroundcontrol App.
- A new OEM app can be installed under /oem/app//.apk
- For installing your custom version of QGroundcontrol, ensure that you started with https://github.com/cubepilot/qgroundcontrol-herelink as your base.
- After building the project, create a folder
QgroundControl
- Copy .apk file
cp -r build-qgroundcontrol-Android_for_armeabi_v7a_Clang_Qt_5_11_0_for_Android_armv72_fd6ff4-Debug/android-build/build/outputs/apk/android-build-debug.apk QGroundControl/QGroundControl.apk
- Also create a lib directory
QGroundControl/lib
- Copy libraries
cp -r build-qgroundcontrol-Android_for_armeabi_v7a_Clang_Qt_5_11_0_for_Android_armv72_fd6ff4-Debug/android-build/libs/armeabi-v7a/ QGroundControl/lib/arm/
- Finally move QgroundControl directory to oem image
sudo cp -r QGroundControl oem/app/QGroundControl
- Do ensure you have already created app directory inside oem image if not already done
sudo mkdir oem/app
- Continue to unmount the image and flashing into the unit as described in above steps.
- On boot several files are setup for use, and you can override these files
- These files can exist in (searched in this order)
/data/oem/etc - user default - wiped on factory reset
/oem/etc - oem default
/system/etc - system default
- files that can be overridden (optimus is the internal GCS name, telepathy-air is the air unit (ro.product.device))
lampsignal-telepathy-air.json
rc_service_config_optimus.ini
mavlink-router.optimus.conf
system-control.optimus.conf