Hello all,
Just got my first android phone. I need to port a tiny C application I have to my phone. It worked when I compiled a static binary but now I'm trying to compile a dynamic one, but before that, I'm trying to run a native hello world on it but not having much luck. When I run it on the emulator, it prints "Hello world" and then segfaults after that. When I run it on the phone, it doesn't even get that far. It says link_image[1995] CANNOT LINK EXECUTABLE.
These are my test files
test.c
Code:
#include <stdio.h>
int main (int argc, char *argv[])
{
printf ("Hello world!\n");
return 0;
}
Makefile
Code:
APP := test
ROOT:=$(HOME)/Projects/Android
NDK_PLATFORM_VER := 8
INSTALL_DIR := /data/tmp
ANDROID_NDK_ROOT:=$(ROOT)/android-ndk-r5b
ANDROID_NDK_HOST:=linux-x86
ANDROID_SDK_ROOT:=$(ROOT)/android-sdk-linux_x86
PREBUILD:=$(ANDROID_NDK_ROOT)/toolchains/arm-eabi-4.4.0/prebuilt/$(ANDROID_NDK_HOST)
BIN := $(PREBUILD)/bin
CPP := $(BIN)/arm-eabi-g++
CC := $(BIN)/arm-eabi-gcc
CFLAGS := -I$(ANDROID_NDK_ROOT)/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/include -fno-short-enums
LDFLAGS := -Wl,--entry=main,-rpath-link=$(ANDROID_NDK_ROOT)/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib,-dynamic-linker=/system/bin/linker -L$(ANDROID_NDK_ROOT)/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib
LDFLAGS += -nostdlib -lc -disable-multilib
all: $(APP)
OBJS += $(APP).o
$(APP): $(OBJS)
$(CPP) $(LDFLAGS) -o [email protected] $^
%.o: %.c
$(CC) -c $(INCLUDE) $(CFLAGS) $< -o [email protected]
install: $(APP)
$(ANDROID_SDK_ROOT)/platform-tools/adb push $(APP) $(INSTALL_DIR)/$(APP)
$(ANDROID_SDK_ROOT)/platform-tools/adb shell chmod 777 $(INSTALL_DIR)/$(APP)
shell:
$(ANDROID_SDK_ROOT)/platform-tools/adb shell
run:
$(ANDROID_SDK_ROOT)/platform-tools/adb shell $(INSTALL_DIR)/$(APP)
r: $(APP)
$(ANDROID_SDK_ROOT)/platform-tools/adb push $(APP) $(INSTALL_DIR)/$(APP)
$(ANDROID_SDK_ROOT)/platform-tools/adb shell chmod 777 $(INSTALL_DIR)/$(APP)
$(ANDROID_SDK_ROOT)/platform-tools/adb shell $(INSTALL_DIR)/$(APP)
clean:
@echo "Cleaning up..."
rm -f $(APP).o $(APP)
Output:
Code:
[[email protected] app]$ make run
/home/hacker/Projects/Android/android-sdk-linux_x86/platform-tools/adb shell /data/tmp/test
Hello world!
[1] Segmentation fault /data/tmp/test
[[email protected] app]$
Output (on the phone):
Code:
# /data/local/test
link_image[1995]: failed to link /data/local/test
CANNOT LINK EXECUTABLE
#
What am I doing wrong?
I've never been successful with dynamic executables using a plain Makefile. I've always had to use the JNI approach with an appropriate Android.mk configuration. To do this, make an empty directory for your project. Within this directory, make a dir called "jni" and cd to it and copy your "hello.c" source file there. Add an Andriod.mk file that looks like this:
Code:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_EXECUTABLE)
Then, with the ndk path set appropriately (ie, on my system):
Code:
export PATH=${PATH}:/usr/src/android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/
just run the ndk-build script (again, modify to point to your ndk installation):
Code:
/usr/src/android-ndk-r4b/ndk-build
This will produce two additional directories in the dir above "jni": "obj" and "libs". In the libs/armeabi/ dir, you'll find your (non-stripped) executable.
Just curious, where'd you get the Makefile? It looks like it should work, but I can't really see where it is getting it's libc.so.
I got the Makefile from http://betelco.blogspot.com/2010/01/buildingdebugging-android-native-c.html
It's for Cygwin so I made a few changes. The last comment says I should link it against crtend_android.o to prevent the segfaults but that didn't work for me. Maybe I did something wrong. I'm not really a C programmer and the only experience I have is with writing extremely basic apps so, honestly, I don't know much about linking but I'm trying to let that not discourage me from trying. It usually takes me days to get something simple done but it feels great once I manage to get my app to work.
I'll try your approach in a few hours and post back.
Oh, and I thought I should mention my phone is running Froyo at the moment.
Since I'm completely new to writing code on the phone, I thought I should ask if it is a bad idea to push the app to the phone and run it directly or should I really be using the emulator instead (since I'm not an experienced programmer)? I've got a very old PC and the emulator is slow as hell on it so it'll be great if i can avoid that.
I visited that site and read over their comments and modified the makefile at the end to match my system (gentoo linux) and it works fine on my phone (HTC Inspire 4G). I didn't do the "make run" thing, but just "make" and then pushed it to my phone manually and ran it from an adb shell. Worked fine. I'm using the r4b plaform ndk so that might be something. I'll D/L the r5b ndk and check it out.
I tried what you suggested and it works perfectly. Thanks!
Gene Poole said:
I visited that site and read over their comments and modified the makefile at the end to match my system (gentoo linux) and it works fine on my phone (HTC Inspire 4G). I didn't do the "make run" thing, but just "make" and then pushed it to my phone manually and ran it from an adb shell. Worked fine. I'm using the r4b plaform ndk so that might be something. I'll D/L the r5b ndk and check it out.
Click to expand...
Click to collapse
I still do have a segmentation fault... I stated all what I did here :
http://stackoverflow.com/questions/20936770/android-command-line-executable
Any good idea would be appreciated !
Thx
I have already discussed how to unpack/repack the boot.img file.
Now let's try to recompile the android kernel.
You will need some packages not included in a default Ubuntu 11.04 installation:
Code:
sudo apt-get install git unrar libncurses5-dev qt3-dev-tools
Unrar and git are the only necessary packages.
Install libncurses if you want to modify the kernel configuration with the command line menu.
Otherwise, if you want a graphical interface, go with qt3.
Please refer to the documentation of your linux distro for help on how to install additional packages.
For the purpose of this guide we are going to rebuild the official asus kernel with no modifications.
Download the latest kernel source from the ASUS site (atm 2.6.36.3)
Code:
wget http://dlcdnet.asus.com/pub/ASUS/EeePAD/TF101/Eee_PAD_TF101_Kernel_Code_8_4_4_11.rar
Now unpack it:
Code:
unrar e Eee_PAD_TF101_Kernel_Code_8_4_4_11.rar
tar xvfz kernel-3eb19ec-fix-lic.tar.gz
We need a config file for the compile process.
The config file essentially sets features ON or OFF from the final kernel (yes, I know that is much more than this...).
If your tablet is upgraded to the latest build (8.4.4.11) you can extract the config file from your running device:
Code:
adb pull /proc/config.gz ./
Or you can find it attached to this post (the forum won't allow to upload a .gz file, so i made a .zip file; use unzip instead of gunzip).
Now uncompress and move it into the kernel dir (renaming it in .config).
Code:
gunzip config.gz
cp config kernel-3eb19ec/.config
Now the not-so-fun part.
We will need a compiler for the arm platform.
The android source comes with the arm compiler. You can download it following this instructions http://source.android.com/source/downloading.html .
The only problem is that the repository is about 2.6GB...
So we are going to download only the prebuilt toolchain (1,8GB):
Code:
git clone git://android.git.kernel.org/platform/prebuilt.git
After git finishes his download, you will have a new directory called "toolchain".
We have to set some environment variables (i assume you have downloaded the toolchain in your home directory):
Code:
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
export PATH=$PATH:~/toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/
Ok, the compiler is installed and configured.
It's time to come back to the kernel source.
If you want to modify some settings in your config file (!!AT YOUR OWN RISK!!) you can edit the .config file or use a graphical interface.
Code:
cd kernel-3eb19ec
make xconfig (make menuconfig if you prefer a command-line menu)
Now we can compile the android kernel:
Code:
make -j4
Our new kernel is stored in : arch/arm/boot/zImage
We can use it for make a boot image and flash in our TF101 (use this guide http://forum.xda-developers.com/showthread.php?t=1193737)
Let me say this again: I'm not an expert in android kernel/compiler.
If you find something wrong with this guide, please tell me.
I've learned this with google and by trial and error.
If you brick something don't blame on me.
If you want to hit "thanks", you're welcome.
Have Fun!
Pulling out config.gz you will get the current kernel configuration...it could not fit the stock kernel..
gnufabio said:
Pulling out config.gz you will get the current kernel configuration...it could not fit the stock kernel..
Click to expand...
Click to collapse
Of course the kernel source has to be exactly the same version as the running kernel for this to work.
In this example, the source and running kernel were both 2.6.36.3 (build 8.4.4.11).
For use an older .config (or a newer source tree), we should run:
Code:
make oldconfig
to adapt them (...kinda).
Thanks for point this out.
I was eventually planning on making this guide, good work!
gnufabio said:
Pulling out config.gz you will get the current kernel configuration...it could not fit the stock kernel..
Click to expand...
Click to collapse
This is a possibility if anything in the config changes from the kernel you're running in the actual source Asus has posted
I've always done the following:
Code:
make tegra_defconfig
make
I haven't actually checked to see if this is up to date with a running kernel, just noticed Asus pops up a few times in there.
Actually this is the default TF101 config: tf101_defconfig
Thanks for the guides. These are really helpful -
Hashi
I'm getting this set of errors. I've built and modified many linux kernels, so I'm guessing this is in the toolchain area, and am wondering if it needs to know something else for where to look at dynamic load libraries, etc?
I created a shell script to setup / export the shell environment vars. It looks like this:
Code:
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
export PATH=$PATH:~/sandbox/android-sdk-linux_x86/toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/
I'm using a PC I use for work ARM cross compiles that is 64 bit Ubuntu 9.10.
Thanks --
--- make -j4 errors ---
Code:
[email protected]:~/sandbox/android-sdk-linux_x86/kernel/kernel-3eb19ec$ make -j4
arm-eabi-gcc: /lib32/libc.so.6: version `GLIBC_2.11' not found (required by arm-eabi-gcc)
CHK include/linux/version.h
CHK include/generated/utsrelease.h
CC scripts/mod/empty.o
arm-eabi-gcc: /lib32/libc.so.6: version `GLIBC_2.11' not found (required by arm-eabi-gcc)
make[2]: *** [scripts/mod/empty.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: `include/generated/mach-types.h' is up to date.
make[1]: *** [scripts/mod] Error 2
CC kernel/bounds.s
arm-eabi-gcc: /lib32/libc.so.6: version `GLIBC_2.11' not found (required by arm-eabi-gcc)
make: *** [scripts] Error 2
make: *** Waiting for unfinished jobs....
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2
[email protected]:~/sandbox/android-sdk-linux_x86/kernel/kernel-3eb19ec$
In searching for the basic problem, that arm*gcc can't see libc.so.6 in the version it wants, I think it's not seeing this at all:
~/sandbox/android-sdk-linux_x86/kernel/kernel-3eb19ec$ find ../../toolchain/ -iname libc.so.6 -exec ls -al {} \;
lrwxrwxrwx 1 hashi hashi 11 2011-08-01 15:58 ../../toolchain/prebuilt/linux-x86/toolchain/i686-linux-glibc2.7-4.4.3/sysroot/usr/lib/libc.so.6 -> libc-2.7.so
[email protected]:~/sandbox/android-sdk-linux_x86/kernel/kernel-3eb19ec$
thanks. I'm not new to kernel compiling but I'm new to android
hachamacha said:
I'm getting this set of errors. I've built and modified many linux kernels, so I'm guessing this is in the toolchain area, and am wondering if it needs to know something else for where to look at dynamic load libraries, etc?
I created a shell script to setup / export the shell environment vars. It looks like this:
Code:
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
export PATH=$PATH:~/sandbox/android-sdk-linux_x86/toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/
I'm using a PC I use for work ARM cross compiles that is 64 bit Ubuntu 9.10.
Thanks --
--- make -j4 errors ---
Code:
[email protected]:~/sandbox/android-sdk-linux_x86/kernel/kernel-3eb19ec$ make -j4
arm-eabi-gcc: /lib32/libc.so.6: version `GLIBC_2.11' not found (required by arm-eabi-gcc)
CHK include/linux/version.h
CHK include/generated/utsrelease.h
CC scripts/mod/empty.o
arm-eabi-gcc: /lib32/libc.so.6: version `GLIBC_2.11' not found (required by arm-eabi-gcc)
make[2]: *** [scripts/mod/empty.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: `include/generated/mach-types.h' is up to date.
make[1]: *** [scripts/mod] Error 2
CC kernel/bounds.s
arm-eabi-gcc: /lib32/libc.so.6: version `GLIBC_2.11' not found (required by arm-eabi-gcc)
make: *** [scripts] Error 2
make: *** Waiting for unfinished jobs....
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2
[email protected]:~/sandbox/android-sdk-linux_x86/kernel/kernel-3eb19ec$
In searching for the basic problem, that arm*gcc can't see libc.so.6 in the version it wants, I think it's not seeing this at all:
~/sandbox/android-sdk-linux_x86/kernel/kernel-3eb19ec$ find ../../toolchain/ -iname libc.so.6 -exec ls -al {} \;
lrwxrwxrwx 1 hashi hashi 11 2011-08-01 15:58 ../../toolchain/prebuilt/linux-x86/toolchain/i686-linux-glibc2.7-4.4.3/sysroot/usr/lib/libc.so.6 -> libc-2.7.so
[email protected]:~/sandbox/android-sdk-linux_x86/kernel/kernel-3eb19ec$
Click to expand...
Click to collapse
The toolchain has everything it needs for compile the kernel.
The problem seems to be your 64 bit...
The arm compiler is built against 32bit version of glibc library; I think you already have a multilib environment (you have a /lib32 dir). Maybe the 32bit verion of the glibc is not the correct version.
Try this command:
Code:
ldd ~/sandbox/android-sdk-linux_x86/toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc
And look what it says for the libc.so.6. In my system it says it is located in /lib/i386-linux-gnu/libc.so.6. So if I run it:
Code:
$ /lib/i386-linux-gnu/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.13-0ubuntu13) stable release version 2.13, by Roland McGrath et al.
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.5.2.
Compiled on a Linux 2.6.38 system on 2011-04-11.
Available extensions:
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.
The first line tell the version number. If it's older than 2.11 you need to update your multilib libc.
gnufabio said:
Actually this is the default TF101 config: tf101_defconfig
Click to expand...
Click to collapse
This is for 2.6.36.3 but seems way older. It says "Fri Mar 25 19:50:17 2011".
Maybe it's from an old build?
The last ASUS config (the one attached to the first post) is "Mon Jul 11 14:47:43 2011".
Brilliant!
I had problems cloning using the git protocol because of a corporate firewall, but the HTTP method worked fine:
Code:
http://android.git.kernel.org/platform/prebuilt.git
I also found the the toolchain with the Android NDK failed to build the kernel but the one linked to in the OP worked perfectly.
SammyC said:
I also found the the toolchain with the Android NDK failed to build the kernel but the one linked to in the OP worked perfectly.
Click to expand...
Click to collapse
Yes, I have tried this also, with the same result.
Someone said that the codesourcery compiler can compile the android kernel.
I have tried, it compiles all, but when i flash on the tablet it stucks on the boot screen.
Initially I wrote the guide using this compiler (it's smaller and has a graphical installer), when i realized that it doesn't work , i switched back to the android official compiler.
If someone want to try with the codesourcery compiler here's the (unsuccessful) process I have used:
!!ATTENTION!!: ATM THIS DOESN'T WORK
An easier (and somewhat faster) way is downloading the Code Sorcery's "Code Bench" compiler (http://www.codesourcery.com/) and install it.
Code:
wget http://www.codesourcery.com/sgpp/lite/arm/portal/package8741/public/arm-none-linux-gnueabi/arm-2011.03-41-arm-none-linux-gnueabi.bin
This compiler need some extra packages to work in Ubuntu:
Code:
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind
For some reason, in Ubuntu 11.04 the /bin/sh link refer to the dash shell and not bash.
The compiler's installer will comply for this, so we do as follows:
Code:
sudo dpkg-reconfigure -plow dash
and when it asks to use dash as the default shell, click on "NO"
Code:
sh arm-2011.03-41-arm-none-linux-gnueabi.bin
Leave all the default options. The installer will copy the files in your home directory.
We should set some environmet variables:
Code:
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabi-
export PATH=$PATH:~/CodeSourcery/Sourcery_G++_Lite/bin
Click to expand...
Click to collapse
Then continue with the guide from the "make xconfig".
If someone can make it work with this compiler, could be so gentle to tell us how?
rebound821 said:
The toolchain has everything it needs for compile the kernel.
The problem seems to be your 64 bit...
The arm compiler is built against 32bit version of glibc library; I think you already have a multilib environment (you have a /lib32 dir). Maybe the 32bit verion of the glibc is not the correct version.
Try this command:
Code:
ldd ~/sandbox/android-sdk-linux_x86/toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc
And look what it says for the libc.so.6. In my system it says it is located in /lib/i386-linux-gnu/libc.so.6. So if I run it:
Code:
$ /lib/i386-linux-gnu/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.13-0ubuntu13) stable release version 2.13, by Roland McGrath et al.
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.5.2.
Compiled on a Linux 2.6.38 system on 2011-04-11.
Available extensions:
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.
The first line tell the version number. If it's older than 2.11 you need to update your multilib libc.
Click to expand...
Click to collapse
Thanks again -- I'll try that out as soon as I'm back in TF mode.
Code:
~/sandbox/android-sdk-linux_x86/toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: /lib32/libc.so.6: version `GLIBC_2.11' not found (required by ~/sandbox/android-sdk-linux_x86/toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc)
linux-gate.so.1 => (0xf77e0000)
libc.so.6 => /lib32/libc.so.6 (0xf7677000)
/lib/ld-linux.so.2 (0xf77e1000)
^^ that was from the first command
Code:
GNU C Library (EGLIBC) stable release version 2.10.1, by Roland McGrath et al.
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.1.
Compiled on a Linux >>2.6.24-27-server<< system on 2011-01-11.
Available extensions:
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
For bug reporting instructions, please see:
<http://www.eglibc.org/issues/>.
And ^^ from the second.
It looks like with 9.10 Ubuntu, (backporting something from 10 or 11.x notwithstanding), I can't easily get to GLIBC 2.11 from GLIBC 2.10.x. Thanks. I'll put together an 11.x VM for this task.
For 64bit machines, you might need to do the following?
apt-get install ia32-libs
raypou said:
For 64bit machines, you might need to do the following?
apt-get install ia32-libs
Click to expand...
Click to collapse
Thanks, I managed to download a ARM toolchain from their site that works fine with Ubuntu 9.10 64 bit.
Whether or not it'll run when I try to install a kernel is another question, but it builds without problem and produces ARM code.
rebound821 said:
Yes, I have tried this also, with the same result.
Someone said that the codesourcery compiler can compile the android kernel.
I have tried, it compiles all, but when i flash on the tablet it stucks on the boot screen.
Initially I wrote the guide using this compiler (it's smaller and has a graphical installer), when i realized that it doesn't work , i switched back to the android official compiler.
If someone want to try with the codesourcery compiler here's the (unsuccessful) process I have used:
!!ATTENTION!!: ATM THIS DOESN'T WORK
Then continue with the guide from the "make xconfig".
If someone can make it work with this compiler, could be so gentle to tell us how?
Click to expand...
Click to collapse
Wow can't believe I found this thread. I just want to confirm that I'm also having a horrible time with the code sourcery toolchain trying to compile the android kernel, the moto atrix kernel specifically. The zimage compiles, but flashing to the device it just hangs.
So im currently downloading the official android toolchain.
Also some learned knowledge for everybody, the correct code sourcery toolchain supposedly android equivalent is arm-none-linux-gnueabi-, NOT the arm-none-eabi- or any of the others. This info is very hard to find fyi.
However as this thread seems to prove, even using the correct one doesn't exactly work.
Hi,
I'm trying to build the stock Memo Pad smart(ME301t) stock kernel 10.6.1.29 downloaded directly from asus.
I used 4.3.3 to 4.7 toolchains with similar results(give or take some deprecated compiler arguments).
What I really want to know is why I'm getting a lot of warnings(NOT ERRORS), some of them are minor errors like "unused function" and some of them are major warnings breaking function functionality. Some of the builds don't even boot.
What toolchain should I use with this kernel?
Why a stock kernel(from asus) should produce warnings at the first place?
I'm on linux BTW.
Hi,
This is a guide on compiling the latest (as of 2015-06-24) dropbear SSH daemon (2015.67) for the Zenfone 2 but should also work for other x86-64 architecture Android devices. The guide is mainly based off the work from the blog http://blog.xulforum.org/index.php?post/2013/12/19/Compiling-Dropbear-for-a-Nexus-7-tablet which is an excellent guide to getting an older version of dropbear running on Android devices.
I've modified the patch made by the original author to work on the latest dropbear version. There are not much changes from ver 2013.58 to 2015.67. The main difference seems to be the support for Elliptical Curve encryption.
** START DISCLAIMER **
I did not write the original codes/patch myself and have not scrutinized it for any security issues. USE IT AT YOUR OWN RISK.
** END DISCLAIMER **
Here's the list of requirements :-
1) Dropbear 2015.67 source code - dropbear-2015.67.tar.bz2 (https://matt.ucc.asn.au/dropbear/releases/dropbear-2015.67.tar.bz2)
2) Patch to compile for Android - dropbear-v67-android-patch-20150629 (https://goo.gl/LBokgG)
3) A recent Linux distro (I use Ubuntu 14.04.2 LTS) running x86-64.
4) Development tools i.e. C compiler, linker, etc... all the necessary tools to run configure, make, etc..
Steps :-
(1) Extract the source code to a directory of its own :-
Code:
tar xjf dropbear-2015.67.tar.bz2
cd dropbear-2015.67
(2) Patch the source :-
Code:
patch -p1 < dropbear-v67-android-patch-20150629
(3) Run configure :-
Code:
./configure --disable-zlib --disable-largefile --disable-loginfunc \
--disable-shadow --disable-utmp --disable-utmpx --disable-wtmp \
--disable-wtmpx --disable-pututline --disable-pututxline --disable-lastlog
(4) Run make :-
Code:
STATIC=1 MULTI=1 SCPPROGRESS=0 PROGRAMS="dropbear dropbearkey scp dbclient" make strip
(5) You should end up with a single static binary "dropbearmulti" which you should link dropbear, dbclient/ssh, dropbearkey and scp to.
Code:
./dropbear -h
Dropbear server v2015.67 [URL]https://matt.ucc.asn.au/dropbear/dropbear.html[/URL]
Usage: ./dropbear [options]
-A Android Mode, specify a user explicitly
-N Android Mode, user name
-C Android Mode, password
-R Android Mode, public key file (authorized_keys)
-U Android Mode, UID
-G Android Mode, GID
-b bannerfile Display the contents of bannerfile before user login
(default: none)
-r keyfile Specify hostkeys (repeatable)
defaults:
dss /etc/dropbear/dropbear_dss_host_key
rsa /etc/dropbear/dropbear_rsa_host_key
ecdsa /etc/dropbear/dropbear_ecdsa_host_key
-F Don't fork into background
-E Log to stderr rather than syslog
-m Don't display the motd on login
-w Disallow root logins
-s Disable password logins
-g Disable password logins for root
-B Allow blank password logins
-j Disable local port forwarding
-k Disable remote port forwarding
-a Allow connections to forwarded ports from any host
-p [address:]port
Listen on specified tcp port (and optionally address),
up to 10 can be specified
(default port is 22 if none specified)
-P PidFile Create pid file PidFile
(default /var/run/dropbear.pid)
-i Start for inetd
-W <receive_window_buffer> (default 24576, larger may be faster, max 1MB)
-K <keepalive> (0 is never, default 0, in seconds)
-I <idle_timeout> (0 is never, default 0, in seconds)
-V Version
I will assume you know what to do with the binary file generated so will not elaborate on the process.
Hope it works for you guys. I'll be happy to help out anyone who needs more details.
Cheers.
UPDATE: 2015-06-29
- I've updated the patch to fix dbclient/ssh client using password authentication.
Hi all,
For those of you using the dropbear ssh client and encountering a seg fault when using password authentication, I've fixed the patch now and it should be working.
Cheers.
wolfdude said:
I will assume you know what to do with the binary file generated so will not elaborate on the process.
Hope it works for you guys. I'll be happy to help out anyone who needs more details.
Click to expand...
Click to collapse
Ehm...
Replacing the not working dropbear binaries of ARM-oriented SSHD servers with a link to this should solve the problem discussed here ...
is it right ?!
Thanks again
Val3r10 said:
Ehm...
Replacing the not working dropbear binaries of ARM-oriented SSHD servers with a link to this should solve the problem discussed here ...
is it right ?!
Thanks again
Click to expand...
Click to collapse
In a nutshell, you will need to copy dropbearmulti to /system/xbin, create some symbolic links to it (dropbear, dropbearkey, dbclient, scp), run dropbearkey to generate your host keys, copy your client pubkey to /data/dropbear/authorized_keys and then startup dropbear with parameters like :-
Code:
dropbear -A -N root -R /data/dropbear/authorized_keys
Hope this helps.
Cheers.
wolfdude said:
[...] and then startup dropbear with parameters like :-
Hope this helps.
Click to expand...
Click to collapse
Thanks. Got that.
Actually I mean I would replace - with the symlink - the x86 binary file inside one of the above mentionned packages, i.e. QuickSSHd or SSHDroid, to make them compatible with ZE55xML...
I'm trying and reporting here
Update: A new thread is created to house "premade" linux distros. The first premade environment is an Ubuntu distro, installed using proot-distro in termux, Takes only a few minutes to restore the backup, else instructions are provided to build the environment yourself from scratch.
[GUIDE][NO-ROOT] How to install Ubuntu and other Linux Distros on Your Phone or Android TV Box, using Termux
NOTICE: THIS METHOD IS ONLY FOR NON ROOTED DEVICES PROOT-DISTRO GITHUB PAGE Hello Friends! Today I wanted to start a thread that will house prebuilt Linux environments, as well as instructions for building the Linux environments yourself...
forum.xda-developers.com
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Or you can visit this thread and use method 2 to remote connect to your phone using windows RDC and have a much easier time programing vms in termux's qemu. A warning the windows arm editions break xrdp at least for me. It may be user error, I am unsure. Let me know if you have trouble too or success
[GUIDE][NO-ROOT] How to Remotely Connect to Your Phone, or Any Android Device, Using Termux and a PC
Hello Friends~! Today I wanted to teach you how to remotely connect to your phone, or any android device, using Termux and a PC. This example assumes your android device is on the same wireless network as your pc. In order to remote into our...
forum.xda-developers.com
Spoiler: UBUNTU ARM 64 FOR PHONE IN TERMUX
This machine seems to be working fine out of the box
How To Install Windows Or Linux ISOs on your Android Devices - Windows 10 Nox Lab + Working Arm Distros for your phone using Termux
Update: A new thread is created to house "premade" linux distros. The first premade environment is an Ubuntu distro, installed using proot-distro in termux, Takes only a few minutes to restore the backup, else instructions are provided to build...
forum.xda-developers.com
Spoiler: KALI LINUX NETHUNTER FOR PHONE IN TERMUX
This machine runs amazing once you do all the troubleshooting steps included in the comments
How To Install Windows Or Linux ISOs on your Android Devices - Windows 10 Nox Lab + Working Arm Distros for your phone using Termux
Update: A new thread is created to house "premade" linux distros. The first premade environment is an Ubuntu distro, installed using proot-distro in termux, Takes only a few minutes to restore the backup, else instructions are provided to build...
forum.xda-developers.com
Spoiler: WINDOWS 10 ARM
This one can really use some work, maybe someone can figure out what is wrong with it
How To Install Windows Or Linux ISOs on your Android Devices - Windows 10 Nox Lab + Working Arm Distros for your phone using Termux
Update: A new thread is created to house "premade" linux distros. The first premade environment is an Ubuntu distro, installed using proot-distro in termux, Takes only a few minutes to restore the backup, else instructions are provided to build...
forum.xda-developers.com
You can do the same for win11, get the image off archive.org but it wont work well unless your phone supports KVM or you have a work around
Spoiler: THE ORIGINAL GUIDE / NOX LAB FOR KNOWLEDGE PURPOSES --OUTDATED
As an edit and an update, the method listed below uses x86_64 version of qemu which will not run well on our phones. This guide also uses an android emulator to teach basics of building a virtual machine in qemu, but in practice on a phone it will be much different, when we use an Arm version of qemu. I am leaving this guide up though as it was fundamental in helping myself personally to even begin to understand qemu and the architectures and how to use the code.
This guide uses a modded nox android emulator which can be found HERE
Hello Friends~!
Today I will be walking you through using Termux, QEMU, and a VNC server to Run Windows or Linux isos on Your Android Devices as well as Android Emulators like Nox on Windows 10.
Spoiler: QEMU-SYSTEM-X86_64-HEADLESS SETUP
DOWNLOAD TERMU:
TERMU.zip
drive.google.com
Paste your iso and termu's apps in Barenox/bin, then install them in Nox.
Spoiler: PIC
Then install the apks by using the apk button on nox
BUILDING QEMU
In Termux, type:
Code:
pkg install x11-repo
apt-get upgrade -y
pkg install qemu-utils -y
pkg install qemu-system-x86-64-headless -y
BUILDING THE VIRTUAL MACHINE'S ENVIRONMENT
In Termux, type:
Code:
mkdir win7
cd win7
qemu-img create -f qcow2 win7.img 100G
A note here is that the name or command "win7" can be any iso you want to install.
For instance, you have an Ubuntu iso you want to install, use:
Code:
mkdir ubuntu
cd ubuntu
qemu-img create -f qcow2 ubuntu.img 100G
Then change the name of your iso to "ubuntu.iso" and so forth
100G can be edited as well. If you are worried about hard drive space, no need.
It is saved in qemu's take on sparse image format, "qcow2 files" (QEMU Copy On Write) thus only taking up space as you use it.
USING ADB TO PUSH THE ISO
In Barenox/bin
Open command prompt from the toolbar and run:
Code:
adb push win7.iso /data/data/com.termux/files/home/win7
Take note that /data/data/com.termux/... etc is where termux stores everything
Spoiler: PIC
BUILDING THE VIRTUAL MACHINE
In termux type:
Code:
qemu-system-x86_64 -smp 2 -net nic -net user -device AC97 -m 2048 -vnc 127.0.0.1:7 -cdrom win7.iso -hda win7.img
Take note that the port of "7" after our local server ip of 127.0.0.1 can be edited. I set this to 7 since this is windows 7
This is in reference to the "5900" port number asked for with VNC.
Install your vnc app. I used "vnc viewer"
The server ip will be 127.0.0.1 if asked and the port is 5907
or
127.0.0.1:5907
Spoiler: PIC
tadah~!
RUNNING THE MACHINE LATER
In termux
Code:
cd win7
qemu-system-x86_64 -smp 2 -net nic -net user -device AC97 -m 2048 -vnc 127.0.0.1:7 -hda win7.img
Then reopen the VNC App
These steps have all been automated, see the EXECUTABLE SCRIPTS section
IF YOU LEARN BETTER VISUALLY HERE IS A VIDEO OF THE STEPS
Spoiler: REFS
Termux Direct Apk DL:
https://f-droid.org/repo/com.termux_117.apk
VNC:
Download VNC Viewer | VNC® Connect
Control VNC® enabled computers with VNC® Viewer.
www.realvnc.com
This Guide Helped Me Get Started:
GitHub - blanckth/qemuTermux: Use QEMU in Termux as a full virtual machine and Deploy Any OS and iso
Use QEMU in Termux as a full virtual machine and Deploy Any OS and iso - GitHub - blanckth/qemuTermux: Use QEMU in Termux as a full virtual machine and Deploy Any OS and iso
github.com
This Guide Helped Me To Understand How To "Run a Batch" in Linux (.sh)
How to create batch files on Windows & Linux to automate small and complex tasks
While working on our computers we sometimes need to do repetitive tasks almost every single day. However, there is a simple way you can automate those tasks by
www.how2shout.com
What is a VNC?
What is a VCN? Benefits and Providers of Virtual Network Computing
Helped Me To Reprogram Parameters
QEMU documentation - QEMU
www.qemu.org
QCOW2 File - What is a .qcow2 file and how do I open it?
Learn about .QCOW2 files and view a list of programs that open them.
fileinfo.com
Difference Between Qemu and KVM – The Geek Diary
www.thegeekdiary.com
Spoiler: Outdated QTemu Tool history
INSTALL.md · master · QtEmu / gui · GitLab
Front-end for qemu emulator
gitlab.com
## Development
Urs Wolfer started QtEmu as school project. Ben Klopfenstein began adding some features that he wanted.
And in 2009 the project stoped its development.
In 2017 Sergio Carlavilla started from scrach the development of the 2.0 version. The new UI has based on
VirtualBox OSE and Virt-manager.
QtEmu / gui · GitLab
Front-end for qemu emulator
gitlab.com
original repo
GitHub - uwolfer/qtemu: This project is UNMAINTAINED. QtEmu is a graphical user interface for QEMU written in Qt4. Active fork: https://gitlab.com/qtemu
This project is UNMAINTAINED. QtEmu is a graphical user interface for QEMU written in Qt4. Active fork: https://gitlab.com/qtemu - GitHub - uwolfer/qtemu: This project is UNMAINTAINED. QtEmu is a g...
github.com
Building Android for Qemu: A Step-by-Step Guide
Developing Linux for Android on Qemu allows you to do some things that are not necessarily possible using the stock emulator.
www.collabora.com
AArch64 - Wikipedia
en.wikipedia.org
How to launch ARM aarch64 VM with QEMU from scratch.
The below instructions will allow for bringing up an ARM VM from scratch.
futurewei-cloud.github.io
Ubuntu – Error
Run u-boot in qemu
GitHub - qemu/u-boot: Mirror of git.qemu.org/u-boot.git
Mirror of git.qemu.org/u-boot.git. Contribute to qemu/u-boot development by creating an account on GitHub.
github.com
How to Use DD Show Progress Command in Linux? {2 Options Explained}
Use the dd command to show progress in the Linux terminal. Add the status attribute to see progress output or run dd with the pv command.
phoenixnap.com
/dev/zero - Wikipedia
en.wikipedia.org
Purpose of /dev/zero?
I tried to cat /dev/zero, and it didn't seem to do anything. I googled /dev/zero, and it says it's basically a blank file with infinite size. Is cat printing an infinite number of non-existent char...
unix.stackexchange.com
Features/PC System Flash - QEMU
wiki.qemu.org
https://forum.xda-developers.com/attachments/dd-png.5593745/
dd: different unit for bs, skip and count?
I am trying to copy a partition from an entire disk image. This command is working: dd if=image.iso of=test bs=512 skip=1161215 count=32768 In order to increase the speed, I'd like to set a bigge...
askubuntu.com
Android On Windows, With Windows~!
Looks great, will give it a try later. Thanks for the time & effort!
========================
SOURCES
==========
==================
Spoiler: QEMU-SYSTEM-X86_64 SOURCES
Spoiler: REQUIRED APPS
TERMU.zip
drive.google.com
(112M)
Spoiler: WINDOWS 7 SOURCE
Spoiler: PREREQUISITES
A Rooted Device
You need to have Qemu Built already, have made your directory, and changed to it for the scripts to work
I.E hand type this part in Termux
Code:
pkg install x11-repo
apt-get upgrade -y
pkg install qemu-utils -y
pkg install qemu-system-x86-64-headless -y
mkdir win7
cd win7
qemu-img create -f qcow2 win7.img 100G
Spoiler: DOWNLOAD
WIN7SOURCE.zip
drive.google.com
(2.9G)
Spoiler: HOW TO USE ALL FEATURES
Copy the source files and paste them into barenox/bin, then execute the .push-all.bat script. When the adb push has completed, you can now run this code.
In Termux:
Code:
./hinstall.sh
After you have completed the installation, the parameters attaching a disk drive are no longer needed, hence the "hrun.sh" script. This script allows you to easily boot your new machine after changing to the machine's folder in Termux.
In Termux:
Code:
./hrun.sh
Then open your vnc app. IP and PORT info: 127.0.0.1:5907
The source files contain pre-built scripts for your convenience. If you would rather build your own, or understand fully what these are, please see the EXECUTABLE SCRIPTS comment below.
Spoiler: PREMADE INFO
Hello, for your convenience, a pre-installed hdd has been uploaded for this machine. What does that mean? You can bypass the Windows installation and all the steps required to do the setup, by simply pushing the Premade files and running ./hrun.sh
SEE PREMADES SECTION IN COMMENTS
Spoiler: HEADLESS SOURCE CODE
Code:
install:
mkdir win7
cd win7
qemu-img create -f qcow2 win7.img 100G
qemu-system-x86_64 -smp 2 -net nic -net user -device AC97 -m 2048 -vnc 127.0.0.1:7 -cdrom win7.iso -hda win7.img
run later:
cd win7
qemu-system-x86_64 -smp 2 -net nic -net user -device AC97 -m 2048 -vnc 127.0.0.1:7 -hda win7.img
iso obtained from:
My google Drive Vault
vnc ip and port:
127.0.0.1:7
127.0.0.1:5907
adb push path:
adb push win7.iso /data/data/com.termux/files/home/win7
adb push hinstall.sh /data/data/com.termux/files/home/win7
adb push hrun.sh /data/data/com.termux/files/home/win7
chmod path:
adb shell chmod 777 /data/data/com.termux/files/home/win7/hinstall.sh
adb shell chmod 777 /data/data/com.termux/files/home/win7/hrun.sh
commands:
./hinstall.sh
./hrun.sh
Spoiler: TINY7 SOURCE
Spoiler: PREREQUISITES
A Rooted Device
You need to have Qemu Built already, have made your directory, and changed to it for the scripts to work
I.E hand type this part in Termux
Code:
pkg install x11-repo
apt-get upgrade -y
pkg install qemu-utils -y
pkg install qemu-system-x86-64-headless -y
mkdir tiny7
cd tiny7
qemu-img create -f qcow2 tiny7.img 100G
Spoiler: DOWNLOAD
TINY7SOURCE.zip
drive.google.com
(691M)
Spoiler: HOW TO USE ALL FEATURES
First half of video is using the Premade, second half is SOURCES
Copy the source files and paste them into barenox/bin, then execute the .push-all.bat script. When the adb push has completed, you can now run this code.
In Termux:
Code:
./hinstall.sh
After you have completed the installation, the parameters attaching a disk drive are no longer needed, hence the "hrun.sh" script. This script allows you to easily boot your new machine after changing to the machine's folder in Termux.
In Termux:
Code:
./hrun.sh
Then open your vnc app. IP and PORT info: 127.0.0.1:5903
The source files contain pre-built scripts for your convenience. If you would rather build your own, or understand fully what these are, please see the EXECUTABLE SCRIPTS comment below.
Spoiler: PREMADE INFO
Hello, for your convenience, a pre-installed hdd has been uploaded for this machine. What does that mean? You can bypass the Windows installation and all the steps required to do the setup, by simply pushing the Premade files and running ./hrun.sh
SEE PREMADES SECTION IN COMMENTS
Spoiler: PROGRAMMER'S NOTES
Remember that Windows 7 is ancient now and takes (took) forever to setup, even as small as this is.
With this machine, first select "CUSTOM Install", then just set it and forget it. Tiny 7 has a built in script that executes after the initial setup completes, so when you get to this part, you are done, despite what the window says. The script hangs, as it is way outdated, we need to remove it. Close the window and delete the experience folder and delete enable quick launcher
Then we need to delete the actual script
Open task manager, find the PROCESS activate.exe, click on it once to select it, and at the top of vnc viewer, select the mouse icon to activate the left click option. at the bottom right if you click, it will allow you to open the side menu to open the file location. So, open the file location first, then select end task. Delete the install folder
alternatively, you can go into C:\Windows and delete the install folder
You'll notice that this is going to break the internet explorer and file manager shortcuts on your desktop. Just remove the shortcuts, and open the windows menu, search for internet, then right click and copy internet explorer. Go to your desktop and paste a short cut
Spoiler: HEADLESS SOURCE CODE
Code:
install:
mkdir tiny7
cd tiny7
qemu-img create -f qcow2 tiny7.img 100G
qemu-system-x86_64 -smp 2 -net nic -net user -device AC97 -m 2048 -vnc 127.0.0.1:3 -cdrom tiny7.iso -hda tiny7.img
run later:
cd tiny7
qemu-system-x86_64 -smp 2 -net nic -net user -device AC97 -m 2048 -vnc 127.0.0.1:3 -hda tiny7.img
iso obtained from:
https://archive.org/download/tiny-7/Tiny7.iso
vnc ip and port:
127.0.0.1:3
127.0.0.1:5903
adb push path:
adb push win7.iso /data/data/com.termux/files/home/tiny7
adb push hinstall.sh /data/data/com.termux/files/home/tiny7
adb push hrun.sh /data/data/com.termux/files/home/tiny7
chmod path:
adb shell chmod 777 /data/data/com.termux/files/home/tiny7/hinstall.sh
adb shell chmod 777 /data/data/com.termux/files/home/tiny7/hrun.sh
commands:
./hinstall.sh
./hrun.sh
========================
PREMADES
==========
==================
Spoiler: QEMU-SYSTEM-X86_64 PREMADE IMAGES
Spoiler: REQUIRED APPS
TERMU.zip
drive.google.com
(112M)
Spoiler: WINDOWS 7
Spoiler: STOCK: WINDOWS 7 ULTIMATE SP1 (64 BIT) PREMADE
Spoiler: PREREQUISITES
A Rooted Device
You need to have Qemu Built already, have made your directory, and changed to it for the scripts to work
I.E hand type this part in Termux
Code:
pkg install x11-repo
apt-get upgrade -y
pkg install qemu-utils -y
pkg install qemu-system-x86-64-headless -y
mkdir win7
cd win7
Spoiler: DOWNLOAD
WIN7ULTSP1STOCKHDD.zip
drive.google.com
(3.1G)
Spoiler: HOW TO USE
It says Tiny7 but the steps are the same. First half is a PREMADE installation demo, second half is a SOURCES demo
This premade hard drive image saves us the time of installing windows. It is fully setup and ready to play with.
To use it, copy all the files to barenox/bin and run the .push-all.bat script.
If using your own device, paste the files into your adb folder or just execute the script if you have your adb permissions wrapped.
When it has completed, in Termux type:
Code:
./hrun.sh
Open your vnc app. IP and PORT info: 127.0.0.1:5907
And that will load the premade machine for you. It will simply boot into windows
Nothing has been added here, so if you want to run games and what not, there may be dependencies required. I will build a box that is game ready in the future with the 64bit edition.
Spoiler: MOD: WINDOWS 7, TINY 7 (32 BIT) PREMADE
Spoiler: PREREQUISITES
A Rooted Device
You need to have Qemu Built already, have made your directory, and changed to it for the scripts to work
I.E hand type this part in Termux
Code:
pkg install x11-repo
apt-get upgrade -y
pkg install qemu-utils -y
pkg install qemu-system-x86-64-headless -y
mkdir tiny7
cd tiny7
Spoiler: DOWNLOAD
TINY7HDD.zip
drive.google.com
(615M)
Spoiler: HOW TO USE
First half is a PREMADE installation demo, second half is a SOURCES demo
This premade hard drive image saves us the time of installing windows. It is fully setup and ready to play with.
To use it, copy all the files to barenox/bin and run the .push-all.bat script.
If using your own device, paste the files into your adb folder or just execute the script if you have your adb permissions wrapped.
When it has completed, in Termux type:
Code:
./hrun.sh
Open your vnc app. IP and PORT info: 127.0.0.1:5903
And that will load the premade machine for you. It will simply boot into windows
Nothing has been added here, so if you want to run games and what not, there may be dependencies required. I will build a box that is game ready in the future with the 64bit edition.
See Tiny7's Tree Under SOURCES. The PROGRAMMER'S NOTES Tree contains detailed instructions for how this was Programmed. I had to figure out how to remove the old script that came with this iso, and documented the steps there for others. Note that the preinstalled machine has been cleaned of the problematic INSTALL folder and the internet explorer shortcut corrected for you.
More MODS will be added as they are built
TERMUX AND REPO KNOWLEDGE
Spoiler: TERMUX PROPERTIES AND USER BINARIES
Spoiler: CODE
The following code was used to pull Termux's properties File
Code:
adb pull /data/data/com.termux/files/home/.termux/termux.properties
Spoiler: FILE
Code:
### After making changes and saving you need to run `termux-reload-settings`
### to update the terminal. All information here can also be found on the
### wiki: https://wiki.termux.com/wiki/Terminal_Settings
###############
# General
###############
### Allow external applications to execute arbitrary commands within Termux.
### This potentially could be a security issue, so option is disabled by
### default. Uncomment to enable.
# allow-external-apps = true
### Default working directory that will be used when launching the app.
# default-working-directory = /data/data/com.termux/files/home
### Uncomment to disable toasts shown on terminal session change.
# disable-terminal-session-change-toast = true
### Uncomment to not show soft keyboard on application start.
# hide-soft-keyboard-on-startup = true
### Uncomment to let keyboard toggle button to enable or disable software
### keyboard instead of showing/hiding it.
# soft-keyboard-toggle-behaviour = enable/disable
### Adjust terminal scrollback buffer. Max is 50000. May have negative
### impact on performance.
# terminal-transcript-rows = 2000
### Uncomment to use volume keys for adjusting volume and not for the
### extra keys functionality.
# volume-keys = volume
###############
# Fullscreen mode
###############
### Uncomment to let Termux start in full screen mode.
# fullscreen = true
### Uncomment to attempt workaround layout issues when running in
### full screen mode.
# use-fullscreen-workaround = true
###############
# Cursor
###############
### Cursor blink rate. Values 0, 100 - 2000.
# terminal-cursor-blink-rate = 0
### Cursor style: block, bar, underline.
# terminal-cursor-style = block
###############
# Extra keys
###############
### Settings for choosing which set of symbols to use for illustrating keys.
### Choose between default, arrows-only, arrows-all, all and none
# extra-keys-style = default
### Force capitalize all text in extra keys row button labels.
# extra-keys-text-all-caps = true
### Default extra-key configuration
# extra-keys = [[ESC, TAB, CTRL, ALT, {key: '-', popup: '|'}, DOWN, UP]]
### Two rows with more keys
# extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'], \
# ['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]
### Configuration with additional popup keys (swipe up from an extra key)
# extra-keys = [[ \
# {key: ESC, popup: {macro: "CTRL f d", display: "tmux exit"}}, \
# {key: CTRL, popup: {macro: "CTRL f BKSP", display: "tmux ←"}}, \
# {key: ALT, popup: {macro: "CTRL f TAB", display: "tmux →"}}, \
# {key: TAB, popup: {macro: "ALT a", display: A-a}}, \
# {key: LEFT, popup: HOME}, \
# {key: DOWN, popup: PGDN}, \
# {key: UP, popup: PGUP}, \
# {key: RIGHT, popup: END}, \
# {macro: "ALT j", display: A-j, popup: {macro: "ALT g", display: A-g}}, \
# {key: KEYBOARD, popup: {macro: "CTRL d", display: exit}} \
# ]]
###############
# Colors/themes
###############
### Force black colors for drawer and dialogs
# use-black-ui = true
###############
# HW keyboard shortcuts
###############
### Disable hardware keyboard shortcuts.
# disable-hardware-keyboard-shortcuts = true
### Open a new terminal with ctrl + t (volume down + t)
# shortcut.create-session = ctrl + t
### Go one session down with (for example) ctrl + 2
# shortcut.next-session = ctrl + 2
### Go one session up with (for example) ctrl + 1
# shortcut.previous-session = ctrl + 1
### Rename a session with (for example) ctrl + n
# shortcut.rename-session = ctrl + n
###############
# Bell key
###############
### Vibrate device (default).
# bell-character = vibrate
### Beep with a sound.
# bell-character = beep
### Ignore bell character.
# bell-character = ignore
###############
# Back key
###############
### Send the Escape key.
# back-key=escape
### Hide keyboard or leave app (default).
# back-key=back
###############
# Keyboard issue workarounds
###############
### Letters might not appear until enter is pressed on Samsung devices
# enforce-char-based-input = true
### ctrl+space (for marking text in emacs) does not work on some devices
# ctrl-space-workaround = true
Spoiler: MORE TERMUX KNOWLEDGE
Internal and external storage - Termux Wiki
wiki.termux.com
Spoiler: BUILT IN BINARIES
Spoiler: QEMU X11 REPOS
QEMU-SYSTEM-X86_64 7.0 USER MANUAL PART 1
Spoiler: SHOW
X86_64 USER MANUAL PART 2
Spoiler: SHOW
EXECUTABLE SCRIPTS
Spoiler: SHOW
Spoiler: HEADLESS INSTALL SCRIPT
This script simply saves us the time of retyping the virtual's machine's installation parameters by running "./hinstall.sh"
Spoiler: PREREQUISITES
A Rooted Device To Be Able To Modify and Execute Your New Scripts
You need to have Qemu Built already, have made your directory, and changed to it for the scripts to work
I.E hand type this part
Code:
pkg install x11-repo
apt-get upgrade -y
pkg install qemu-utils -y
pkg install qemu-system-x86-64-headless -y
mkdir win7
cd win7
qemu-img create -f qcow2 win7.img 100G
Make a new text file on your desktop. Call it hinstall
Open the text file and paste in:
Code:
qemu-system-x86_64 -smp 2 -net nic -net user -device AC97 -m 2048 -vnc 127.0.0.1:7 -cdrom win7.iso -hda win7.img
Spoiler: PIC
Save the file, change the extension to .sh, and paste it into barenox/bin.
Open command prompt from the toolbar and paste:
Code:
adb push hinstall.sh /data/data/com.termux/files/home/win7
adb root
adb shell chmod 777 /data/data/com.termux/files/home/win7.hinstall.sh
./hinstall.sh
Spoiler: PIC
Now run this in Termux: (In the win7 directory, per this example, minus the top picture xD)
Code:
./hinstall.sh
and that will start the virtual machine for us, without us needing to type in the steps. I have automated all this further, It will be added to the SOURCE section eventually
Spoiler: HEADLESS RUN SCRIPT
This script simply saves us the time of retyping the virtual's machine's parameters by running "./hrun.sh"
Make a new text file on your desktop. Call it hrun
Open the text file and paste in:
Code:
qemu-system-x86_64 -smp 2 -net nic -net user -device AC97 -m 2048 -vnc 127.0.0.1:7 -hda win7.img
Save the file, change the extension to .sh, and paste it into barenox/bin.
Open command prompt from the toolbar and paste:
Code:
adb push hrun.sh /data/data/com.termux/files/home/win7
adb root
adb shell chmod 777 /data/data/com.termux/files/home/win7.hrun.sh
You are now able to start your windows 7 vm in Termux by changing to the win7 directory and typing
Code:
./hrun.sh
Then open your vnc or spice app
Spoiler: ADB PUSH ALL SCRIPT
This is a simple script to automate pushing the windows iso, the hinstall.sh file. and hrun.sh file.
Simply paste the text in a new document and name it something like ".PUSHALL.bat"
We add the period at the beginning so the script will appear at the top of file list when added to the bin folder.
Spoiler: PIC
Code:
adb push win7.iso /data/data/com.termux/files/home/win7
adb push hinstall.sh /data/data/com.termux/files/home/win7
adb push hrun.sh /data/data/com.termux/files/home/win7
adb root
adb shell chmod 777 /data/data/com.termux/files/home/win7/hinstall.sh
adb shell chmod 777 /data/data/com.termux/files/home/win7/hrun.sh
The final commands in the script, adb root and chmod, allow us to modify the scripts we sent over, so they are allowed to be executed in Termux by using ./ and then the file name, like: ./hinstall.sh
You would then paste all these files into barenox/bin (or your adb directory if working on your own device) and run the .push-all.bat file, it will go through and automatically push over the iso and files, and chmod them for us. (You would need root permissions for this sort of automation)
See Windows 7 SOURCE for further documentation. (Work In Progress)
Spoiler: PULL VIRTUAL MACHINE'S HDD
You can make a batch file to easily pull the machine's hdd
Code:
adb pull /data/data/com.termux/files/home/win7/win7.img
Spoiler: HOW TO EDIT SCRIPTS IN WINDOWS
Right click and edit the batch and sh files
press ctrl plus h and replace as needed
To Edit the .sh without need of other program just change it to ".txt" and edit in there, then change back
Spoiler: HOW TO EDIT SCRIPTS IN TERMUX
In Termux, you can use the command "nano" then your file name, to edit the file in the shell
Make your edits here
Then press ctrl + x and then ENTER to save and close the file. You need to use Termux's built in ctrl button and then press X
Spoiler: SU HOME CODE
When you go into superuser mode in Termux, it forces you into the Root directory on your android device. You can create a script called home.sh
with code:
Code:
cd /data/data/com.termux/files/home/
and adb push and chmod the script, so now after you type su,
you can type ./home.sh and be rerouted to your termux home with all your machines
Will add more as I make them
PROGRAMMER'S NOTES
Spoiler: SHOW
Spoiler: WINDOWS7
There's no additional programming notes here, other than to select custom install when you first run the disk in the emulator, else it will cause a loop.
Win7 is such a sweet baby <3 at least for the initial setup. Now we can finness the creation by adding certain dependencies to play windows games like .net framework, haxm and more but I will do that another day
Spoiler: TINY7
This is the only entry that is actually located in it's SOURCES tree, I am unable to move it bc it has a lot of images
Spoiler: WINDOWS 11 ARM
Spoiler: OBTAINING THE ISO
Spoiler: UUPDUMP
If you're not familiar with using UUPDUMP, I'll walk you through using them to get the Windows 11 ARM iso. You could use this site for other Windows Related ISOs and products but that will not be covered here.
UUP dump
UUP dump lets you download Unified Update Platform files, like Windows Insider updates, directly from Windows Update.
uupdump.net
Select the arm64 version for latest public build
Select only Windows Home (Unless you need pro for its built in tools)
Uncheck include updates
Unzip the package and run the uup download windows cmd
When the dl finishes, you can identify your iso's name by this line in cmd prompt. You can then rename it to what you like
Spoiler: DOWNLOAD WIN11 ARM
If you don't want to have to do the uupdump steps, I have uploaded my copy of windows 11 arm from them, to gdrive for us <3
DOWNLOAD:
win11arm.iso
drive.google.com
(4.16GB)
Spoiler: QEMU-IMG HACK, MAY BE USEFUL WITH OTHER PROGRAMS
To even be able to view the help file for qemu-img in Termux, I had to use Root explorer to copy the binary from data/data/com.termux/files/usr/bin
and paste it to data/data/com.termux/files/home
That allowed me to be able to call the help command and not get a packaging error. Even when using su to break out of the terminal's sandbox, I was unable to run the command.
Evidently the way termux stores usr added packages, breaks the logic when executing certain functionality, so this is a good "hack" if you need to see a certain tool's help file
Spoiler: AARCH64 EFI DRIVER
Download the driver from here:
Ubuntu – Error
Unzip the package, and open the folder until you get here:
Then copy the efi driver and adb push it to your arm system folder, in this case I am working on windows 11 arm so the path will be
Code:
adb push QEMU_EFI.fd /data/data/com.termux/files/home/win11arm
We have to add the efi driver to our machine's build directory, as opposed to the usr/share folder as shown in an example i listed earlier, due to us building in Termux.
PROGRAMMER'S NOTES
QEMU-IMG (QEMU UTILITIES)
Spoiler: SHOW
QEMU-SYSTEM-X86_64 CPU LIST
Spoiler: SHOW
QEMU-SYSTEM-ARM 7.0 USER MANUAL PART 1
Spoiler: SHOW
ARM USER MANUAL PART 2
Spoiler: SHOW
ARM SYSTEM CPU LIST
QEMU-SYSTEM-AARCH64(ARM64)USER MANUAL
Spoiler: SHOW
AARCH64 USER MANUAL PART 2
Spoiler: SHOW
available cpus
Working on this build now. The very first step involves us using an efi driver. This has been added to the programming notes. The beginner code I am building with has been added to the SOURCES tree. Starting with figuring out WIN11ARM then we build android
If anyone makes anything cool feel free to share, it can be any of the qemu systems.
Spoiler: notes
This will eventually be moved into more relevant areas, as per usual. Just jotting down notes so I don't have to start from scratch.
I'm building based off a guide from here https://futurewei-cloud.github.io/ARM-Datacenter/qemu/how-to-launch-aarch64-vm/
There's been new REFS added to the OP to support knowledge gained from this man's Wonderful post. The programming and code is going to differ based on QEMU being at 7.0 at this point in time.
In order to properly flash the memory sets to the pflash file we are going to create, we will use a system binary called "zero". This can be located on any android device in the dev folder.
These articles are great illustrators of the usefulness (and age!) of this file system, to better understand what we are asking the dd program to do with it
/dev/zero - Wikipedia
en.wikipedia.org
Purpose of /dev/zero?
I tried to cat /dev/zero, and it didn't seem to do anything. I googled /dev/zero, and it says it's basically a blank file with infinite size. Is cat printing an infinite number of non-existent char...
unix.stackexchange.com
Im having troubles understanding what a pflash exactly is besides the qemu documentation https://wiki.qemu.org/Features/PC_System_Flash
Qemu won't load images if they aren't formatted RAW and the semantics in doing so with a pflash in qemu 7.0 are different. This is such an obscure area, it's hard to find everything... so kinda making it up as we go haha
The install code is having this error
https://forum.xda-developers.com/attachments/dd-png.5593745/
dd: different unit for bs, skip and count?
I am trying to copy a partition from an entire disk image. This command is working: dd if=image.iso of=test bs=512 skip=1161215 count=32768 In order to increase the speed, I'd like to set a bigge...
askubuntu.com
I have no idea what I am doing, so if there is someone smarter that can help enlighten us on how to do things properly that would be awesome. Otherwise I will continue to poke, prod, break, and remake until something works xD
taking a break on this for a few days to focus on the shield again. will be back~! <3
David Bombal has a good guide up how to get Kali Linux Nethunter on any android device (no root needed) using termux, and in it he showcases a different vnc app. I will investigate this share in the future. Just saving it and sharing it <3 https://davidbombal.com/kali-linux-nethunter-android-install-in-5-minutes-rootless/
Have been looking for a proper guide to actually emulate x86-based Windows on modern ARM64 Snapdragon chips for years, and somehow you descended from xda heaven. Thank you, I'll be having a fun few weeks of spare time now. I will report any progress or issues I encounter down the road.
Hi. I'm trying to find the guide to use a pre-made image (Tiny7.img) instead of creating a new for starters to get a grip on stuff, but I can't find it.
Could you help me? @jenneh
@tehdomic sorry it got buried in everything. the direct google link is here https://drive.google.com/file/d/12uP_rIEoPzqHqh0UqbsLDw6IqYbtNY4K/view
the comment the info is under here with the instructions, they are in the download area.
How To Install Windows Or Linux ISOs on your Android Devices - Windows 10 Nox Lab + Working Arm Distros for your phone using Termux
Update: A new thread is created to house "premade" linux distros. The first premade environment is an Ubuntu distro, installed using proot-distro in termux, Takes only a few minutes to restore the backup, else instructions are provided to build...
forum.xda-developers.com
Spoiler: show