Compare commits

...

2 commits

Author SHA1 Message Date
Dmitry Isaenko
45247d6d8c Add RCM payload support for Raspberry Pi
See #57
2020-07-23 18:07:50 +03:00
Dmitry Isaenko
3bfc37a24e Cosmetic naming update; removing useless comments. 2020-07-22 03:43:52 +03:00
15 changed files with 91 additions and 34 deletions

View file

@ -29,6 +29,13 @@ $ javac -h . RcmSmash.java
$ cd 'NS-USBloader/JNI sources/linux' $ cd 'NS-USBloader/JNI sources/linux'
$ make install clean $ make install clean
``` ```
**Build for Raspberry Pi (Raspberry Pi host):**
```
$ cd 'NS-USBloader/JNI sources/linux'
$ mv Makefile_rapsberry Makefile
$ make install clean
```
**Build for Windows (on x86_64 host):** **Build for Windows (on x86_64 host):**
[ This part should be updated ] [ This part should be updated ]

View file

@ -0,0 +1,31 @@
# Compiler
CC=arm-linux-gnueabihf-gcc
# Flags
CFLAGS=-O2
MKDIR_P = mkdir -p
APP_NAME = smashlib.so
ifeq ($(JAVA_HOME),)
JAVA_LIB_PATH := "/usr/lib/jvm/default-java/include"
JAVA_LIB_PATH_LINUX := "/usr/lib/jvm/default-java/include/linux"
else
JAVA_LIB_PATH = ${JAVA_HOME}/include
JAVA_LIB_PATH_LINUX = ${JAVA_HOME}/include/linux
endif
all: arm
arm:
test $(JAVA_LIB_PATH)
$(MKDIR_P) ./arm
$(CC) -c -fPIC -I$(JAVA_LIB_PATH) -I"$(JAVA_LIB_PATH_LINUX)" smashlib.c -o smashlib_arm.o
$(CC) ${CFLAGS} -shared -fPIC -o ./arm/${APP_NAME} smashlib_arm.o -lc
clean:
rm -rf smashlib_arm.o ./arm
install: arm
install ./arm/${APP_NAME} ../../src/main/resources/native/linux/arm/
uninstall:
rm ../../src/main/resources/native/linux/arm/${APP_NAME}

View file

@ -7,7 +7,7 @@
NS-USBloader is: NS-USBloader is:
* A PC-side installer for **[Adubbz/TinFoil (v0.2.1)](https://github.com/Adubbz/Tinfoil/)**, **[Huntereb/Awoo-Installer](https://github.com/Huntereb/Awoo-Installer)** (USB and Network supported) and **[XorTroll/GoldLeaf](https://github.com/XorTroll/Goldleaf)** (USB) NSP installer. * A PC-side installer for **[Adubbz/TinFoil (v0.2.1)](https://github.com/Adubbz/Tinfoil/)**, **[Huntereb/Awoo-Installer](https://github.com/Huntereb/Awoo-Installer)** (USB and Network supported) and **[XorTroll/GoldLeaf](https://github.com/XorTroll/Goldleaf)** (USB) NSP installer.
Replacement for default **usb_install_pc.py**, **remote_install_pc.py**, **GoldTree**/**Quark**. Replacement for default **usb_install_pc.py**, **remote_install_pc.py**, **GoldTree**/**Quark**.
* This application also could be used as RCM payload on Windows, MacOS and Linux (supported arch: x86, x86_64). * This application also could be used as RCM payload on Windows, MacOS and Linux (supported arch: x86, x86_64 and Raspberry Pi).
* And of course it's a tool for split files! * And of course it's a tool for split files!
* And also for merging split-files into one :) * And also for merging split-files into one :)
@ -90,6 +90,14 @@ root # udevadm control --reload-rules && udevadm trigger
Please note: you may have to change 'plugdev' group from example above to the different one. It's depends on you linux distro. Please note: you may have to change 'plugdev' group from example above to the different one. It's depends on you linux distro.
##### Raspberry Pi
1. Install JDK: `sudo apt install default-jdk`
2. For UI install JavaFX:
3. See steps 3 and 4 from 'Linux' section to update 'udev'.
##### macOS ##### macOS
Double-click on downloaded .jar file. Follow instructions. Or see 'Linux' section. Double-click on downloaded .jar file. Follow instructions. Or see 'Linux' section.

