您的位置:首页 > 运维架构 > Shell

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
?

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息