Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spice and virtio support #141

Open
wants to merge 25 commits into
base: limbo-6
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ gradle
/gradlew.bat
obj/
jniLibs/
QEMU_VERSION

jnilibs
limbotest
Expand Down
6 changes: 6 additions & 0 deletions README.developers
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ https://github.com/limboemu/limbo
wget http://download.qemu-project.org/qemu-5.1.0.tar.xz -P /tmp/
tar -xJf /tmp/qemu-5.1.0.tar.xz
mv qemu-5.1.0 qemu
# For QEMU version 2.9.1:
wget http://download.qemu-project.org/qemu-2.9.1.tar.xz -P /tmp/
tar -xJf /tmp/qemu-2.9.1.tar.xz
mv qemu-2.9.1 qemu

##### GET glib
wget https://ftp.gnome.org/pub/GNOME/sources/glib/2.56/glib-2.56.1.tar.xz -P /tmp/
Expand Down Expand Up @@ -97,6 +101,8 @@ https://github.com/limboemu/limbo
# example for 5.1.0:
cd ./limbo-android-lib/src/main/jni/qemu/
patch -p1 < ../patches/qemu-5.1.0.patch
# for 2.9.1:
patch -p1 < ../patches/qemu-2.9.1.patch

### Apply glib patch for Limbo:
cd ./limbo-android-lib/src/main/jni/glib/
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Limbo Emulator (QEMU) for Android
#
# For APK Downloads, Guides, and Help visit the Limbo Wiki:
# https://github.com/limboemu/limbo/wiki
# For APK Downloads, Guides, and Help visit:
# https://virtualmachinery.weebly.com