View file

@ -8,7 +8,7 @@
<name>NS-USBloader</name> <name>NS-USBloader</name>
<artifactId>ns-usbloader</artifactId> <artifactId>ns-usbloader</artifactId>
<version>4.0-SNAPSHOT</version> <version>4.1-SNAPSHOT</version>
<url>https://github.com/developersu/ns-usbloader/</url> <url>https://github.com/developersu/ns-usbloader/</url>
<description> <description>

View file

@ -32,7 +32,7 @@ import java.util.ResourceBundle;
public class NSLMain extends Application { public class NSLMain extends Application {
public static final String appVersion = "v4.0"; public static final String appVersion = "v4.1";
public static boolean isCli; public static boolean isCli;
@Override @Override

View file

@ -43,6 +43,9 @@ public class JNIRcmLoader {
case "amd64": case "amd64":
osArch = "amd64"; osArch = "amd64";
break; break;
case "arm":
osArch = "arm";
break;
default: default:
return false; return false;
} }

View file

@ -55,34 +55,34 @@ public class CommandLineInterface {
} }
if (cli.hasOption("n") || cli.hasOption("tfn")){ if (cli.hasOption("n") || cli.hasOption("tfn")){
final String[] arguments = cli.getOptionValues("tfn"); final String[] arguments = cli.getOptionValues("tfn");
new TinfoilNet(arguments); new TinfoilNetCli(arguments);
return; return;
} }
if (cli.hasOption("t") || cli.hasOption("tinfoil")){ if (cli.hasOption("t") || cli.hasOption("tinfoil")){
final String[] arguments = cli.getOptionValues("tinfoil"); final String[] arguments = cli.getOptionValues("tinfoil");
new TinfoilUsb(arguments); new TinfoilUsbCli(arguments);
return; return;
} }
if (cli.hasOption("g") || cli.hasOption("goldleaf")){ if (cli.hasOption("g") || cli.hasOption("goldleaf")){
final String[] arguments = cli.getOptionValues("goldleaf"); final String[] arguments = cli.getOptionValues("goldleaf");
new GoldLeaf(arguments); new GoldLeafCli(arguments);
return; return;
} }
/* /*
if (cli.hasOption("x") || cli.hasOption("nxdt")){ if (cli.hasOption("x") || cli.hasOption("nxdt")){
final String[] arguments = cli.getOptionValues("nxdt"); final String[] arguments = cli.getOptionValues("nxdt");
new NXDT(arguments); new NxdtCli(arguments);
return; return;
} }
*/ */
if (cli.hasOption("s") || cli.hasOption("split")){ if (cli.hasOption("s") || cli.hasOption("split")){
final String[] arguments = cli.getOptionValues("split"); final String[] arguments = cli.getOptionValues("split");
new Split(arguments); new SplitCli(arguments);
return; return;
} }
if (cli.hasOption("m") || cli.hasOption("merge")){ if (cli.hasOption("m") || cli.hasOption("merge")){
final String[] arguments = cli.getOptionValues("merge"); final String[] arguments = cli.getOptionValues("merge");
new Merge(arguments); new MergeCli(arguments);
return; return;
} }
} }

View file

