2016-05-05 3 views
3

Здравствуйте, я хотел бы знать, что является идеальным способом определить, работает ли jar/java-программа на малине pi или нет.Идеальный способ обнаружения малины pi из java (jar)

Почему я хочу этого? Я хочу использовать сторожевой таймер в малине pi, но также я использую программу java из окон, которая не требует или не требует сторожевого пса.

Есть ли способ определить, работает ли банка на малине, так же, как некоторые люди обнаруживают оперативную систему?

Точно так же люди используют, что ...

class ShowProperties { 
    public static void main(String[] args) { 
     System.getProperties().list(System.out); 
    } 
} 
+0

'Система.getenv ("PROCESSOR_IDENTIFIER") 'get - это имя процессора. Что он возвращает на Pi? –

ответ

1

Вы должны быть в состоянии отработать детали операционной системы вашего виртуальная машина Java выполняется на проверяя значения этих свойств системы Java:

  • os.name Рабочее название системы
  • os.arch архитектура операционной системы
  • os.version Operatin g версия системы

Используйте System.getProperty(name) для получения значения системного свойства.


Если это не является достаточно точным, то вам необходимо обратиться к непереносимым решениям, таким как использование System.exec(...) для запуска uname -1 или аналогичной.

Примечание: «raspberrypi», который вы видите в своей системе, фактически является именем хоста по умолчанию и не является надежным индикатором. (Он часто будет установлен пользователем для чего-то другого.)

+0

Я думаю, что это мало помогает. Он содержит следующую информацию: - 'Linux 4.1.19+ arm' Вместо uname -a в командной строке дает следующую информацию: - ' Linux raspberrypi 4.1.19+ # 858 Вт 15 марта 15:52: 03 GMT 2016 armv6l GNU/Linux'. Теперь мне было интересно, есть ли способ прочитать информацию из некоторых sysfs или procf. – Siddharth

0

Как и Стивен С, вы можете использовать свойства os. *.

Вы можете запустить uname -a из своего приложения Java, но это, вероятно, плохая идея, потому что формат сильно варьируется. Мой RPI2 работает OMC (медиаплеер дистрибутив) я получаю с кодом:

os.arch=arm 
os.name=Linux 
os.version=4.4.6-3-osmc 

и uname -a сообщает:

Linux osmc 4.4.6-3-osmC#1 SMP PREEMPT Fri Apr 1 20:55:03 UTC 2016 armv7l GNU/Linux 

Также вы можете взглянуть на проект PI4J. У них есть example, который выводит информацию о запущенном PI. Попытайтесь увидеть код, как они это делают.

0

Вот какой-то код из одного из моих вспомогательных классов. Обратите внимание, как isPiUnix имеет значение true. Этот метод основан на значении PRETTY_NAME или NAME в файле os-release. Tweak необходимо определить любые варианты поддерживаемых систем. Обратите внимание, что isLinux и isPiLinux оба возвращает истину при работе на Pi, который, как ожидается. Вам нужно всего лишь проверить на isPiLinux.

private static boolean isWindows  = false; 
private static boolean isLinux   = false; 
private static boolean isHpUnix  = false; 
private static boolean isPiUnix  = false; 
private static boolean isSolaris  = false; 
private static boolean isSunOS   = false; 
private static boolean archDataModel32 = false; 
private static boolean archDataModel64 = false; 

static { 
    final String os = System.getProperty("os.name").toLowerCase(); 
    if (os.indexOf("windows") >= 0) { 
     isWindows = true; 
    } 
    if (os.indexOf("linux") >= 0) { 
     isLinux = true; 
    } 
    if (os.indexOf("hp-ux") >= 0) { 
     isHpUnix = true; 
    } 
    if (os.indexOf("hpux") >= 0) { 
     isHpUnix = true; 
    } 
    if (os.indexOf("solaris") >= 0) { 
     isSolaris = true; 
    } 
    if (os.indexOf("sunos") >= 0) { 
     isSunOS = true; 
    } 
    if (System.getProperty("sun.arch.data.model").equals("32")) { 
     archDataModel32 = true; 
    } 
    if (System.getProperty("sun.arch.data.model").equals("64")) { 
     archDataModel64 = true; 
    } 
    if (isLinux) { 
     final File file = new File("/etc", "os-release"); 
     try (FileInputStream fis = new FileInputStream(file); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis))) { 
      String string; 
      while ((string = br.readLine()) != null) { 
       if (string.toLowerCase().contains("raspbian")) { 
        if (string.toLowerCase().contains("name")) { 
         isPiUnix = true; 
         break; 
        } 
       } 
      } 
     } catch (final Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^