Limbo is a QEMU-based emulator for Android supports emulation for these architectures:
x86/x86_64
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
501.00
600.00
2 changes: 1 addition & 1 deletion limbo-android-arm/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ android {

defaultConfig {
applicationId "com.limbo.emu.main.arm"
minSdkVersion 26
minSdkVersion 21
targetSdkVersion 29
ndk { abiFilters "armeabi-v7a","arm64-v8a", "x86", "x86_64" }
}
Expand Down
65 changes: 7 additions & 58 deletions limbo-android-arm/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,75 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.limbo.emu.main.arm"
android:installLocation="auto"
android:versionCode="60000"
android:versionName="6.0.0-arm" >

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-feature android:glEsVersion="0x00020000" />
android:versionName="6.0.0-arm">

<application
android:name="com.max2idea.android.limbo.main.LimboApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@drawable/limbo"
tools:replace="android:label"
android:label="Limbo ARM Emulator"
android:requestLegacyExternalStorage="true"
android:largeHeap="true" >
>
<activity
android:name=".LimboEmuActivity"
android:name="LimboEmuActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="Limbo ARM"
android:launchMode="singleTask"
android:launchMode="singleTop"
android:theme="@style/Theme.AppCompat.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.max2idea.android.limbo.main.LimboFileManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="File Manager" >
</activity>
<activity
android:name="com.max2idea.android.limbo.main.LimboSDLActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat.NoActionBar" >
</activity>
<activity
android:name="com.max2idea.android.limbo.main.LimboSettingsManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="Settings" >
</activity>
<activity
android:name="com.max2idea.android.limbo.links.LinksManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:theme="@style/Theme.AppCompat.NoActionBar"
android:label="Downloads" >
</activity>
<service
android:name="com.max2idea.android.limbo.machine.MachineService"
android:enabled="true"
android:exported="false"
android:label="Limbo Service" >
<intent-filter>
<action android:name="com.max2idea.android.limbo.action.STARTVM" />
</intent-filter>
</service>

</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void onCreate(Bundle bundle){
super.onCreate(bundle);
//TODO: change location to something that the user will have access outside of limbo
// like internal storage
Logger.setupLogFile(LimboApplication.getInstance().getCacheDir() + "/limbo/limbo-arm-log.txt");
Logger.setupLogFile("/limbo/limbo-arm-log.txt");
}

protected void loadQEMULib(){
Expand Down
2 changes: 1 addition & 1 deletion limbo-android-lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ android {
buildToolsVersion '29.0.3'

defaultConfig{
minSdkVersion 26
minSdkVersion 21
targetSdkVersion 29
}
buildTypes {
Expand Down
40 changes: 36 additions & 4 deletions limbo-android-lib/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.limbo.emu.lib"
android:installLocation="auto"
android:versionCode="1"
android:versionName="1" >
>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Expand All @@ -16,6 +16,38 @@
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-feature android:glEsVersion="0x00020000" />


</manifest>
<application
android:name="com.max2idea.android.limbo.main.LimboApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@drawable/limbo"
android:largeHeap="true"
android:requestLegacyExternalStorage="true"
android:theme="@style/Theme.AppCompat">

<activity
android:name="com.max2idea.android.limbo.main.LimboFileManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="File Manager" />
<activity
android:name="com.max2idea.android.limbo.main.LimboSDLActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<activity
android:name="com.max2idea.android.limbo.main.LimboSettingsManager"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize"
android:label="Settings" />
<service
android:name="com.max2idea.android.limbo.machine.MachineService"
android:enabled="true"
android:exported="false"
android:label="Limbo Service">
<intent-filter>
<action android:name="com.max2idea.android.limbo.action.STARTVM" />
</intent-filter>
</service>
</application>
</manifest>
33 changes: 14 additions & 19 deletions limbo-android-lib/src/main/assets/CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,33 +1,28 @@
* Limbo Legacy v6.0.0
Using QEMU 2.9.1 for better performance!
WARNING:
This is version much faster than 5.x but very old and behind many security patches!
Make sure you trust the virtual images and any software you install within the vm!
Changed minimum SDK version to 26 (Oreo and above).
You can still build with Android API 21 without Aaudio option.
Added Android Aaudio native audio interface for lower latency, see settings.
Using 22050 sample rate instead of 44199 for better audio with lesser clicking.
Fixed crashing when resuming due to audio buffer writing.
Fixed android notification not dismissing.
Removed internal VNC client you should check the Wiki for alternative VNC clients.
Built both variants for QEMU 5.1.0 for stability and 2.9.1 for better performance.
WARNING: QEMU 2.9.1 version is much faster than 5.1.0 but very old and
behind many security patches! Install only virtual images and software you trust!
Fixed SDL resizing after rotating and resuming application.
SDL user interface can now disconnect and resume.
VNC Password and Allow External VNC clients are now under settings.
Moved Screen options to settings.
New Pause button for pausing when started VNC user interface.
Machine architecture was not needed so it is now removed, use cpu instead.
Added support for changin idle refresh rate for SDL.
Created KeyMapper for mapping keys and mouse buttons for gaming, see Wiki for info.
Removed internal VNC client you should check the Wiki for alternative VNC clients.
VNC Password and Allow External VNC clients are now under settings.
New Pause button for pausing when started VNC user interface.
Mouse enhancements for Touchscreen and External Mouse.
Absolute mouse devices support only guests that have usb-tablet drivers installed.
Added new out of bounds prevention option for mouse.
Added new Key and Mouse delay options.
Global screen options are now moved to Menu Settings.
Machine architecture was not needed so it is now removed.
Removed Shared Folder because it is buggy.
Internal redesign of the ui dispatching and interface with native code.
Added Android Aaudio native audio interface for lower latency (Oreo and above only).
Using 22050 sample rate instead of 44199 for better audio with lesser clicking.
Fixed crashing when resuming due to audio buffer writing.
Internal redesign of the Android user interface.
Better build environment for development.
Fixed clang support with ndk r23
Upgraded libraries to ffi ver 3.3 and pixman ver 0.40.0
Removed patch for QEMU 4.0.0 the only versions currently support are 2.9.1 and 5.1.0.
Building with ndk r23 clang by default, r14b gcc is also supported.
Upgraded libraries: ffi 3.3 and pixman 0.40.0


* Limbo v5.1.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -370,18 +370,18 @@ public void run() {
t.start();
}

public static String LoadFile(Activity activity, String fileName, boolean loadFromRawFolder) throws IOException {
public static String LoadFile(Context context, String fileName, boolean loadFromRawFolder) throws IOException {
// Create a InputStream to read the file into
InputStream iS;
if (loadFromRawFolder) {
// get the resource id from the file name
int rID = activity.getResources().getIdentifier(activity.getClass().getPackage().getName() + ":raw/" + fileName,
int rID = context.getResources().getIdentifier(LimboApplication.getInstance().getClass().getPackage().getName() + ":raw/" + fileName,
null, null);
// get the file as a stream
iS = activity.getResources().openRawResource(rID);
iS = context.getResources().openRawResource(rID);
} else {
// get the file as a stream
iS = activity.getResources().getAssets().open(fileName);
iS = context.getResources().getAssets().open(fileName);
}

ByteArrayOutputStream oS = new ByteArrayOutputStream();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,10 @@ public class Help {
private static final String TAG = "Help";

public static void showHelp(final Activity activity) {
PackageInfo pInfo = LimboApplication.getPackageInfo();

final AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(activity).create();
alertDialog.setTitle(Config.APP_NAME + " v" + pInfo.versionName + " (" + Config.emuVersion.name().replace("_", ".") + ")");
alertDialog.setTitle(Config.APP_NAME + " " + LimboApplication.getLimboVersionString()
+ " " + "QEMU" + " " + LimboApplication.getQemuVersionString() );

LinearLayout mLayout = new LinearLayout(activity);
mLayout.setOrientation(LinearLayout.VERTICAL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ private native String start(String storage_dir, String base_dir,

public native void nativeRefreshScreen(int value);

public native void nativeEnableAaudio(int value);
public native void nativeEnableAaudio(int value, String aaudioLibName, String aaudioLibPath);

/**
* Prints parameters in qemu format
Expand Down Expand Up @@ -284,7 +284,7 @@ private void addGenericOptions(Context context, ArrayList<String> paramsList) {
paramsList.add(Config.tbSize); //Don't increase it crashes
}

if (Config.emuVersion.ordinal() <= Config.EMU_VERSION.QEMUv2_9_1.ordinal()) {
if (LimboApplication.getQemuVersion() == 20901) {
paramsList.add("-realtime");
paramsList.add("mlock=off");
} else {
Expand Down Expand Up @@ -861,7 +861,9 @@ public void setFullscreen() {

@Override
public void enableAaudio(int value) {
nativeEnableAaudio(value);
nativeEnableAaudio(value, Config.aaudioLibName,
FileUtils.getNativeLibDir(LimboApplication.getInstance())
+ "/" + Config.aaudioLibName);
}

//TODO: re-enable getting status from the vm
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public class KeyMapManager {
private SimpleAdapter keyMapperAdapter;
private EditText mKeyMapperName;
private HashMap<String, Object> selectedMap;
private int lastOrientation = -1;

public KeyMapManager(Activity activity, View view, int rows, int cols) throws Exception {
this.activity = activity;
Expand Down Expand Up @@ -125,10 +126,12 @@ public boolean toggleKeyMapper() {
mapperEditLayout.setVisibility(View.GONE);
mapperButtons.setVisibility(View.GONE);
clearKeyMapper();
ScreenUtils.updateOrientation(activity, lastOrientation);
shown = false;
} else {
mapperEditLayout.setVisibility(View.VISIBLE);
mapperButtons.setVisibility(View.VISIBLE);
lastOrientation = activity.getResources().getConfiguration().orientation;
shown = true;
}
return shown;
Expand Down Expand Up @@ -481,7 +484,7 @@ public void useKeyMapper() {
KeyboardUtils.hideKeyboard(activity, view);
mapperEditLayout.setVisibility(View.GONE);
mapperButtons.setVisibility(View.VISIBLE);
ScreenUtils.updateOrientation(activity);
ScreenUtils.updateOrientation(activity, lastOrientation);
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,9 @@ private void requestFieldChange(MachineProperty property, Object value) {
case INITRD:
getMachine().setInitRd(convertString(property, value));
break;
case APPEND:
getMachine().setAppend(convertString(property, value));
break;
case BOOT_CONFIG:
getMachine().setBootDevice(convertString(property, value));
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ public enum EMU_VERSION {

// stack size to remove an issue with SDL Audio
public static long stackSize = 10 * 1024 * 1024;
// native alternative to audio track
public static String aaudioLibName = "libcompat-SDL2-addons.so";

// if you don't want to enable software updates set to false
public static boolean enableSoftwareUpdates = true;
Expand Down
Loading