How to Cross Compile the Bash shell for Android 1.5
2009-11-10 11:42
543 查看
Introduction:
I just got a new G1 Android phone, and since it runs Linux I just had
to get the Bash shell running on it, the built in shell would just not
do. I do need my tab completion after all. Cross compilation is the
process of compiling software on one platform that is meant to run on
another. With the following an ARM executable is compiled on a x86
Linux machine.
Requirements (Not sure if all this is needed, but it is what I used):
Cupcake 1.5 JS Build with root access: http://androidandme.com/2009/05/guides/beginners-guide-for-rooting-your-android-g1-to-install-cupcake/
ARM Toolkit (The Cross Compiler): http://www.codesourcery.com/gnu_toolchains/arm/download.html
Android SDK installed on Linux: http://developer.android.com/sdk/1.5_r2/index.htm
A G1
The source code for Bash 4.0: ftp://ftp.cwru.edu/pub/bash/bash-4.0.tar.gz
Step 1: Connect your pc to your phone with the SDK
You first have to be able to connect to your computer with adp which is
included with the sdk. To do this with Ubuntu Januty Jackalope you
first need to create a /etc/udev/rules.d/51-android.rules file with the
following contents:
view source
print
?
After this run the following to restart udev: ’sudo /etc/init.d/udev
reload’. Lastly, on your phone make sure Settings :: Applications ::
Development :: USB Debugging is enabled and the plug in your phone.
When you run ‘./adp devices’ you should see a device listed.
Step 2: Build the Bash Shell
After installing ARM toolkit in /home/kbrandt/bin/arm-toolkit (used for
this example) set the following environment variables in your shell.
Then cd to the directory where you extracted the Bash source and run the following:
Assuming that worked, edit the ‘Makefile’ file and change ‘CFLAGS =
-g -O2′ to ‘CFLAGS = -g -O2 -static’ and then run ‘make’. If this
works, it should create a bash executable in the current directory. You
can verify that this has been compiled for the ARM architecture with
‘file bash’. This should return:
bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.14, not stripped
Step 3: Copy the File to your android.
From the host computer in the tools directory of the SDK run ‘./adb
push ~/src/bash-4.0/bash /data/’ to copy the executable to the phone.
If you try to copy it to your sdcard, make sure the sdcard is not
mounted with the noexec mount option as this disables the executable
permission bit.
Step 4: Run, Enjoy, and Find Bugs.
You can now connect to your phone with ‘./adp shell’ and cd to the data
directory and run ‘./bash’ and you should get a bash prompt. You might
need to ‘chmod 555 bash’ if you get permission denied.
References:
http://jiggawatt.org/badc0de/android/index.html
I just got a new G1 Android phone, and since it runs Linux I just had
to get the Bash shell running on it, the built in shell would just not
do. I do need my tab completion after all. Cross compilation is the
process of compiling software on one platform that is meant to run on
another. With the following an ARM executable is compiled on a x86
Linux machine.
Requirements (Not sure if all this is needed, but it is what I used):
Cupcake 1.5 JS Build with root access: http://androidandme.com/2009/05/guides/beginners-guide-for-rooting-your-android-g1-to-install-cupcake/
ARM Toolkit (The Cross Compiler): http://www.codesourcery.com/gnu_toolchains/arm/download.html
Android SDK installed on Linux: http://developer.android.com/sdk/1.5_r2/index.htm
A G1
The source code for Bash 4.0: ftp://ftp.cwru.edu/pub/bash/bash-4.0.tar.gz
Step 1: Connect your pc to your phone with the SDK
You first have to be able to connect to your computer with adp which is
included with the sdk. To do this with Ubuntu Januty Jackalope you
first need to create a /etc/udev/rules.d/51-android.rules file with the
following contents:
view source
?
1.
SUBSYSTEM==
"usb"
, SYSFS{idVendor}==
"0bb4"
, MODE=
"0666"
After this run the following to restart udev: ’sudo /etc/init.d/udev
reload’. Lastly, on your phone make sure Settings :: Applications ::
Development :: USB Debugging is enabled and the plug in your phone.
When you run ‘./adp devices’ you should see a device listed.
Step 2: Build the Bash Shell
After installing ARM toolkit in /home/kbrandt/bin/arm-toolkit (used for
this example) set the following environment variables in your shell.
1.
CC=
'/home/kbrandt/bin/arm-toolkit/bin/arm-none-linux-gnueabi-gcc'
2.
PATH=
"$PATH:$HOME/bin/"
Then cd to the directory where you extracted the Bash source and run the following:
1.
./configure --prefix=/opt/arm_bash/ -host=arm-linux --enable-
static
-link --without-bash-malloc
Assuming that worked, edit the ‘Makefile’ file and change ‘CFLAGS =
-g -O2′ to ‘CFLAGS = -g -O2 -static’ and then run ‘make’. If this
works, it should create a bash executable in the current directory. You
can verify that this has been compiled for the ARM architecture with
‘file bash’. This should return:
bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.14, not stripped
Step 3: Copy the File to your android.
From the host computer in the tools directory of the SDK run ‘./adb
push ~/src/bash-4.0/bash /data/’ to copy the executable to the phone.
If you try to copy it to your sdcard, make sure the sdcard is not
mounted with the noexec mount option as this disables the executable
permission bit.
Step 4: Run, Enjoy, and Find Bugs.
You can now connect to your phone with ‘./adp shell’ and cd to the data
directory and run ‘./bash’ and you should get a bash prompt. You might
need to ‘chmod 555 bash’ if you get permission denied.
References:
http://jiggawatt.org/badc0de/android/index.html
相关文章推荐
- How to Cross Compile the Bash shell for Android 1.5 (为Android平台编译Bash shell)
- How to Use the BASH "for" Loop in Shell Scripts
- (OK) how to compile the source code for Android-x86 (Android 7.1.1)
- Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI)
- How to cross-compile Chromium for ARM
- Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI)
- How to Compile SQLite for Android using NDK
- MVP for Android: how to organize the presentation layer
- How to compile kernel modules for the kernel 2.6
- HOWTO compile kernel modules for the kernel 2.6: (编译linux2.6版本内核)
- http://www.roman10.net/how-to-compile-sqlite-for-android-using-ndk/
- How to cross-compile OpenSSL for ARM
- How to compile the IJG JPEG library (libjpeg) for Visual Studio 2010
- Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI)
- How To Cross Compile Python 2.5.2 For ARM -- by Border
- 如何在Android设备中用NDK编译SQLite并且对SQLite进行操作(增删)-How to Compile SQLite for Android using NDK
- how to download the source tree for a specific Android code-line
- How to get the SHA-1 fingerprint certificate in Android Studio for debug mode?
- How To Compile OpenSSL for the iPhone
- Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI)