Android
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 https://android.googlesource.com/kernel/manifest -b common-android13-5.15
repo sync
Build kernel and modules:
- enable
CONFIG_FTRACE_SYSCALLS
andCONFIG_BPF_LSM
- disable
CONFIG_TRACEFS_DISABLE_AUTOMOUNT
For x86_64:
BUILD_CONFIG=common/build.config.gki.x86_64 build/build.sh
BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.x86_64 build/build.sh
For aarch64:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.aarch64 build/build.sh
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:
[pulsar]
api_socket_path=/data/local/tmp/pulsar.sock
[rules-engine]
rules_path=/data/local/tmp/rules
- 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