Skip to main content


We have successfully tested Pulsar on Android 13 with kernel 5.15.

In order to run Pulsar on Android, you need to build a custom kernel adding extra configuration options.

Building custom kernel

Download kernel sources:

mkdir android-kernel && cd android-kernel
repo init -u -b common-android13-5.15
repo sync

Build kernel and modules:


For x86_64:

BUILD_CONFIG=common/build.config.gki.x86_64 build/
BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.x86_64 build/

For aarch64:

BUILD_CONFIG=common/build.config.gki.aarch64 build/
BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.aarch64 build/

Then you will find the output in ./out/android13-5.15/dist in the current directory ready for your Android ROM build.

Running Pulsar

At this time only static builds are supported, so you have to build Pulsar using aarch64-unknown-linux-musl or x86_64-unknown-linux-musl depending on your device architecture.

On host:

  • connect your device
  • copy Pulsar on the device, for example: adb push pulsar-exec /data/local/tmp/
  • exec ADB as root: adb root
  • remount the file system in rw mode: adb remount
  • get a shell on your device: adb shell

On device:

  • mount debugfs: mount -t debugfs debugfs /sys/kernel/debug
  • mount securityfs: mount -t securityfs securityfs /sys/kernel/security
  • create Pulsar rules directory, for example: mkdir /data/local/tmp/rules
  • create a rules file, for example /data/local/tmp/rules/default.yaml with the following content:
- name: Opened test file
type: FileOpened
condition: payload.filename == "/data/local/tmp/test"
  • create configuration file /data/local/tmp/pulsar.ini according to your directory structure, example:

  • run pulsar with your configuration file:
cd /data/local/tmp
./pulsar-exec pulsard --config-file=./pulsar.ini
  • test your rule:
cat /data/local/tmp/test