@ -25,7 +25,7 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class GoldLeaf { public class GoldLeafCli {
private final String[] arguments; private final String[] arguments;
private List<File> filesList; private List<File> filesList;
@ -34,7 +34,7 @@ public class GoldLeaf {
private int parseFileSince = 1; private int parseFileSince = 1;
public GoldLeaf(String[] arguments) throws InterruptedException, IncorrectSetupException{ public GoldLeafCli(String[] arguments) throws InterruptedException, IncorrectSetupException{
this.arguments = arguments; this.arguments = arguments;
checkArguments(); checkArguments();

View file

@ -25,13 +25,13 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class Merge { public class MergeCli {
private String[] arguments; private String[] arguments;
private String saveTo; private String saveTo;
private String[] splitFiles; private String[] splitFiles;
Merge(String[] arguments) throws InterruptedException, IncorrectSetupException{ MergeCli(String[] arguments) throws InterruptedException, IncorrectSetupException{
this.arguments = arguments; this.arguments = arguments;
checkArguments(); checkArguments();
parseArguments(); parseArguments();

View file

@ -22,12 +22,12 @@ import nsusbloader.Utilities.nxdumptool.NxdtTask;
import java.io.File; import java.io.File;
public class NXDT { public class NxdtCli {
private final String[] arguments; private final String[] arguments;
private String saveTo; private String saveTo;
public NXDT(String[] arguments) throws InterruptedException, IncorrectSetupException{ public NxdtCli(String[] arguments) throws InterruptedException, IncorrectSetupException{
this.arguments = arguments; this.arguments = arguments;
parseArgument(); parseArgument();
runBackend(); runBackend();

View file

@ -1,5 +1,25 @@
/*
Copyright 2019-2020 Dmitry Isaenko
This file is part of NS-USBloader.
NS-USBloader is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NS-USBloader is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NS-USBloader. If not, see <https://www.gnu.org/licenses/>.
*/
package nsusbloader.cli; package nsusbloader.cli;
import nsusbloader.Utilities.Rcm;
import java.io.File; import java.io.File;
public class RcmCli { public class RcmCli {
@ -8,19 +28,7 @@ public class RcmCli {
} }
private void runBackend(String payload) throws InterruptedException{ private void runBackend(String payload) throws InterruptedException{
/* Rcm rcm = new nsusbloader.Utilities.Rcm(payload);
boolean isWindows = System.getProperty("os.name").toLowerCase().replace(" ", "").contains("windows");
if (isWindows) {
if (! payload.matches("^.:\\\\.*$"))
payload = System.getProperty("user.dir") + File.separator + payload;
}
else {
if (! payload.startsWith("/"))
payload = System.getProperty("user.dir") + File.separator + payload;
}
*/
nsusbloader.Utilities.Rcm rcm = new nsusbloader.Utilities.Rcm(payload);
Thread rcmThread = new Thread(rcm); Thread rcmThread = new Thread(rcm);
rcmThread.start(); rcmThread.start();
rcmThread.join(); rcmThread.join();

View file

@ -25,13 +25,13 @@ import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class Split { public class SplitCli {
private String[] arguments; private String[] arguments;
private String saveTo; private String saveTo;
private String[] files; private String[] files;
Split(String[] arguments) throws InterruptedException, IncorrectSetupException{ SplitCli(String[] arguments) throws InterruptedException, IncorrectSetupException{
this.arguments = arguments; this.arguments = arguments;
checkArguments(); checkArguments();
parseArguments(); parseArguments();

View file

@ -24,7 +24,7 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class TinfoilNet { public class TinfoilNetCli {
private final String[] arguments; private final String[] arguments;
@ -38,7 +38,7 @@ public class TinfoilNet {
private List<File> filesList; private List<File> filesList;
TinfoilNet(String[] arguments) throws InterruptedException, IncorrectSetupException{ TinfoilNetCli(String[] arguments) throws InterruptedException, IncorrectSetupException{
this.arguments = arguments; this.arguments = arguments;
checkArguments(); checkArguments();
parseNsIP(); parseNsIP();

View file

@ -24,12 +24,12 @@ import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class TinfoilUsb { public class TinfoilUsbCli {
private final String[] arguments; private final String[] arguments;
private List<File> filesList; private List<File> filesList;
public TinfoilUsb(String[] arguments) throws InterruptedException, IncorrectSetupException{ public TinfoilUsbCli(String[] arguments) throws InterruptedException, IncorrectSetupException{
this.arguments = arguments; this.arguments = arguments;
checkArguments(); checkArguments();
parseFilesArguments(); parseFilesArguments();

Binary file not shown.