SerCeMan / jnr-fuse

FUSE implementation in Java using Java Native Runtime (JNR)
MIT License
365 stars 87 forks source link

ARM support #14

Open SerCeMan opened 8 years ago

SerCeMan commented 8 years ago

Implement support for ARM architecture.

https://github.com/SerCeMan/jnr-fuse/issues/13

jernst commented 6 years ago

This is on a Raspberry Pi 3, running Arch Linux ARM (armv7). Transcript:

java -cp ./build/libs/jnr-fuse-0.5.2-SNAPSHOT-all.jar ru.serce.jnrfuse.examples.HelloFuse
FUSE library version: 2.9.7
nullpath_ok: 0
nopath: 0
utime_omit_ok: 0
unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0
INIT: 7.26
flags=0x001ffffb
max_readahead=0x00020000
   INIT: 7.19
   flags=0x00000011
   max_readahead=0x00020000
   max_write=0x00020000
   max_background=0
   congestion_threshold=0
   unique: 1, success, outsize: 40
unique: 2, opcode: LOOKUP (1), nodeid: 1, insize: 46, pid: 13184
LOOKUP /hello
getattr /hello
   NODEID: 2
   unique: 2, success, outsize: 144
unique: 3, opcode: OPEN (14), nodeid: 2, insize: 48, pid: 13184
open flags: 0x20000 /hello
   open[0] flags: 0x20000 /hello
   unique: 3, success, outsize: 32
unique: 4, opcode: READ (15), nodeid: 2, insize: 80, pid: 13184
read[0] 4096 bytes from 0 flags: 0x20000
   read[0] 12 bytes from 0
   unique: 4, success, outsize: 28
unique: 5, opcode: FLUSH (25), nodeid: 2, insize: 64, pid: 13184
   unique: 5, error: -38 (Function not implemented), outsize: 16
unique: 6, opcode: RELEASE (18), nodeid: 2, insize: 64, pid: 0
   unique: 6, success, outsize: 16

after having invoked cat /tmp/mnth/hello, which produces no content.

The same setup on the PC, also Arch (but x86_64) produces the "Hello World!", and the transcript is:

FUSE library version: 2.9.7
nullpath_ok: 0
nopath: 0
utime_omit_ok: 0
unique: 1, opcode: INIT (26), nodeid: 0, insize: 56, pid: 0
INIT: 7.26
flags=0x001ffffb
max_readahead=0x00020000
   INIT: 7.19
   flags=0x00000011
   max_readahead=0x00020000
   max_write=0x00020000
   max_background=0
   congestion_threshold=0
   unique: 1, success, outsize: 40
unique: 2, opcode: LOOKUP (1), nodeid: 1, insize: 46, pid: 16323
LOOKUP /hello
getattr /hello
   NODEID: 2
   unique: 2, success, outsize: 144
unique: 3, opcode: OPEN (14), nodeid: 2, insize: 48, pid: 16323
open flags: 0x8000 /hello
   open[0] flags: 0x8000 /hello
   unique: 3, success, outsize: 32
unique: 4, opcode: READ (15), nodeid: 2, insize: 80, pid: 16323
read[0] 4096 bytes from 0 flags: 0x8000
   read[0] 12 bytes from 0
   unique: 4, success, outsize: 28
unique: 5, opcode: GETATTR (3), nodeid: 2, insize: 56, pid: 16323
getattr /hello
   unique: 5, success, outsize: 120
unique: 6, opcode: FLUSH (25), nodeid: 2, insize: 64, pid: 16323
   unique: 6, error: -38 (Function not implemented), outsize: 16
unique: 7, opcode: RELEASE (18), nodeid: 2, insize: 64, pid: 0
   unique: 7, success, outsize: 16

Java versions are almost the same: 1.8.0_162 (PC) vs 1.8.0_144-b01 (ARM).

Listing the directory produces the same transcript, as far as I see, but different results:

ARM:

$ ls -al /tmp/mnth
total 0
drwxr-xr-x 2 root root   0 Jan  1  1970 .
drwxrwxrwt 7 root root 200 Apr  6 21:42 ..
-r--r--r-- 1 root root   0 Jan  1  1970 hello

PC:

$ ls -al /tmp/mnth
total 0
drwxr-xr-x  2 root root   0 Jan  1  1970 .
drwxrwxrwt 21 root root 540 Apr  6 21:42 ..
-r--r--r--  1 root root  12 Jan  1  1970 hello