Busybox - Sprint HTC EVO 4G LTE

I am curious just exactly what is Busybox and what does it do for our rooted phones? I have it and I see that it seems to over write "code" but I am not sure just what it is for as it pertains to our phones. Is it something that has to be on the phone or is it optional etc? Can someone just explain it in plain terms?
http://www.busybox.net/about.html
BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete environment for any small or embedded system.
BusyBox has been written with size-optimization and limited resources in mind. It is also extremely modular so you can easily include or exclude commands (or features) at compile time. This makes it easy to customize your embedded systems. To create a working system, just add some device nodes in /dev, a few configuration files in /etc, and a Linux kernel.

+1
Sent from my EVOLTE

bump

BusyBux basically adds a ton of standard linux/unix utility commands and shell scripts to embedded devices in order make the terminal more functional than the standard android terminal. If you are familiar with the linux/unix command line you will recognize a lot of these:
Currently available applets include:
[, [[, acpid, addgroup, adduser, adjtimex, ar, arp, arping, ash,awk, basename, beep, blkid, brctl, bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname,dos2unix, dpkg, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, expand, expr, fakeidentd, false, fbset,fbsplash, fdflush, fdformat, fdisk, fgrep, find, findfs, flash_lock, flash_unlock, fold, free, freeramdisk, fsck, fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init, inotifyd, insmod, install, ionice, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr,ls, lsattr, lsmod, lzmacat, lzop, lzopcat, makemime, man, md5sum, mdev, mesg, microcom, mkdir, mkdosfs, mkfifo, mkfs.minix, mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modprobe, more, mount, mountpoint, mt, mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup, od, openvt, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, popmaildir, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readlink, readprofile, realpath, reformime, renice, reset, resize, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch, setconsole, setfont, setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum, sha512sum, showkey, slattach, sleep, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, timeout, top, touch, tr, traceroute, true, tty, ttysize, udhcpc, udhcpd, udpsvd, umount, uname, uncompress, unexpand, uniq, unix2dos, unlzma, unlzop, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, volname, watch, watchdog, wc, wget, which, who, whoami, xargs, yes, zcat, zcip
Click to expand...
Click to collapse
Hope that helps!

Ok awesome so I guess the main thing Busybox is for use with Android SDK Tools? I mean we usually don't use terminal functions on the phone is that correct?

Great thread, I've always wondered what this was too!
Sent from my EVO using xda app-developers app

nohart said:
Ok awesome so I guess the main thing Busybox is for use with Android SDK Tools? I mean we usually don't use terminal functions on the phone is that correct?
Click to expand...
Click to collapse
SDK ,yes but terminal is also a very important tool to have. This early in development for our device its not used alot but as developement progresses youll find it being used more and more. Especially with kernels, a2sd scripts ,performance tweeks and whatnot.
Sent from my Rejuvenated EVO 4g LTE ,,,,,,

Related

Full CAS (Computer Algebra System) on android?

We have many callculator applications on android, but they are so simple and without full mathematical functionality. So i tried port yacas to android platform, but it is a console application - so we need graphics ui.
After small searching i found this like ui on iPhone platform!
If anyone want to make this for android - i attached sources of original yacas program and of iphone-ui.
Also add some links:
http://gitorious.org/android/yacas - ported yacas application
http://yacas.sf.net - original yacas site
http://www.mathdrake.com/yacas/index.html - yacas ui for iPhone
And how you can build yacas from original tree:
Download yacas source, unpack this and cd to yacas/src,
copy XVilka-yacas.Makefile to Makefile and run:
($_XXFLAGS - optimisation flags for your device)
Code:
make CC=\"arm-android-linux-uclibcgnueabi-gcc\" CROSS_COMPILE=\"arm-android-linux-uclibcgnueabi-\" \\
CFLAGS=\" -static -fPIC $_XXFLAGS\" CXXFLAGS=\" -static -fPIC $_XXFLAGS\" \\
LDFLAGS=\" -static -fPIC -s -L$HOME/build/cross/sys-root/usr/lib -lm -lc -lgcc -lstdc++\" \\
AR=\"arm-android-linux-uclibcgnueabi-ar\" AS=\"arm-android-linux-uclibcgnueabi-as\" \\
LD=\"arm-android-linux-uclibcgnueabi-g++\" RANLIB=\"arm-android-linux-uclibcgnueabi-ranlib\" \\
OBJDUMP=\"arm-android-linux-uclibcgnueabi-objdump\" STRIP=\"arm-android-linux-uclibcgnueabi-strip\" \\
NM=\"arm-android-linux-uclibcgnueabi-nm\" CXX=\"arm-android-linux-uclibcgnueabi-g++\"
Done! we have yacas binary without any dependency.
Copy this and scripts (for example in /system/usr/local/etc/yacas)
Code:
cp /sdcard/test-build/yacas /system/usr/bin
chown root /system/bin/yacas
chmod 755 /system/bin/yacas
cp -r /sdcard/test-build/scripts/* /system/usr/local/etc/yacas
and for the first run we need to:
Code:
yacas --rootdir /system/usr/local/etc/yacas
then we can simply run yacas by the "yacas".
Hi;
This seems really excellent, I've been using calculator emulators on android to do this.
Unfortunatelly after trying the steps above, I only get "Illegal instruction" in my HTC Magic CM
Sounds cool. I might have to try this. Do you have any screenshots?
Cheers
Now we only have console version, but in future - get gui
I may not be the best programmer in the world, but if this is the best lead we have on getting a CAS on android I'd be willing to give it a go making a GUI for this.
Ok, I've managed to get yacas installed and working on my Samsung Captivate. here are the steps I used:
downloaded the my.tar.zip (it has everything already pre-compiled, thanks XVilka!)
Unzip it and copy the bin folder to an SD card.
for my Captivate, the filepath to get to my sd card may be different from yours, so be sure to check! Anyways, I used the Android SDK adb shell to get terminal access to my phone, but a terminal app on the phone itself works as well (I used adb because my laptop keyboard is quicker)
Code:
cp /sdcard/sd/bin/omap3430/yacas /system/usr/bin
chown root /system/bin/yacas
chmod 755 /system/bin/yacas
cp -r /sdcard/sd/bin/omap3430/scripts/* /system/usr/local/etc/yacas
yacas --rootdir /system/usr/local/etc/yacas
And then it should be installed properly.
So now that I have it installed and working, I need to get a feel for the syntax it uses to parse commands, get a list of commands, and start sketching out a UI for it.
Thanks for posting how to get it running on the Galaxy S.
But what about using X over SSH to run software remotely with a GUI such as Matlab? I use Matlab all the time, and loved being able to do this on the Nokia N900.
Chalup said:
Thanks for posting how to get it running on the Galaxy S.
But what about using X over SSH to run software remotely with a GUI such as Matlab? I use Matlab all the time, and loved being able to do this on the Nokia N900.
Click to expand...
Click to collapse
I don't see why you couldn't do that, however I'm a bit old fashioned and like having an offline program rather than a remote application. Plus, if I understand you correctly, running a remote version of Matlab or other similar software would not work well with the resolution available on even the enormous 4.3 inch screen of an Evo. But I'm not an expert with linux, so please correct me if I am wrong.
Is somebody still working on this?
I would really appreciate it to see a CAS App for android! Still cant understand why the devs of Space Time (iPhone) do not port their software to android...
An other cool App would be an UI that can connect to a Mathematica remote kernel...
Matlab is not a computer algebra system!
try doing d/dx(x^2) = 2x in matlab
Chalup said:
Thanks for posting how to get it running on the Galaxy S.
But what about using X over SSH to run software remotely with a GUI such as Matlab? I use Matlab all the time, and loved being able to do this on the Nokia N900.
Click to expand...
Click to collapse
I can code C-backend, but there no ppl, who want write GUI to it.
EDIT: hm found this project http://sourceforge.net/projects/yacasandroid/
This looks like it could be great. I know how to make gui's but my android development skills are raw. Yacas seems to be something you would use NDK for since you don't want to require root access. And a java implementation would not be ideal if you want speed.
Another App
Try this:
At
code . google.com/p/symja/
Look for symjadroid
You have here the link to the Android application:
http://code.google.com/p/symja/wiki/Android
Thanks.
Maxima on Android
Yes we can !! :good::good:
With graphic output.
Sorry still not links for me:
sites.google.com/site/maximaonandroid

[Q] Angry Birds Rio encrypts settings/highscores with AES

Hey everyone,
i used to edit/backup my angry birds files. It worked fine with angry birds and angry birds seasons. But now with angry birds rio rovio encrypts the files with AES.
what i know so far from IDA pro:
for example GameLua::loadLuaFileToObject does
=> io::FileInputStream::read
=> lang::AESUtil::AESUtil(...)
=> lang::AESUtil::decrypt(...)
So,
are any IDA excperts here who might help me figuring out the arguments to that decrypt call( the AES key). Or do you have any ideas on how to figure out the AES key at all?
Greets, Goddchen
Goddchen said:
Hey everyone,
i used to edit/backup my angry birds files. It worked fine with angry birds and angry birds seasons. But now with angry birds rio rovio encrypts the files with AES.
what i know so far from IDA pro:
for example GameLua::loadLuaFileToObject does
=> io::FileInputStream::read
=> lang::AESUtil::AESUtil(...)
=> lang::AESUtil::decrypt(...)
So,
are any IDA excperts here who might help me figuring out the arguments to that decrypt call( the AES key). Or do you have any ideas on how to figure out the AES key at all?
Greets, Goddchen
Click to expand...
Click to collapse
I'm afraid you can't decrypt an AES key with a current PC, considering it would take some good millions of years to bruteforce.
Your best bet would be finding an exploit into how the game implements this encryption, I guess.
sorry you might have misunderstood me.
i don't want to crack the key, i simply want to extract it. it has to be stored in the file somewhere.
Ever tryed the old fashion way of searching addys maybe even reversing the whole game? Wait I'm a computer game hacker idk about adroid games lol sorry uhmm I'm sure you can reverse enough to find the file but then again could it possibly be stored outside of the game itself?
Sent from my Vision using XDA Premium App
yes that's exactly what i want to do. i have already found the file loading/saving function that use the AESUtil, but i can't figure out where the actual key is stored
Could you have a look at it if i send you the binary file?
Greets, Goddchen
Yeah send them all to me every one you can find and I will search away hopefully its not somthing stupidly named that throws me off...and why hack a game like this anyways?
Sent from my Vision using XDA Premium App
Also have you tryed opening it up with a hexeditor? I know I know billions of lines of useless numbers for what you want but there is a chance it will be labled in there somewhere
Sent from my Vision using XDA Premium App
Yes i did that, and also decompiled the whole thing with IDA pro. That's why i know it's AES, because the read / write function use the AESUtil functions. But i can't figure out the address where the key is located...
Have you searched for aes or key I know it might sound funny but time after time I've found addys that way and and I toatally forgot that you used ida I use that to decompile dlls and mem dumps for my hacking on games...but pm me the files (idk never tryed sending files on here before so I'm not sure if its possible here if not pm for my email)
Sent from my Vision using XDA Premium App
you already have a PM
All assets/*/*.lua files are encrypted using AES, CBC mode with empty initial vector and 256-bit key = 'USCaPQpA4TSNVxMI1v9SK9UC0yZuAnb2' (yes, ascii only). After decryption you will see 7z file with real *.lua file inside.
Example in Python:
Code:
from Crypto.Cipher import AES
AES.new('USCaPQpA4TSNVxMI1v9SK9UC0yZuAnb2', AES.MODE_CBC, '').decrypt(open('MainMenuPage.lua', 'r').read())
You should see a string starting with "7z" and after saving it to a file you should be able to open it using any 7z archiver.
Still I don't know about highscores.lua and settings.lua - these files are different. I'm afraid they aren't 7z files, so even if I'll decrypt them successfully, I'll just get some unknown binary files.
wow i'm impressed! where did you get the key from?
Hm, when trying to decrypt the highscores.lua or settings.lua i keep getting
"java.io.IOException: last block incomplete in decryption".
Do you have any experience with Java AES encryption?
I've played with this a little.
The provided key does decrypts other LUAs, but not the highscores...
They either used another key or messed up something after applying encryption.
The error is javax.crypto.BadPaddingException: Given final block not properly padded
Again, I was able to decrypt level LUAs to plain 7z.
BTW: The highscores.lua is a plain text if decrypted correctly.
yes it should be plain lua files. This is the case for Angry Birds and Angry Birds Seasons, just RIO is encrypted
Can you please explain how to got your hands on the key you mentioned? Maybe this help me track down the key used to encrypt the highscores/settings.
Greets, Goddchen
still no progress
i also had a look at a hprof heap dump but counldn't find anything that looks like a 256 bit aes key...
Any more ideas?
highscores.lua and settings.lua are encrypted with AES, CBC mode, PKCS7 padding and key = '44iUY5aTrlaYoet9lapRlaK1Ehlec5i0'.
In my next post I will describe how I got these keys
Man! This is totally awesome! You're my hero!
Well... I have attached a debugger to native code, set breakpoints, analyzed registers, memory, etc. It wasn't that easy though. It took me several days to start debugging and get first key, but I got second one in about 1 hour.
Actually I don't really need that key, I can't even play Angry Birds Rio on my old G1, but it was challenging and I love challenges ;-) Plus I have learnt a LOT about gdb, assembler, ARM architecture, etc.
So I want to thank you, Goddchen, for giving me an opportunity to learn & play
Ok, let's move on...
First, I have disassembled libangrybirds.so using IDA Pro 5.5 . I was able to examine code and attach IDA to gdbserver on a device, but unfortunately it wasn't working properly. IDA was thinking that libangrybirds.so is a main binary of a process it attached to, but it should look into loaded shared libs instead. Weird, but I didn't find a way to attach it properly. And this is pity, because IDA is a great tool and it would make debugging a pleasure, but I had to use gdb instead.
Second, Android has problems with debugging multi-threaded native code. MT support was added in NDK r5 and because of some bug it's not possible on a system older than Gingerbread.
Third, you could attach gdb manually, but ndk-gdb script does great work for you. You will have to do some tricks to use it with 3rd party app though.
Fourth, it seems libangrybirds.so is a Java code compiled to native or something like that. There are objects like FileInputStream, ByteOutputStream, etc., but there are also some API differencies. We'll see String and Array<uchar> objects, but it's usually easy to find a pointer to simple uchar[].
Steps to start native code debugging:
Upgrade to Gingerbread (Yeah, I had to do that. Hacking requires you to sacrifice yourself a bit ;-) ). Or you could use an emulator.
Install NDK >= r5 .
Decode Angry Birds Rio using apktool. You could just unzip it, but decoded app is much more similiar to original sources, so it's more compatible with NDK. For example ndk-gdb reads AndroidManifest.xml to get package name. Of course you could fake simple AndroidManifest.xml and other files if you want.
Rename lib dir to libs.
Fake jni/Android.mk file. I have copied one from hello-jni sample and didn't even bother to modify module name: http://pastebin.com/HMBXt5cm .
Copy libs/armeabi*/libangrybirds.so to obj/local/armeabi*/ . Normally this is done by ndk-build command.
Fake libs/armeabi*/gdb.setup file. It should be something like: http://pastebin.com/BYm13RKz , but second line isn't that important.
Angry Birds Rio apk contains old gdbserver and you need one from NDK r5. Grab ${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver and push it to /data/data/com.rovio.angrybirdsrio/lib .
Ufff... you could now try to run: ndk-gdb --verbose --launch=com.rovio.ka3d.App .
After few seconds you should see "(gdb)" prompt and game should be paused on the device.
Run 'info shared' and check if libangrybirds.so is loaded. If not then something is wrong.
Ok, let's find a key for levels lua files:
Set a breakpoint for GameLua::loadLevel() - find this method in IDA Pro and copy its EXPORT name:
Code:
(gdb) br _ZN7GameLua9loadLevelEN4lang6StringE
Breakpoint 1 at 0x80468e4c
Resume game and open some level. You should hit a breakpoint:
Code:
(gdb) c
Continuing.
[New Thread 5857]
[Switching to Thread 5857]
Breakpoint 1, 0x80468e4c in GameLua::loadLevel () from /home/brutall/t-angrybirds/com.rovio.angrybirdsrio-1/obj/local/armeabi/libangrybirds.so
Look into IDA and note there are 2 lang::String objects passed as first arguments to method, so pointers are in R1 and R2 registers. We need to examine these objects and find pointers to raw char[]. Fortunately lang::String is very simple wrapper around char[], so pointer is first (and only one, I think) member of String:
Code:
(gdb) x/4x $r1
0x4395e66c: 0x00a405f0 0x00153b28 0x804ec778 0x00000000
(gdb) x/s 0x00a405f0
0xa405f0: "levels/warehouse/Level190"
Yey, finally we see something
Let's move to lang::AESUtil::decrypt() method. It's named _ZN4lang7AESUtil7decryptERKNS_5ArrayIhEES4_RS2_, so:
Code:
(gdb) advance _ZN4lang7AESUtil7decryptERKNS_5ArrayIhEES4_RS2_
0x80539894 in lang::AESUtil::decrypt () from /home/brutall/t-angrybirds/com.rovio.angrybirdsrio-1/obj/local/armeabi/libangrybirds.so
As you can see decrypt() gets 3 Array<uchar> objects and 2 of them are const. It's quite easy to guess they're: key, encrypted data and container for decrypted data. Let's check this:
Code:
(gdb) x/4x $r1
0x1592b0: 0x00159528 0x00000020 0x00000020 0x7b206e65
0x00000020 = 32 - yes, length of AES key First 4 bytes of an Array object is a pointer to raw char[] and second 4 bytes contain length of an array. Now we could read contents of an Array:
Code:
(gdb) x/s 0x00159528
0x159528: "USCaPQpA4TSNVxMI1v9SK9UC0yZuAnb2a"
As you can see there are 33 chars instead of 32. This is because Array stores its length, so char[] isn't null-terminated. Ignore last "a" char.
We could also look into second const Array to be sure that encoded string is exactly the same as contents of lua file:
Code:
(gdb) x/4x $r2
0x4395d6f4: 0x009ca248 0x000004a0 0x000004a0 0x00000378
(gdb) x/4x 0x009ca248
0x9ca248: 0x3347b5dc 0x26048446 0x1a0c1231 0x35d3f99c
First 16 bytes are the same, length of data is also ok.
As you can see there is AES::BlockMode passed to AES:ecrypt(). It would be quite hard to interpret it without headers, so I was trying various block modes and I found that CBC with empty initial vector decodes to string starting with '7z'. For me that meant: mission successfull
Ok, highscores.lua and settings.lua files now. Technique is very similar, but there are some differences:
Different keys.
They aren't loaded using GameLua::loadLevel(), but GameLua::loadPersistentFile(). You could find this very easily, searching for "highscores.lua" in IDA.
If you examine GameLua::loadPersistentFile() method you will see it doesn't load files using FileInputStream, but io::AppDataInputStream, so we have to be sure, what exactly is being decrypted.
Annoying thing is that gdb can't catch highscores/settings loading, because they're loaded too soon - before gdb attach itself.
Maybe there is a better solution to last problem, but I've decided to add some Thread.sleep() call just after System.loadLibrary(), so gdb will attach before highscores.lua loading.
Open smali/com/rovio/ka3d/App.smali, and add 2 lines of code just after loadLibrary() call in onCreate() method:
Code:
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
const-wide/16 v0, 5000
invoke-static {v0, v1}, Ljava/lang/Thread;->sleep(J)V
Run ndk-gdb --verbose --launch=com.rovio.ka3d.App .
Set a breakpoint for GameLua::loadPersistentFile() method and check which file is being loaded:
Code:
(gdb) br _ZN7GameLua18loadPersistentFileERKN4lang6StringE
Breakpoint 1 at 0x80457030
(gdb) c
Continuing.
[New Thread 6735]
[Switching to Thread 6735]
Breakpoint 1, 0x80457030 in GameLua::loadPersistentFile () from /home/brutall/t-angrybirds/com.rovio.angrybirdsrio-1/obj/local/armeabi/libangrybirds.so
(gdb) x/s $r2
0x4395e3b8: "highscores.lua"
I'm not sure why it's R2, not R1 and why there is no lang::String, but char[] directly. I think this isn't a pointer to String, but String itself, passed to method in registers, so its char[] is in R2.
Now advance to lang::AESUtil::decrypt() method and read key as usual:
Code:
(gdb) advance _ZN4lang7AESUtil7decryptERKNS_5ArrayIhEES4_RS2_
0x80539894 in lang::AESUtil::decrypt () from /home/brutall/t-angrybirds/com.rovio.angrybirdsrio-1/obj/local/armeabi/libangrybirds.so
(gdb) x/4x $r1
0x159294: 0x00159620 0x00000020 0x00000020 0x00159518
(gdb) x/s 0x00159620
0x159620: "44iUY5aTrlaYoet9lapRlaK1Ehlec5i0"
Because of that AppDataInputStream object, we need to check if encrypted data is the same as file contents. Pull highscores.lua file from a device and run:
Code:
(gdb) x/4x $r2
0x4395ddc4: 0x0015bc00 0x00000040 0x00000040 0x00000001
(gdb) x/16x 0x0015bc00
0x15bc00: 0x2271b777 0xe6f19f4c 0x2489a316 0xfae1aee2
0x15bc10: 0x82e0ef38 0xe84fc25d 0xb196adac 0xbf030439
0x15bc20: 0xb6b9bade 0x3046af12 0xe8eeeb0d 0x20e8037c
0x15bc30: 0x1a405edf 0xc218f7f6 0xc29209e2 0x9ad03e8c
Yeah, this is my highscores.lua file.
Same for settings.lua file to check if it's encrypted with the same key. It is.
After decrypting these files we'll see some weird chars at the end of decoded data. Few seconds on the Wikipedia and we'll know this is just PKCS7 padding scheme.
Now we have got everything we want
Ahh, not exactly everything... I would be really happy to know, how to properly attach IDA for debugging - it would be much easier, even if gdb interface is also very good.
wow thank you so much for that detailed description. I'll give a try in the next days to see if i can reproduce the whole thing on my own I'm really impressed

PengDroid: a healthy fusion of Debian and Android

Notice: Now that PengDroid has been rolled into BotBrew, this installation method is now deprecated. You'd get all this, and a package manager GUI, by installing BotBrew "basil".
Click to expand...
Click to collapse
I love Debian, and I think it's nice to have a chroot environment full of useful tools. However, there's always a barrier keeping Android and Linux from talking to each other. This is why BotBrew is designed to not rely on a chroot system.
PengDroid is an experimental chimera of Android and Linux that gives you access to a chrooted Linux userland while preserving access to the Android system.
If this sounds dangerous, let me explain why this is safe. Have a look at the root directory of a Linux system and the root directory of an Android system; notice how they don't overlap much. This means that we could safely map some of the most useful Android directories into the Linux namespace; there's no need to modify the Android side. Let's see the code.
I made a prebuilt archive to demonstrate this method. In exchange for trying, you get a nice Debian chroot. What's not to love?!
download pengdroid.tgz to your Android device
unpack it to /data (or /sd-ext): tar zxvf path/to/pengdroid.tgz -C /data
run it: /data/pengdroid/init
For a quick sanity check, run: getprop ro.product.model (whoa, Android inside Linux)
Then, for some more fun: apt-get
By default, no repositories are enabled.
Note: Before we start installing packages from Debian, we should actually install Debian. Wait, what? Right, PengDroid is so small because it packs just enough for us to use dpkg/apt; but many Debian packages assume that we have a complete setup. To bootstrap a minimal Debian installation, run /debian.sh (which makes the final installed size a whopping 58mb). If that's too much, keep reading.
Advanced Usage
Installing a minimal Debian gives us a fairly complete, but still small, *nix system. If we wanted to go even lighter, but still have a reasonably robust setup, we could run the alternative installer: /debian.sh apt -- which installs a complete dpkg/apt system.
It's a hassle to run /data/pengdroid/init all the time, but we could fix that by making a shortcut:
Code:
busybox mount -o remount,rw /system
echo '/data/pengdroid/init -- "[email protected]"' > /system/bin/pengdroid
chmod 0755 /system/bin/pengdroid
Now, we could just prefix everything with pengdroid, like so: pengdroid python
Or, if we just want a shell: pengdroid
Awesome! Although you can probably do better on the name assignment, this is another great step transforming Android into a real Unix Distribution
Yeah, the name's awkward. But I figured I'd roll this into BotBrew some day, when we slim it down enough. It's already pretty tiny for a Linux distro, but it could be even smaller if all we want is a package manager.
PengDroid is now on a diet. It installs to some 7.7mb, with a 3.5mb download size. This is good enough to support package management, and we're one command away from a minimally-functional Debian setup (instructions in OP).
/edit:
I just fixed a potential privilege escalation vulnerability in init.c, and added some new PATH-handling code. Instead of overriding the PATH, it now prepends to it. In addition, if PATH contains a double-colon ( :: ), it inserts its additions between the colons instead of prepending. To install the new init executable without reinstalling, do (outside of PengDroid):
Code:
wget http://dl.inportb.com/pengdroid.init
cp pengdroid.init /data/pengdroid/init
umount /data/pengdroid
rm pengdroid.init
/edit:
It seems that Debian Squeeze is a bit too old for our needs. Specifically, for reliable package management across many types of Android devices, we need multiarch support. So now, I'm tracking Debian Sid.
Excited to see the debian runit scripts and how they operate. I am too noob to know the difference between the Debian distros, but I have learned to trust you in such decisions.
How about adding the pengdroid symlinks to bbsh when it makes it to +1?
I'm sure it or something like it is already firmly in the testing phase. Sounds like SOP now that I write it. I just always forget and try to get a pengdroid shell between flashes.
Watch, he's gonna tell me an easier way I should know already...
Sweet, Finally, Debian & Android rolled up together in a neat little package. Il test this out later,
& do you hail from West or South London by any Chance, where i come from "Peng" is a slang term for "Sexy"
Oh snap, I lost track of this thread
You might have noticed a pengdroid.zip archive in my files. That's a self-extracting package for those who don't have a working tar utility. You could extract it using unzip, or just run the file like a program:
Code:
chmod 0755 pengdroid.zip
./pengdroid.zip
mateorod said:
Excited to see the debian runit scripts and how they operate. I am too noob to know the difference between the Debian distros, but I have learned to trust you in such decisions.
How about adding the pengdroid symlinks to bbsh when it makes it to +1?
I'm sure it or something like it is already firmly in the testing phase. Sounds like SOP now that I write it. I just always forget and try to get a pengdroid shell between flashes.
Watch, he's gonna tell me an easier way I should know already...
Click to expand...
Click to collapse
We'll essentially be killing the existing sysvinit system and offering additional packages containing runit scripts. sysvinit is pretty good, but not enough to keep track of services.
I'd like to have [almost] perfect compatibility with the current BotBrew. BotBrew works by attaching its own filesystem (which conveniently lives under /botbrew) to the existing Android tree. Pengdroid turns this relationship on its head: it attaches crucial parts of the Android filesystem to the Debian tree, and then chroots into Debian. Technically, the chroot/reversal is not required, but it simplifies cleanup.
In BotBrew+1, /botbrew lives within the Debian filesystem tree already. After chrooting into Debian, we have automatic access to /botbrew as before. But what about direct access without chrooting? That's easy... just selectively attach the debian/botbrew directory the same way we've always been doing. So we'll need a couple of changes:
bbsh needs to detect if it's called from within the chroot and handle that special case
the init program (for starting the chroot) should add /botbrew/bin to the PATH
Multiarch is another fun thing to play with. Debian recently (officially) gained the ability to install libraries for multiple architectures at the same time. For example, this lets you have both i386 and amd64 software installed on your 64-bit system. In BotBrew, we'll take advantage of this to install both Debian packages and Android-native packages.
Why are we still planning to distribute the old stuff (repacked from Opkg) if we could get all of that and more from Debian? Simply put, these Android-native packages tend to be more efficient in terms of execution speed and space usage. But during the testing phase, I'd like to use Debian software primarily because we get those for free
Der_Panzerfaust said:
Sweet, Finally, Debian & Android rolled up together in a neat little package. Il test this out later,
& do you hail from West or South London by any Chance, where i come from "Peng" is a slang term for "Sexy"
Click to expand...
Click to collapse
Just a coincidence, I assure you, since I'm on the other side of the great pond I thought this might be an appropriate name for a penguin cyborg, that's all.
Roger that
Sent from my E15 using xda premium

Is it possible to get some standard linux tools into Android?

Ok, I read through several threads here and there and everything I found out here and there was, well, we do not have these tools/commands, but the discussion went into other directions and where never really answered.
My situation:
I do several thing every day, some of them are fun, others are not. The funny things I mostly do myself by hand. The not so funny things, well, shell scripts are funny.
I startet a terminal on my Android (After 2 days of work to get nslookup and dig running on iOS 5.1.1 together with crontab.) and tested some functions/tools I daily need for some of my shell script:
- chown -> works
- chmod -> works
- nslookup -> works
- dig -> up and running
- simple rm, mv, mkdir, rmdir -> check
- crontab -> WTF?! You serious, I LOVE IT!
- zip -> error <- Ouch, that hurts. Sure, gzip, tar and others are there I hope.
- sudo -> even bigger error
- login -> error <- Don't get me wrong, but when there is root, there are other users, ls -la gives me at least 3 users: root, system, radio, and 4 groups: sdcard_r, cache, system, root
passwd -> Ok, I get it, different usermanagment, but the rightsmanagment seems to be the same than in std. linux. I chowned a dir and chmoded some things for testing purpose and I got no access to these files unless I use a file explorer/manager with root, so there is basicly the same rights managment behind it. Switching chown and chmod back to original state, everything works without root access file manager. Oh and "w" doesn't work, not even "who". lsof returns many things, every app is its own user, well, normal behaviour.
I than tested some variables, that are standard, even on iOS (Without doing more than jailbreaking and installing a terminal.)
sudo echo $SUDO_USER -> error <- clear, we have no sudo.
su echo $SUDO_USER -> empty <- Yep, no sudo, no $SUDO_USER
su echo $SU_USER -> empty <- I guessed it, because, well, we have nothing else to guess.
Since variables return empty even when they are not set or do not exist, we can't say that this will work in any way unless we know every damn variable set in the whole system. $SUDO_USER in a normal *nix enviroment returns empty when no sudo is in use currently. If in use, it will return the current user that is running sudo, normaly the logged in user or the corresponding worker taskname that is set in the system. lsof on Android shows many app_XX entries, so like normal under *nix.
Ok, my question:
Would it be possible to get sudo, zip and the $SUDO_USER running on Android? I don't mind the possible security issues that could come with this, I have several SGS2 and 2 of them have no SIM card, these are only gadget tools for command line and other stuff. There is no data on these SGS2 that are important.
Discussion about pro and cons are not welcome. This is just a possibility question. My Linux skill is to low to get these things done myself, so I ask you people who know more about this. And yes, I try to get some shell scripts running on my androids, why not use these wonderful gadgets for productity when most of the people waste time with FB, twitter and co on their mobiles.

[SOURCE](TUT){LEGION-MODZ}WARP3D 420 $ROM$ R3TURNZ- cd ~/XDA/$ROM$

{
"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"
}
I started this thread because my pre-paid phone is not a supported device.
I have to start this over from scratch, so no need to dwell in the past. The reason I started learning this stuff was to help others. I don't even use custom roms in my phone. I have always liked computers, and anything to do with electronics. I don't care for this N00Bz word. I don't care for people that look down on another human being for anything. God above made us all differently for a reason. Society made sellers and buyers, translated to the Android community as builders and users.. My old lady thinks ROOTING is something you do in the garden.. My new project has nothing to do with Cyanogenmod,AOKP, or JellyBeer. I like to do things that no one has done yet. That is why I am not going to reveal my new Source code. Seems like everytime I come up with an idea somebody else gets "motivated" to do it. lol To be honest I will be working on two seldom done roms, i'm repo sync'n the first one right now. Also, during my stay at XDA- i will make a very detailed tutorial on building from Source. Starting with
1. dual and tri booting your PC, for the Windows lovers. (u need Linux 2 build)
2. Learning to use "Google" , this is your new best friend, It never gets tired of your questions, it never runs out of answers, and open 24 hours a day...
3. Learn basic linux commands ....cd, su, apt-get, etc
4. Setting up your build by yourself
5. Setting up a pre-made build box (see step 1)
6. Learn to use Github
7. Use your newly acquired knowledge to "git" your Sources
8. Build a device tree
9. Build a kernel
10. Put together a script to pull Prop files
11. Building
12. Beating your head on the desk when you can't figure out why it wont build, boot , and why you have so many "bugz"
I AM NOT A DEVELOPER
But when i finish this tutorial, i will be.
this tutorial will not cover anything to do with "cooking" a rom, that is cheating...lol
Now I'm going to try my luck at these new $ROM$.
Thank you for visiting and God bless you
"MORE TO FOLLOW"
In the Beginning ,there was DARKNESS and cheap phones
STEP 1​
Windows 7 and Ubuntu,BBQ, or Mint,etc,Build boxes or from live CD. Despite their opposing missions, can get along like best pals on a single computer. Here's how to set up a dual boot or tri boot system that lets you enjoy the best of both worlds in perfect harmony. I know this works because it is how my system at home and on my laptop are setup.
HINT: Linux has around 100 viruses, Windows , it can't be counted. In linux it is harder to get viruses on a PC. Also, Windows viruses don't carry over to your Linux build OS.
Seen in this comparison article
"The expression is intended to suggest that proprietary software is more secure by virtue of its closed nature. If hackers can't see the code, then it's harder for them to create exploits for it--or so the thinking goes.
Unfortunately for Windows users, that's just not true--as evidenced by the never-ending parade of patches coming out of Redmond. In fact, one of Linux's many advantages over Windows is that it is more secure--much more. For small businesses and other organizations without a dedicated staff of security experts, that benefit can be particularly critical."
http://www.pagestart.com/win7heptaboot01.html
1. Make sure you have CD's or USB's with your Distro's on them. I use image burn. If it's Windows, PAY FOR IT!!! if it's Linux, IT'S FREE!!!
2. You are going to need extra space on your hard drive, or PG suggested you can use an extra hard drive.
a. Each repo is going to use up 30 GB
b. Your build tools maybe 5 GB
c. 300 mb for the boot
d. 5-10 GB for the SWAP
e. I use a 1TB for a tri-boot ,500 GB for Windows 7- 250 GB for each of my Linux distros
f. RAM,RAM,RAM,RAM and then some more RAM-- u can thank me later.
g. If you don't have RAM, like on my laptop, I just hooked it to my Internet connection, and let it pull Source while I was sleeping.
3. I like to start fresh--Make a backup, Then I use "KILLDISK" ,it is free and it will write zero's on your hard drive. "Warp, Why do u do that?"
I don't like viruses.
4. Use your Recovery partition or your Windows XP/VISTA/7/8 disk to install the OS.
5. Many hours later, boot into Windows, and hit Start..type diskmgmt.msc
6. If you haven't partitioned a hard drive ,Google it, and learn, this is not a game.
7. Dual boot = 2 primary partitions Tri boot = 3 primary partitions.
Logical is OK for Linux, but dynamic is no good.
8. Pop that fresh copy of your distro in
9. If you are new to Linux "Google it"
10. If you press install alongside windows, it will search out the empty partition and install
11. I don't like GRUB2.
12 Get the non-commercial version of "EasyBCD for Windows, install it, u will be needing it.
13. This is also a free app Google "use easy BCD for dual boot"
14. The only other step needed on the tri boot setup is logging into the first Linux distro u install, open terminal and execute update-grub2 . after everything else is done...
15. If you opted for the "Build Box, skip the setting up build step....
There is also another method to installing Linux on a Laptop, or a stubborn PC with Graphics issues and that is with the "Alternate Ubuntu installer"
I have only got this to work on 12.04 lots with recovery failsafex mode
REMOVE
SYSTEM RESERVED:
THIS CAN MESS UP YOUR PC:
I'M ONLY ADDING THIS FOR ADVANCED USERS:
ALL THE STEPS ARE HERE AT THIS LINK, BUT I USED WHATS IN THE CODE BOX AND IT WORKED FOR ME.
http://www.terabyteunlimited.com/kb/article.php?id=409​
Code:
Open Disk management ,
give SYSTEM a drive letter of e:
Run CMD as Admin
reg unload HKLM\BCD00000000 (if you get an ERROR: bla bla bla) then this may already be removed)
robocopy e:\ c:\ bootmgr
robocopy e:\Boot C:\Boot /s
dir c:\ /ah
If the bootmgr file and the Boot folder show up in the list, the procedure was successful.
bcdedit /store c:\boot\bcd /set {bootmgr} device partition=C:
bcdedit /store c:\boot\bcd /set {memdiag} device partition=C:
Close the Command Prompt window.
Return to Disk Management
Right-click on the Windows partition and select Mark Partition as Active
IF YOU HAVE TO ASK "WHY" I DID THIS ...DON'T DO IT (see number 7.) also easyBCD can do this process as well
Then came GOOGLE!
STEP 2​
This is a SIMPLE STEP...
WWW.GOOGLE.COM
Not www.goggle.com which is a real site, made by Hack3rz. it will mess your PC up.
This step is not limited to one search engine, Google is just my preferred one, because it links in UTUBE in search results and i like it.
Here is a list of other search engines.
Code:
General
No. Name
1 Baidu
2 Bing
3 Blekko
4 DuckDuckGo
5 Exalead
6 Gigablast
7 Google
9 Sogou
10 Soso.com
11 Volunia
12 Yahoo!
13 Yandex
14 Youdao
P2P search engines
No. Name
1 FAROO
2 Seeks
3 YaCy
Metasearch engines
No. Name
1 Blingo
2 Yippy
3 DeeperWeb
4 Dogpile
5 Excite
6 Harvester42
7 HotBot
8 Info.com
9 Ixquick (StartPage)
10 Kayak & SideStep
11 Mamma
12 Metacrawler
13 Mobissimo
14 Otalo English
15 PCH Search and Win
17 WebCrawler
Geographically limited scope
No. Name
1 Accoona
2 Alleba
3 Ansearch
4 Biglobe
5 Daum
5 Egerin
6 Goo
7 Guruji.com
8 Leit.is
9 Maktoob
10 Miner.hu
11 Najdi.si
12 Naver
13 Onkosh
14 Rambler
15 Rediff
16 SAPO
17 Search.ch
18 Sesam
19 Seznam
20 Walla!
21 Yandex.ru
22 Yehey!
23 ZipLocal
I got this list from using "Google"
1. you need to know how many MB in a GB , Google it =1024
2. You need a copy of a missing file ...
3. Anything you aren't sure of.....
4. If you can't find it then go to XDA, Android Forums, unleashedprepaids.com, etc and Search it. Chances are somebody has had the same problem as you.. DONE STEP 2
No, You mean I have to learn something to make a $ROM$
STEP 3​
Unix commands
Note that there are thousands of commands available on a typical unix box. In bash, just hit the "Tab" key twice and say yes, to display the the commands currently available on your machine. A standard unix operating system lists currently thousands of commands. Type x to list all commands starting with x. The following list contains some of the more frequently used programs.
Code:
Access Control
exit - terminate a shell (see "man sh" or "man csh")
logout - sign off; end session (C shell and bash shell only
passwd - change login password
rlogin - log in remotely to another UNIX system
ssh - secure shell
slogin - secure version of rlogin
yppasswd - change login password in yellow pages
Communications
mail - send and receive mail
mesg - permit or deny terminal messages and talk requests
pine - send and receive mail
talk - talk to another logged-in user
write - write to another logged-in user
Programming Tools
as - assembler, specific to each machine architecture
awk - pattern scanning and processing language
bc - online calculator
cc - C compiler
csh - C shell command interpreter
dbx - source-level debugging program
f77 - Fortran compiler
gdb - GNU Project debugger
gprof - display profile of called routines
kill - kill a process
ld - the UNIX loader
lex - generate lexical analysis programs
lint - check C source code
make - maintain large programs
maple - symbolic mathematics program
math - symbolic mathematics program
nice - run a command at low priority (see "man nice" or "man csh")
nohup - run a command immune to hangups
pc - Pascal compiler (xlp on ADS)
perl - Popular script interpreter
prof - display profile data
python - Python programming language
sh - Bourne shell command interpreter
yacc - generate input parsing programs
xcalc - graphical calulator under x
Documentation
apropos - locate commands by keyword lookup
find - locate file (i.e. find . -name *.tex -print)
info - start the info explorer program
man - find manual information about commands
whatis - describe what a command is
whereis - locate source, binary, or man page for a program
Editors
emacs - screen-oriented text editor
pico - screen-oriented text editor (renamed called nano)
sed - stream-oriented text editor
vi - full-screen text editor
vim - full-screen text editor ("vi-improved")
File and Directory Management
cd - change working directory
chmod - change the protection of a file or directory
chown - change owner (or group) of a file or directory
chgrp - change group of a file or directory
cmp - compare two files
comm - select/reject lines common to two sorted files
cp - copy files
crypt - encrypt/decrypt files (CCWF only)
diff - compare the contents of two ASCII files
file - determine file type
grep - search a file for a pattern
gzip - compress or expand files
ln - make a link to a file
ls - list the contents of a directory
lsof - list of open files
mkdir - create a directory
mv - move or rename files and directories
pwd - show the full pathname of your working directory
quota - display disk usage and limits
rm - delete (remove) files
rmdir - delete (remove) directories
stat - status of file (i.e. last access)
sync - flush filesystem buffers
sort - sort or merge files
tar - create or extract archives
tee - copy input to standard output and other files
tr - translate characters
umask - change default file protections
uncompress - restore compressed file
uniq - report (or delete) repeated lines in a file
wc - count lines, words, and characters in a file
Code:
File Display and Printing
cat - show the contents of a file; catenate files
fold - fold long lines to fit output device
head - show first few lines of a file
lpq - examine the printer spooling queue
lpr - print a file
lprm - remove jobs from the printer spooling queue
more - display a file, one screen at a time
less - like more with more features
page - like "more", but prints screens top to bottom
pr - paginate a file for printing
tail - show the last part of a file
zcat - display a compressed file
xv - show print, manipulate images
gv - show ps and pdf files
xpdf = shopw pdf files (use gv)
File Transfer
ftp - transfer files between network hosts
rsync - fast and flexible sync between computers
scp - secure version of rcp
Miscellaneous
alias - define synonym commands
chquota - change disk quota on ACITS UNIX systems
chsh - change default login shell
clear - clear terminal screen
echo - echo arguments
pbm - portable bitmap manipulation programs
popd - pop the directory stack (C shell only)
pushd - push directory on stack (C shell only)
script - make typescript of terminal session
setenv - set an environment variable (C shell only)
stty - set terminal options
News/Networks
netstat - show network status
rsh - run shell or command on another UNIX system
ssh - secure-shell version of rsh
Process Control
bg - put suspended process into background
fg - bring process into foreground
jobs - list processes
^y - suspend process at next input request
^z - suspend current process
Status Information
clock - determine processor time
date - show date and time
df - summarize free disk space
du - summarize disk space used
env - display environment
finger - look up user information
history - list previously issued commands
last - indicate last login of users
lpq - examine spool queue
manpath - show search path for man pages
printenv - print out environment
ps - show process status
pwd - print full pathname of working directory
set - set shell variables (C shell, bash, or ksh)
spend - lists year-to-date ACITS UNIX charges
stty - set terminal options
time - timing programs
top - list top cpu processes
uptime - show system load, how long system has been up
w - show who is on system, what command each job is executing
who - show who is logged onto the system
whois - Internet user name directory service
whoami - who owns the shell
Image Processing
gimp - photoshop type image processing program
xfig - drawing program
xv - image viewer
xvscan - scan picture
xpaint - paint program
kpaint - kde paint program
Sound
mplayer - mpg player
realplay - realaudio player
timidity - midi to wav converter and player
xmms - mp3 player
Text Processing
abiword - open source word processor
addbib - create or extend bibliographic database
col - filter reverse line feeds
diction - identify wordy sentences
diffmk - mark differences between files
dvips - convert TeX DVI files into PostScript
explain - explain phrases found by diction program
grap - pic preprocessor for drawing graphs
hyphen - find hyphenated words
ispell - check spelling interactively
latex - format text in LaTeX (based on TeX)
pdfelatex - latex with pdf output
latex2html - Latex to html
lookbib - find bibliography references
macref - make cross-reference listing of nroff/troff macro files
ndx - create a subject-page index for a document
neqn - format mathematics with nroff
nroff - format text for simple display
pic - make simple pictures for troff input
psdit - filter troff output for Apple LaserWriter
ptx - make permuted index (not on CCWF)
refer - insert references from bibliographic databases
roffbib - run off bibliographic database
sortbib - sort bibliographic database
spell - find spelling errors
ispell - interactive spell checker
style - analyze surface characteristics of a document
tbl - format tables for nroff/troff
tex - format text
tpic - convert pic source files into TeX commands
wget - grab webpage
X windows
grabmode - info on screen: i.e. "1152x864" 51.213kHz/56.59Hz
import - grab window (i.e. import ppm:- >out.ppm)
xdpyinfo - number of colors
xkill - kill xwindow
xlock - lock screen
xterm - xterminal
xwininfo - information on open window
Web
html2ps - html to ps
latex2html - latex to html translator
lynx - text based webbrowser
netscape - webbrowser
sitecopy - sitecopy is for easily maintaining remote web sites.
weblint - html sytax and style checker
MOST OF THESE YOU WON'T USE...
All by myself, I did it!!
STEP 4​
This next step is not easy, it is time-consuming. So if you chose a "Build Box" I understand..
Lucky for you, i have already found everything for you , So split your screen .
On one side a fresh terminal, on the other side my tutorial, and copy/paste from the beginning of part B).
HINT: When adding any file with apt-get. Watch for anything being removed and anything being added. Also copy any SUGGESTED programs to a text- editor ,research them and add them if you like..
Also when adding things with the command--- $ sudo apt-get install , numerous items can be added behind the command, but i recommend doing it one by one.
This is because of obsoleted software or missing software errors.
This is only going to be a basic list: Seperated in two parts, by A)what you need and B)how to get it.
A) TOOLS OF THE TRADE:
1. Compile Dependencies (libs)
2. Python 2.7.3 (3.2 and 3.3 opt.)
3. GNU MAKE (3.81 or 3.82)
4. Java JDK 6.xx ( not 7)
5. Android SDK
6. ADB & Fastboot
7. USB Configs
8. Repo command
9. Add everything to the PATH in ./bashrc
When you see this symbol "$", it means you are in terminal, but not as "ROOT"
Although if you see this symbol # , you are the "ROOT" user .
Your directory name will be in Red as well.
"But Warp, I don't know how to ROOT my Linux Box"
You don't say...
terminal: $ sudo passwd root
this will then open up Unix for you
add some passwords /confirm password /REMEMBER YOUR PASSWORD!!!
My password is ********** lol.
But Warp, I'm a brave "new user" I want "ROOT" access to file manager..
For Ubuntu
Terminal: $ gksudo nautilus
enter password-- DONE
For Mint (cinnamon)
Terminal: $ gksudo nemo
enter password-- DONE
For Mint (Mate)
Terminal: $ gksudo caja
enter password-- DONE!!!
B)
Libs
1..
$ sudo apt-get install git
sudo apt-get install git-core
sudo apt-get install gnupg
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install gperf
sudo apt-get install build-essential
sudo apt-get install zip
sudo apt-get install curl
sudo apt-get install zlib1g-dev
sudo apt-get install libc6-dev
sudo apt-get install lib32ncurses5-dev
sudo apt-get install ia32-libs
sudo apt-get install x11proto-core-dev
sudo apt-get install libx11-dev:i386
sudo apt-get install libreadline6-dev:i386
sudo apt-get install lib32z-dev
sudo apt-get install libgl1-mesa-glx:i386
sudo apt-get install libgl1-mesa-dev
sudo apt-get install g++-multilib
sudo apt-get install mingw32
sudo apt-get install tofrodos
sudo apt-get install python-markdown
sudo apt-get install libxml2-utils
sudo apt-get install xsltproc
sudo apt-get install readline-common
sudo apt-get install libreadline6-dev
sudo apt-get install libreadline6
sudo apt-get install lib32readline-gplv2-dev
sudo apt-get install libncurses5-dev
sudo apt-get install lib32readline5
sudo apt-get install lib32readline6
sudo apt-get install libreadline-dev
sudo apt-get install libreadline6:i386
sudo apt-get install bzip2
sudo apt-get install libbz2-dev
sudo apt-get install libbz2-1.0
sudo apt-get install libghc-bzlib-dev
sudo apt-get install lib32bz2-dev
sudo apt-get install libsdl1.2-dev
sudo apt-get install libesd0-dev
sudo apt-get install squashfs-tools
sudo apt-get install pngcrush
sudo apt-get install schedtool
sudo apt-get install python
sudo apt-get install gcc-4.7-multilib
sudo apt-get install ccache
sudo apt-get install eclipse
sudo apt-get install lzop
sudo apt-get install libwxgtk2.8-dev
sudo apt-get install liblzo2-dev
sudo apt-get install uuid
sudo apt-get install uuid-dev
sudo apt-get install zlib1g-dev liblz-dev
sudo apt-get install wmctrl
sudo apt-get install kernel-package
sudo apt-get install jfsutils
sudo apt-get install mcelog
sudo apt-get install xfsprogs
Code:
sudo apt-get install git git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 lib32z1-dev libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common libreadline6-dev libreadline6 lib32readline-gplv2-dev libncurses5-dev lib32readline5 lib32readline6 libreadline-dev libreadline6:i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev libsdl1.2-dev libesd0-dev gcc-4.6-multilib squashfs-tools pngcrush schedtool python ccache eclipse lzop libwxgtk2.8-dev wmctrl debhelper liblzo2-dev uuid uuid-dev zlib1g-dev liblz-dev kernel-package jfsutils mcelog xfsprogs
EXTRAS suggested by apt-- I wouldn't advise you installing anything unless you need them...
apport-gtk apport-kde valac gnome-user-guide desktop-base lightdm
gnome-sushi python-launchpadlib python3-launchpadlib ri ruby-dev
ruby1.9.1-examples ri1.9.1 graphviz ruby1.9.1-dev ruby-switch
ubuntu-sso-client-gui ubuntuone-client-proxy zeitgeist-datahub
imagemagick-doc autotrace enscript ffmpeg gnuplot grads hp2xx html2ps
libwmf-bin povray radiance texlive-base-bin transfig ufraw-batch
libjline-java-doc librhino-java-doc xfonts-cyrillic
git-daemon-run git-daemon-sysvinit git-doc git-el git-arch git-cvs git-svn
git-email git-gui gitk gitweb
bison-doc lib32mudflap0 ncurses-doc libasound2-doc pulseaudio-esound-compat libglib2.0-doc
dh-make debian-keyring g++-multilib g++-4.7-multilib gcc-4.7-doc
libstdc++6-4.7-dbg libstdc++6-4.7-doc libmail-box-perl lib32stdc++6-4.7-dbg libxcb-doc libxext-doc gcc-doc cpp-doc
python-markdown-doc ttf-bitstream-vera ghc-prof ghc-doc haskell-doc llvm-3.0 libghc-bzlib-doc libghc-bzlib-prof
libgmp10-doc libmpfr-dev distcc distccmon-gnome distcc-pump
ant-gcj ant-doc libbsf-java liboro-java libxalan2-java libjaxp1.3-java
liblog4j1.2-java jython antlr libbcel-java libjdepend-java libgnumail-java
libcommons-net-java javacc ant-optional-gcj junit-doc
libcommons-beanutils-java-doc libcommons-collections3-java-doc
libcommons-dbcp-java-doc libcommons-digester-java-doc
libcommons-httpclient-java-doc libavalon-framework-java
libcommons-logging-java-doc libexcalibur-logkit-java libdb5.1-java-gcj
libeasymock-java-doc ecj libecj-java-gcj libfelix-bundlerepository-java-doc
libfelix-gogo-command-java-doc libfelix-gogo-runtime-java-doc
libfelix-gogo-shell-java-doc libfelix-osgi-obr-java-doc
libfelix-shell-java-doc libfelix-utils-java-doc
libgeronimo-jpa-2.0-spec-java-doc libgeronimo-jta-java-doc
libgeronimo-osgi-support-java-doc libice-doc jetty8 libjetty8-java-doc
libjtidy-java-doc libosgi-compendium-java-doc libosgi-core-java-doc
libosgi-foundation-ee-java-doc libsm-doc libswt-gtk-3-java-gcj tomcat7
wx2.8-doc libgnomeprintui2.2-0 libxt-doc openjdk-7-demo openjdk-7-source
visualvm
i386 items
murrine-themes:i386 kde-config-gtk-style:i386 libpam-ldap:i386
libpam-winbind:i386 libnss-ldap:i386 libroar1:i386 libsndio0:i386
roaraudio-server:i386 libasound2-python:i386 nas:i386 glibc-doc:i386
locales:i386 libcanberra-pulse:i386 libdv-bin:i386 oss-compat:i386
pulseaudio-esound-compat:i386 rng-tools:i386 libgd-tools:i386 libglide3:i386 ibx11-doc:i386 xml-core:i386
gnome-keyring:i386 gnutls-bin:i386 gphoto2:i386 gtkam:i386 gpm:i386
krb5-doc:i386 krb5-user:i386 gstreamer-codec-install:i386
gnome-codec-install:i386 gstreamer0.10-tools:i386 jackd2:i386
libjasper-runtime:i386 liblcms-utils:i386 libmyodbc:i386
odbc-postgresql:i386 tdsodbc:i386 unixodbc-bin:i386 libportaudio2:i386
libroar-compat2:i386 ttf-baekmuk:i386 ttf-arphic-gbsn00lp:i386
ttf-arphic-bsmi00lp:i386 ttf-arphic-gkai00mp:i386 ttf-arphic-bkai00mp:i386
libqt4-declarative-folderlistmodel:i386 libqt4-declarative-gestures:i386
libqt4-declarative-particles:i386 libqt4-declarative-shaders:i386
qt4-qmlviewer:i386 libqt4-dev:i386 libicu48:i386 qt4-qtconfig:i386
libraw1394-doc:i386 librsvg2-bin:i386 hpoj:i386 hplip:i386
libsane-extras:i386 sane-utils:i386 libsasl2-modules-otp:i386
libsasl2-modules-ldap:i386 libsasl2-modules-sql:i386
libsasl2-modules-gssapi-mit:i386 libsasl2-modules-gssapi-heimdal:i386
speex:i386 libxcb-doc:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
After you do all this, may be a good idea to add $ sudo apt-get upgrade
2. I don't get this step. Python is already on there, and if it ain't when you input "sudo apt-get install python" it will be...
3. Gnu Make , Your suppose to get this inside of build-essential , I like to know i got the newest one ,so i do it like this.
go to http://ftp.gnu.org/gnu/make/
Download GNU MAKE 3.82
Open up file manager
go to download folder
cut file
go to home directory
paste
extract
close file manager
Open Terminal:
$ cd <name of gnu make folder(exact)>
then it will look something like this
gnu make $
$ ./configure
$ make
# make install
# make clean...DONE
4. Get rid of pre-installed "JAVA"
$ sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*
Add new Oracle JAVA 6
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
If you want to check the version after it is done
Terminal: $java -version
http://developer.android.com/sdk/index.html#download
5.Terminal: $ wget http://dl.google.com/android/android-sdk_r22-linux.tgz
When that finishes downloading
Terminal: $ tar -xvzf android-sdk_r22-linux.tgz
After extracting the package, run the command below to change into the tools directory.
cd ~/android-sdk-linux/tools
Finally, run the commands below to begin the installation.
./android update sdk
./android
"wget" is the same thing as "curl"
6. This may seem like a pointless step.
Warp, I already have ADB & Fastboot when I installed SDK, but do you have the 4.2.2 update ??
Just to make sure..
Terminal: $ sudo apt-get install android-tools-adb android-tools-fastboot
7. Create a folder in Home dir "51-android.rules" .
Now open a terminal and input: $ gksudo gedit /etc/udev/rules.d/51-android.rules
When another screen pops up copy and paste this inside--
Code:
#Garmin-Asus
SUBSYSTEM=="usb", ATTR{idVendor}=="091E", MODE="0666"
#Google
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666"
#HTC
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666"
#Huawei
SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666"
#K-Touch
SUBSYSTEM=="usb", ATTR{idVendor}=="24e3", MODE="0666"
#KT Tech
SUBSYSTEM=="usb", ATTR{idVendor}=="2116", MODE="0666"
#Kyocera
SUBSYSTEM=="usb", ATTR{idVendor}=="0482", MODE="0666"
#Lenevo
SUBSYSTEM=="usb", ATTR{idVendor}=="17EF", MODE="0666"
#LG
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666"
#Motorola
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0666"
#NEC
SUBSYSTEM=="usb", ATTR{idVendor}=="0409", MODE="0666"
#Nook
SUBSYSTEM=="usb", ATTR{idVendor}=="2080", MODE="0666"
#Nvidia
SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0666"
#OTGV
SUBSYSTEM=="usb", ATTR{idVendor}=="2257", MODE="0666"
#Pantech
SUBSYSTEM=="usb", ATTR{idVendor}=="10A9", MODE="0666"
#Philips
SUBSYSTEM=="usb", ATTR{idVendor}=="0471", MODE="0666"
#PMC-Sierra
SUBSYSTEM=="usb", ATTR{idVendor}=="04da", MODE="0666"
#Qualcomm
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666"
#SK Telesys
SUBSYSTEM=="usb", ATTR{idVendor}=="1f53", MODE="0666"
#Samsung
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666"
#Sharp
SUBSYSTEM=="usb", ATTR{idVendor}=="04dd", MODE="0666"
#Sony Ericsson
SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", MODE="0666"
#Toshiba
SUBSYSTEM=="usb", ATTR{idVendor}=="0930", MODE="0666"
#ZTE
SUBSYSTEM=="usb", ATTR{idVendor}=="19D2", MODE="0666"
Save & Close text-editor.
Now fire up another terminal
To set proper permisisons: (Provide read permission to all users, in addition to whatever other permissions are pre-set)
input:
Terminal: $ sudo chmod a+r /etc/udev/rules.d/51-android.rules
8. Terminal: $ mkdir -p ~/bin
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
Terminal: $ chmod a+x ~/bin/repo
Terminal: $ export PATH=${PATH}:~/bin
9. You can make this change to the path permanent for all future Terminal sessions:
Terminal: gedit ~/.bashrc
add export PATH=${PATH}:~/bin, on its own line, then save the file.
If you ever have problems with repo.. try this
- Make sure you have a bin/ directory in your home directory and that it is included in your path: (Very Important)
$ PATH=~/bin:$PATH
- Next,
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod +x ~/bin/repo
I don't wanna do it
STEP 5​
This step was included , for no particular reason. If you chose a build box, and you made it past step 1 without using it, you did something wrong. Go back to step 1
But I might as well include a few sources for build boxes
BBQLinux http://sourceforge.net/projects/bbqlinux/files/
SuperR's ubuntu or mint buildbox http://unleashedprepaids.com/thread-8191-post-61357.html
h311sdr0id's--h311's kitchen http://forum.xda-developers.com/showthread.php?t=2152398
How did he do that???
STEP 6​
GitHub is a web-based hosting service for software development projects that use the Git revision control system. GitHub offers both paid plans for private repositories, and free accounts for open source projects.
If you are a person that wants to "build" and become more than just a "user", then your next stop is at "Github"...
Your old buddy "Google" can get you there pretty fast.
The site provides social networking functionality such as feeds, followers and the network graph to display how developers work on their versions of a repository.
According to the terms of service,if an account's bandwidth usage significantly exceeds the average of other GitHub customers, the account's file hosting service may be immediately disabled or throttled until bandwidth consumption is reduced. In addition, while there is no hard limit, the guideline for the maximum size of a repository is one gigabyte.
GitHub also has their standard GUI application available for download (Windows, Mac, Linux) directly from the service's website.
Ever wonder, "How did this Dev get this unsupported device to boot the latest rom?" Chances are, the way they did it will be inputted in Github.
Pay attention to the device names and models, This is important, because like I said every device is different... Everyday lately, I spend an hour or two looking through Github. Not just at my device, but at other models, other kernels, other Solutions...
Now I'm not saying go there, Find a boardconfig you like, cut/paste it into your device tree, but you may find some answers to problems.
(some info from github Wiki)
beginner's links
http://blog.jonathanargentiero.com/?p=114
http://ryanflorence.com/git-for-beginners/
http://dotnet.dzone.com/articles/intro-git
http://stackoverflow.com/questions/315911/git-for-beginners-the-definitive-practical-guide
http://blog.xkoder.com/2008/08/13/git-tutorial-starting-with-git-using-just-10-commands/
http://www.webdesignermag.co.uk/features/a-beginners-guide-to-git-and-github/
git gui
http://www.collab.net/downloads/giteye
"GIT" it!!!
STEP 7​
"GOT RAM" This is when it will come in handy. EDIT: If you like to multi-task. "message for the anal thread readers"
Open up file manager, HOME directory ,make new folder, name it "android" (easy way to do it)
Open "android" folder, make new folder, name it "system"
Close file manager
or
Fire up a terminal
$ mkdir android
$ cd android
$ mkdir system
To get your Source, all you need are three things.
1. Git
2. Curl
3. Repo command
Whether you used a "build box" or set it up yourself , you have everything, but to pull Source, that's all it uses...
How to Initialize the source repository
Code:
REPOSITORY'S OF FAMOUS ROMS (Select One)
AOSP
repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1.2
PAC-Man :
Code:
repo init -u git://github.com/PAC-man/android.git -b cm-10.1
repo init -u git://github.com/PAC-man/android.git -b cm-10.2
CM 10.1 :
Code:
repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1
CM10 :
Code:
repo init -u git://github.com/CyanogenMod/android.git -b jellybean
BeerGang :
Code:
repo init -u git://github.com/BeerGang/android.git -b cm-10.1
Aokp
For 4.2
repo init -u https://github.com/AOKP/platform_manifest.git -b jb-mr1
For 4.1
repo init -u https://github.com/AOKP/platform_manifest.git -b jb
MIUI
repo init -u git://github.com/MiCode/patchrom.git -b ics
Paranoid android
repo init -u git://github.com/ParanoidAndroid/android.git -b jellybean
slim bean
repo init -u git://github.com/SlimRoms/platform_manifest.git -b jb4.2
teambaked
repo init -u https://github.com/TeamBAKED/platform_manifest.git -b jb
(I got this from another guide)
There are other codes out there, but these are main-stream.
So, what you want to do is , open a Terminal
cd = change directory
So you will
$ cd android
$ cd system
$ repo init -u git://github.com/PAC-man/android.git -b cm-10.1
At this point half your terminal or all your terminal will fill with text.
Two ways this will play out
1. it will let you register with name and email
2. it will give you on-screen codes to config it to your name and email
If you want the "Goodies" DO AS IT TELLS YOU
Now after you got that taken care of,
$ repo sync
Learn this code, remember this code, love this code.
it not only pulls the Source to your PC, but it also updates it every time you input it.
So, say Pacman adds a bluetooth update, BAM, that's how you get it.
It depends on your PC specs, to whether how long downloading your Source will take.
PG gets it quick, i get it slow, but we both get it...
For the next month or 4ever, this is where your "repo" will live..
Learn this folder, Open every folder, learn what's in there.
DO NOT ALTER, DO NOT DELETE, DO NOT REMOVE ANYTHING YET!!!
This tree has broken branches
STEP 8​
Creating a basic new device tree
First step to this is to search Github for a device tree for your specific device.
This is where I got lucky.
PG and his associates lol, had already put together a working device tree for our device.
Chances are ,if your device didn't just hit the stores this week, somebody may have started work on a device tree for it.
Although if you do not have anything to start with, You must first open your device folder in the "repo" you "sync'd" to your PC, look at the supported devices
This will be a tool only for reference.
As I open my folder I notice the following
Code:
1. A "bluetooth" folder, with a config file
2. An "include" folder
3. An "overlay" folder
4. A "prebuilts" folder
5. A "recovery" folder
6. A "releasetools" folder
7. AndroidBoard.mk
8. AndroidProducts.mk
9. Boardconfig.mk
10. CM.mk
11. device_warp2.mk
12. extract-files.sh (this is to pull prop blobs)
13. full_warp2.mk
14. Proprietary-files.txt( a list of the prop files you will pull from your stock phone)
15. recovery.fstab
16. setup-makefiles.sh
17. system.prop
18. USBcontroller.cpp
With this group of files, i was able to get a built, but not bootable copy of Jellybeer 10.1.
Now some devices have less and some have alot more files in the device folder.
If you are really serious about becoming a developer, you have to search out others on Github, forums, etc
This step will take teamwork.
Below are two explanations of the files that go into making a device tree...
The directions below describe how to configure make files for new mobile devices and products.
Code:
Create a company directory in //device/partner.
mkdir device/partner/<company_name>
Create a products directory beneath the company directory you created in step 1.
mkdir device/partner/<company_name>/products/
Create a product-specific make file, called device/partner/<company_name>/products/<first_product_name>.mk, that includes the following code:
$(call inherit-product, target/product/generic.mk)
#
# Overrides
PRODUCT_NAME := <first_product_name>
PRODUCT_DEVICE := <board_name>
In the products directory, create an AndroidProducts.mk file that point to (and is responsible for finding) the individual product make files.
#
# This file should set PRODUCT_MAKEFILES to a list of product makefiles
# to expose to the build system. LOCAL_DIR will already be set to
# the directory containing this file.
#
# This file may not rely on the value of any variable other than
# LOCAL_DIR; do not use any conditionals, and do not look up the
# value of any variable that isn't set in this file or in a file that
# it includes.
#
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/first_product_name.mk \
Create a board-specific directory beneath your company directory that matches the PRODUCT_DEVICE variable <board_name> referenced in the product-specific make file above. This will include a make file that gets accessed by any product using this board.
mkdir device/partner/<company_name>/<board_name>
Create a product_config.mk file in the directory created in the previous step (device/partner/<company_name>/<board_name>). If this directory does not include a product_config.mk file, the build will fail.
# These definitions override the defaults in config/config.make for <board_name>
#
# TARGET_NO_BOOTLOADER := false
# TARGET_HARDWARE_3D := false
#
TARGET_USE_GENERIC_AUDIO := true
If you wish to modify system properties, create a system.prop file in your <board_name> directory(device/partner/<company_name>/<board_name>).
# system.prop for
# This overrides settings in the products/generic/system.prop file
#
# rild.libpath=/system/lib/libreference-ril.so
# rild.libargs=-d /dev/ttyS0
Add a pointer to <second_product_name>.mk within products/AndroidProducts.mk.
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/first_product_name.mk \
$(LOCAL_DIR)/second_product_name.mk
device/partner/<company_name>/<board_name> must include an Android.mk file with at least the following code:
# make file for new hardware from
#
LOCAL_PATH := $(call my-dir)
#
# this is here to use the pre-built kernel
ifeq ($(TARGET_PREBUILT_KERNEL),)
TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/kernel
endif
#
file := $(INSTALLED_KERNEL_TARGET)
ALL_PREBUILT += $(file)
$(file): $(TARGET_PREBUILT_KERNEL) | $(ACP)
$(transform-prebuilt-to-target)
#
# no boot loader, so we don't need any of that stuff..
#
LOCAL_PATH := partner/<company_name>/<board_name>
#
include $(CLEAR_VARS)
#
# include more board specific stuff here? Such as Audio parameters.
#
To create a second product for the same board, create a second product-specific make file called device/partner/company_name/products/<second_product_name>.mk that includes:
$(call inherit-product, partner/google/products/generic.mk)
#
# Overrides
PRODUCT_NAME := <second_product_name>
PRODUCT_DEVICE := <board_name>
By now, you should have two new products, called <first_product_name> and <second_product_name> associated with <company_name>. To verify that a product is properly configured (<first_product_name>, for example), execute the following:
cd device
. ./envsetup.sh
partner_setup <first_product_name>
make PRODUCT-<first_product_name>-user
You should find new build binaries located in device/out/target/product/<board_name>.
New Product File Tree
The file tree below illustrates what your own system should look like after completing the steps above.
<company_name>
<board_name>
Android.mk
product_config.mk
system.prop
products
AndroidProducts.mk
<first_product_name>.mk
<second_product_name>.mk
Part 2
Right... So you want to build your own device tree, read on.
Disclaimer: this is by no means complete, and there will be omissions as have explained all this top of my head and copied pasted certain bits that I have here on my own device tree.
The device tree, for example, /device/lg/gt540would consist of the following make files:
Code:
Android.mk - this will tell the build system to include and to build sources specifically for your device. See below, for an example. This is dependant on the device and hardware, you could have libsensors, liblights, libcamera subdirectories under the example device tree, i.e. /device/lg/gt540/libsensors, /device/lg/gt540/liblights, /device/lg/gt540/libcamera etc.
AndroidBoard.mk - this is for the kernel, the build system uses that to drop the kernel image in place (more about this in a few minutes)
AndroidProducts.mk - specifies the appropriate device's make file, to use for building. i.e. /device/lg/gt540/device_gt540.mk, this is specific also.
device_xxxxx.mk - specifies the properties and extras to copy over into the final output, in this case, it could be for example, device_gt540.mk
BoardConfig.mk - This is the meat of it all, this is where compiler conditional flags are set, partition layouts, boot addresses, ramdisk size, and so on.
Lets peek into each of those to give a glance as to where it all fits in.
Code:
Android.mk:
ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),xxxxx)
include $(call all-named-subdir-makefiles, recovery libsensors liblights libcamera ....)
endif
This is how the build will use that to build recovery, sensors, lights and camera (of course there will be more), its saying 'Yo Builder, go into each of the directories specified, and build the respective sources plskthxbai'
AndroidBoard.mk:
LOCAL_PATH := device/lg/gt540/
#
# Boot files
#
TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/kernel
file := $(INSTALLED_KERNEL_TARGET)
ALL_PREBUILT += $(file)
$(file): $(TARGET_PREBUILT_KERNEL) | $(ACP)
$(transform-prebuilt-to-target)
Now this, is telling the build system, to be able to drop this kernel into the out/target/product/lg/gt540 (notice the correlation with the device tree directory?)
AndroidProducts.mk:
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/device_gt540.mk
Its telling the build as in 'Yo Builder, read that device make file please and process it upon completion of build.'
*device_xxxxx.mk: (for this example, device_gt540.mk) *
PRODUCT_NAME := lg_gt540
PRODUCT_DEVICE := gt540
PRODUCT_MODEL := LG GT 540
PRODUCT_COPY_FILES += \
... specific ...
PRODUCT_PROPERTY_OVERRIDES := \
ro.com.android.dateformat=dd-MM-yyyy \
... more stuff ...
This is where all the specifics for the device such as drivers, proprietary libraries, supporting scripts specifically for the device, gets copied over to out/target/product/lg/gt540/system/ in this case. Notice how the overrides for the properties, these end up in the build.prop found in the root of the /system of the Android ROM.
BoardConfig.mk:
LOCAL_PATH:= $(call my-dir)
TARGET_NO_BOOTLOADER := true
TARGET_PREBUILT_KERNEL := device/lg/gt540/kernel
TARGET_PREBUILT_RECOVERY_KERNEL := device/lg/gt540/recovery_kernel
# This will vary from device!
TARGET_BOARD_PLATFORM := msm7k
TARGET_ARCH_VARIANT := armv6-vfp
TARGET_CPU_ABI := armeabi
TARGET_CPU_ABI := armeabi-v6l
TARGET_CPU_ABI2 := armeabi
# OpenGL drivers config file path
BOARD_EGL_CFG := device/lg/gt540/egl.cfg
# Dependant, not to be taken literally!
BOARD_GLOBAL_CFLAGS += -DHAVE_FM_RADIO
# Dependant, not to be taken literally!
BOARD_KERNEL_BASE := 0x02600000
# this will be device specific, and by doing cat /proc/mtd will give you the correct sizes
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x00480000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x00480000
BOARD_SYSTEMIMAGE_PARTITION_SIZE := 0x0cf80000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0x0d020000
BOARD_FLASH_BLOCK_SIZE := 131072
That is an excerpt, notice how we specify kernel's base address, this is how the boot.img gets generated after compilation is done and yet again, gets dropped into out/target/product/lg/gt540/boot.img. Also, more importantly, we're telling the build system to use the target platform for cross-compiling the sources (*TARGET_BOARD_PLATFORM*/*TARGET_CPU_ABI*) There will be more information in there such as conditional flags to pass to the compiler, for an example. we specified the directive HAVE_FM_RADIO to tell it, when it comes to handling the source for the FM radio system, to conditionally compile parts of the source. Again, this is hardware specific and mileage will vary, also this applies to the address for boot. In a nutshell, this is saying 'Yo Builder, read the damn variables and remember them and apply them when cross-compiling those source files!'
Now that the internals of each of those Android build make-files are shown.
Now, onto the vendor/ part of it, in AOSP, simply, once again, correlation and corresponds with the device/ tree, as in continuing with this example, vendor/lg/gt540/ which gets picked up by the lunch. There's more make files in there but the general consensus is there's a directory called proprietary which contains the proprietary libs (due to close-source etc) that gets copied over. The copying over of the libraries gets specified in the file device-vendor-blobs.mk, in this case, gt540-vendor-blobs.mk.
When the magic happens by doing the following:
. build/envsetup.sh
This is reading in the entire entries found in each of the device/ subdirectories and "remembers them", so the build system knows what type of target is used etc.
When the . lunch gets invoked, a menu appears prompting to pick the device that is required to build. Now the last and final step to do the build...
make -j5 > buildlog.log 2>&1
I run multitail on another terminal and monitor the buildlog.log file to check and make sure its building.
This last step will depend on how many cores you have (n cores + 1 as a rule) and it takes a while to build, GB build takes 40mins on my laptop running Arch Linux 64bit, ICS build takes about 2hrs 30 mins. So mileage will vary on what type of horsepower your machine has.
When the build is done, a little bell goes off and at the bottom of the said log file, I see this:
Combining NOTICE files: out/target/product/xxxxx/obj/NOTICE.html
Target system fs image: out/target/product/xxxxx/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/xxxxx/system.img
out/target/product/xxxx/system.img+ total size is 108776448
As matter of interest JBQ (Jean Baptiste Queru - the 'boss' for managing/distributing the source from Google), his build step is this...
Code:
Extra code to use the ICS Repository
Now enter the following to initialize the repository:
cd ~/android/system/
repo init -u git://github.com/CyanogenMod/android.git -b ics
Extra codes to use the JB Repository
Now enter the following to initialize the repository:
cd ~/android/system/
repo init -u git://github.com/CyanogenMod/android.git -b jellybean
This is not everything, because a device tree for every device is different, To start from scratch will take alot of time.
You will add, then remove, and then add again.
ASSEMBLE A TEAM...THIS IS A ADVANCED STEP
The president has spoken
STEP 9​
Building a kernel.
You're in deep waters once again.
To explain the kernel, I would say he is like the president of your phone.
He tells everyone what to do, and when to do it, and how to do it.
Kernel
The kernel is the core of an operating system. It functions on a low level (kernelspace) interacting between the hardware of the machine and the programs which use the hardware to run. To make efficient use of the CPU, the kernel uses a scheduler to arbitrate which tasks take priority at any given moment, creating the illusion of many tasks being executed simultaneously.
(From an article about Arch Linux)
"Do you like LAG?"
Well if you answered "no"
Then you better build a good kernel.
I entered "building a kernel for android" and i got a long list of tutorials on this.
So, if my section on kernels isn't enough, Google has more.
"git clone" is the code prefix if you luck out and find a kernel source on github.
first you would
$ cd android
$ cd system
$ cd kernel
$ mkdir <name of company>
$ cd <name of company>
$ git clone bla bla bla bla bla lol
But for the purpose of this step, you did not find a kernel source...
So, if you did step 8, or you found a device repo on Github, then you know alot more about your device now, specifically the hardware that pushes your device..
This table lists the name and locations of SOME kernel sources and binaries
Device / Binary location / Source location / Build configuration
manta / device/samsung/manta/kernel / kernel/exynos / manta_defconfig
mako / device/lge/mako-kernel/kernel / kernel/msm / mako_defconfig
grouper / device/asus/grouper/kernel / kernel/tegra / tegra3_android_defconfig
tilapia / device/asus/grouper/kernel / kernel/tegra / tegra3_android_defconfig
maguro / device/samsung/tuna/kernel / kernel/omap / tuna_defconfig
toro / device/samsung/tuna/kernel / kernel/omap / tuna_defconfig
panda / device/ti/panda/kernel / kernel/omap / panda_defconfig
stingray /device/moto/wingray/kernel / kernel/tegra / stingray_defconfig
wingray / device/moto/wingray/kernel / kernel/tegra / stingray_defconfig
crespo /device/samsung/crespo/kernel / kernel/samsung / herring_defconfig
crespo4g / device/samsung/crespo/kernel / kernel/samsung / herring_defconfig
This is for reference, these devices are supported..
You will want to look at the git log for the kernel binary in the device project that you are interested in.
Device projects are of the form device/<vendor>/<name>. This example is for the Panda...
$ git clone https://android.googlesource.com/device/ti/panda
$ cd panda
$ git log --max-count=1 kernel
The commit message for the kernel binary contains a partial git log of the kernel sources that were used to build the binary in question. The first entry in the log is the most recent, i.e. the one used to build that kernel. You will need it at a later step.
Downloading sources
Depending on which kernel you want,
Device projects are of the form device/<vendor>/<name>.
The goldfish project contains the kernel sources for the emulated platforms.
The msm project has the sources for ADP1, ADP2, Nexus One, Nexus 4, and can be used as a starting point for work on Qualcomm MSM chipsets.
The omap project is used for PandaBoard and Galaxy Nexus, and can be used as a starting point for work on TI OMAP chipsets.
The samsung project is used for Nexus S, and can be used as a starting point for work on Samsung Hummingbird chipsets.
The tegra project is for Xoom and Nexus 7, and can be used as a starting point for work on NVIDIA Tegra chipsets.
The exynos project has the kernel sources for Nexus 10, and can be used as a starting point for work on Samsung Exynos chipsets.
To git these
$ git clone https://android.googlesource.com/kernel/common.git
$ git clone https://android.googlesource.com/kernel/exynos.git
$ git clone https://android.googlesource.com/kernel/goldfish.git
$ git clone https://android.googlesource.com/kernel/msm.git
$ git clone https://android.googlesource.com/kernel/omap.git
$ git clone https://android.googlesource.com/kernel/samsung.git
$ git clone https://android.googlesource.com/kernel/tegra.git
Here are some other links for sources
http://www.htcdev.com/
http://opensource.samsung.com/
http://developer.sonymobile.com/wpor...ads/opensource
http://www.lg.com/global/support/ope...opensource.jsp
You may have to do some leg work and find your source.
As an example, we would build the kernel using the following commands:
Part A. Pre-build Steps
A. Open terminal and change to the root of your kernel directory
B. Type "export ARCH=arm"
C. Type "export CROSS_COMPILE=~/android/system/kernel/toolchains/arm-eabi-linaro-4.6.2/bin/arm-eabi-" (your toolchain may be different than this, it is an example)
Part B. The First Build
A. Type "make <your_config_name>_defconfig"
B. Type "make menuconfig" and make the required changes to use any modules you added or similar changes.
C. Type "make -j<maximum number of jobs>"
Part C. Re-Builds
A. Type "make clean"
B. Type "make oldconfig"
C. Type "make -j<maximum number of jobs>"
Part D. Building Modules
You have two options:
A. Type "make modules"
B. Type "make path/to/your/module.ko"
The above steps explained:
Part A.(These steps are required every time you close your terminal and re-open it to build again.)
A. Ok shouldn’t need to explain this.
B. This command sets your target architecture.
C. Defines the path to the toolchain we are going to use to compile our kernel. You can change this to point towards whatever toolchain you have downloaded or feel like using, the way it is currently configured it will use the Linaro toolchain that we downloaded above.
Part B.(These only need to be run the first time you build a kernel.)
A. Load's your configuration file from earlier.
B. Open up a menu to configure your kernel. It will use the config file you loaded in the previous step as a base.
C. Viola start the build. I typically allow 1 job per core, so on my quad core machine I put "make -j4". Just raising that number will not make your build faster, your processor needs to be able to support the number of jobs you are assigning it.
Part C. (Use the command's when you are building any-time outside of the first)
A. This command gets rid of any old/outdated binaries or modules you compiled before, and let's start fresh. I like to run it every I build unless my changes are really small and localized.
B. A very awesome command, it parses through what has changed and only prompts you about new options.
C. See the explanation for the above "Part C.".
Part D.(Use these for just building kernel modules.)
A. This will re-build all modules.
B. Will rebuild just the module you need. Very useful when you need to rebuild a WiFi module.
Outcome A. Build Succeds
W00t!! You have a kernel built by your self from source. There are a couple things you need in-order to use this kernel on your device any ".ko" modules and the zImage binary. If you pay attention to the output of your compiler then you will see the location of those objects. However the following commands will make your life a bit easier(Thanks Recognized Developer Hacre):
A. Open a terminal
B. Change to your root kernel directory
C. Type "mkdir ../<your_kernel>_output"
D. Type "cp arch/arm/boot/zImage ../<your_kernel>_output/zImage"
E. Type "find . -name "*.ko" -exec cp {} ../<your_kernel>_output \;"
The above steps explained:
A-C. Self-Explanatory
D. Move our kernel binary into our output folder
E. This handy bit of magic finds all ".ko" modules and also copies them into your output file.
You will also need to assemble a kernel image containing a initramfs for your device, along with the kernel binary and such. That however is beyond the scope of this tutorial. To get started though try searching the following phrases.
Code:
building android kernel image
xda build kernel image
xda unpack boot.img
Outcome B. Build Fails
Oh dear. It failed. Well guess what...this is going to happen..a LOT. Get used to it, and get used to googling and experimenting with different solutions. The following are some tips that will help you with debugging your issues.
Running a "Clean" build
A. Backup your config file(Type "cp .config ../backupConfig")
B. Re-run the build process using just your defconfig from earlier.
Limiting Output(Thanks Hacre.)
A. Another good tip is to run "make -j1" to get the error, as it will limit the amount of text you need to scroll through.
(from a kernel tutorial)(cred =thewadegeek)
The kernel binary is output as `arch/arm/boot/zImage`, and needs to be copied into the Android source tree in order to build the matching boot image.
Quotes from threads
"when building a whole ROM like AOSP,AOKP,PA or CM then they typically bundle the toolchain/kernel with the source, making this totally unneeded."
"You can typically find a manufacturer's configuration file in "arch/arm/configs". I believe the one for my HTC Flyer was called "flyer_hc_defconfig"
A Q&A from a thread
How can I build the latest kernel using all described stuff (aosp source, kernel config, latest kernel)?
Jean-Baptiste Queru
Mar 25
That's not possible without some work. Device-specific kernel are
typically 3 steps away from the upstream kernel: one step adds
android-specific code, one step adds chipset-specific code, one step
adds device-specific code.
THIS IS NOT COMPLETE.. IT IS A ADVANCED STEP ,LIKE STEP 8 it will take patience and time...
iT'S JUST NOT THE SAME
STEP 10​
This is the step for pulling the prop file or prop blobs from a "stock" phone...
This is the script that SuperR made for the Warp2
Code:
#!/bin/sh
VENDOR=zte
DEVICE=warp2
BASE=../../../vendor/$VENDOR/$DEVICE/proprietary
rm -rf $BASE/*
for FILE in `cat proprietary-files.txt | grep -v ^# | grep -v ^$`; do
DIR=`dirname $FILE`
if [ ! -d $BASE/$DIR ]; then
mkdir -p $BASE/$DIR
fi
adb pull /system/$FILE $BASE/$FILE
done
./setup-makefiles.sh
This is one from the LGE Mako
Code:
#!/bin/sh
VENDOR=lge
DEVICE=mako
BASE=../../../vendor/$VENDOR/$DEVICE/proprietary
rm -rf $BASE/*
for FILE in `cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | sed -e 's#^/system/##g'`; do
DIR=`dirname $FILE`
if [ ! -d $BASE/$DIR ]; then
mkdir -p $BASE/$DIR
fi
adb pull /system/$FILE $BASE/$FILE
done
./setup-makefiles.sh
NOTICE: the main thing that changed was the
VENDOR=zte
DEVICE=warp2
Your proprietary-file.txt depends on your phone.
I found that during a build, it actually told me diffrent .so files it needed.
Though if you made it this far, your phone is rooted, and you probably have "root explorer"
So you may want to open that up and orient yourself with what system files are in there.
Also, you can open other prop lists from similar phones and see what files they extracted.
Here is a list that PG and associates used
Code:
## RIL
bin/qmuxd
bin/rild
lib/libnv.so
lib/liboncrpc.so
lib/libreference-ril.so
lib/libril.so
lib/libril-qc-1.so
lib/libril-qc-qmi-1.so
lib/libril-qcril-hook-oem.so
lib/libauth.so
lib/libcm.so
lib/libdiag.so
lib/libdsm.so
lib/libdsutils.so
lib/libdss.so
lib/libgsdi_exp.so
lib/libgstk_exp.so
lib/libidl.so
lib/liboncrpc.so
lib/libpbmlib.so
lib/libpdapi.so
lib/libqmi.so
lib/libqmiservices.so
lib/libqueue.so
lib/libwms.so
lib/libwmsts.so
lib/liboem_rapi.so
lib/libpdsm_atl.so
lib/libqc-opt.so
lib/libqdi.so
lib/libqdp.so
lib/libuim.so
## GPS
lib/libcommondefs.so
lib/librpc.so
## Sensors
lib/hw/sensors.default.so
## EXTRA
bin/netmgrd
bin/port-bridge
bin/thermald
etc/media_profiles.xml
etc/thermald.conf
lib/libdsi_netctrl.so
lib/libnetmgr.so
lib/libv8.so
$$$$###$$# HINT #$$###$$$$
EVERY PHONE IS DIFFERENT!!!!
Let's see if it works
STEP 11​
TIME 2 BUILD
Another time when RAM will help you out.
Whatever steps you actually took to get here all depends on how much work has been put into your phone and how much of it you were able to find..
So if you have the following things done, You can continue to build if not, you better go get them.
1. Linux 64 OS
2. Build environment
3. up to date Repo
4. device repo
5. kernel source
6. proprietary files text/ extract.sh
7. prebuilts
8. ccache
9. Build command
10 Teamwork and Patience
"But Warp, you never explained some of this stuff.."
Yep, that's why there is a step about actually building it...
This next section is pulled from PG's read me
Getting my ZTE Sequent repo
$ cd ~/android/system/device/
$ mkdir zte
$ cd zte
$ git clone https://github.com/playfulgod/androi..._zte_warp2.git warp2
Note it says ZTE, not Sony, not Samsung, ETC
Then cd to the kernel directory:
$ cd ~/android/system/kernel
$ mkdir zte
$ git clone https://github.com/playfulgod/kernel_zte_warp2.git warp2
Then prop files from stock..
$ cd
$ cd ~/android/system/device/zte/warp2
$ ./extract-files.sh
When the environment is setup, we need to grab a copy of Term.apk. This is necessary to build CM10.
$ cd ~/android/system/vendor/cm
$ ./get-prebuilts
O k so I waited to tell you about CCACHE at the end. I guess I did that, because you don't need it untill the end anyway..OR is building just the beginning
You decide...
http://ccache.samba.org/manual.html
http://manpages.ubuntu.com/manpages/intrepid/man1/ccache.1.html
Ccache
There's a wonderful tool for gcc called ccache. You can read about it at their home page.
If you're always compiling the same programs over and over again — such as trying out several kernel patches, or testing your own development — then ccache is perfect. While it may take a few seconds longer to compile a program the first time with ccache, subsequent compiles will be much, much faster.
Now that we know what it is
HOW-TO-INSTALL
http://source.android.com/source/initializing.html
Setting up ccache
You can optionally tell the build to use the ccache compilation tool. Ccache acts as a compiler cache that can be used to speed-up rebuilds. This works very well if you do "make clean" often, or if you frequently switch between different build products.
Put the following in your .bashrc or equivalent.
export USE_CCACHE=1
By default the cache will be stored in ~/.ccache. If your home directory is on NFS or some other non-local filesystem, you will want to specify the directory in your .bashrc as well.
export CCACHE_DIR=<path-to-your-cache-directory>
example: export CCACHE_DIR=$HOME/.ccache
The suggested cache size is 50-100GB. You will need to run the following command once you have downloaded the source code:
prebuilts/misc/linux-x86/ccache/ccache -M 50G
When building Ice Cream Sandwich (4.0.x) or older, ccache is in a different location:
prebuilt/linux-x86/ccache/ccache -M 50G
This setting is stored in the CCACHE_DIR and is persistent. (pulled str8 from the link)
Now, we build (system being your work directory):
$ cd ~/android/system
To build for the ZTE Sequent:
$ . build/envsetup.sh && brunch warp2
All credit to PG for his readme file...Which he updated it recently, this is the old one ,I think...
Beating your head on the desk when you can't figure out why it wont build, boot , ...
STEP 12​
In the true nature of a 12 step program, this process never ends.. You will always run into errors, you will always be looking for fixes, patches, and anything to correct a problem you are having.
So, basically the 12th step is TEAMWORK
I hope if this tutorial didn't suck to bad, you will come on this thread and post your questions, post your answers, post your advice. I just started
AND no, just because I made a Tutorial and finished it, it DOES NOT make me a Developer. That was a joke. You have to earn that $hyt...
But one thing i am, is motivated...
I hope you enjoyed my rendition of "HOW-TO-BUILD-FROM-SOURCE"
Shout outz
SPECIAL THANKS TO:​
XDA​ @bcrichster, @NinjaInPyjamas, @Bizack, @danger_beast, @WildfireDEV @BobDabolina​ HACK3R1, PlayfulGod, Junkie 2100, SuperR, dizzle,​ EarlyMon, cooldudezach, rbheromax, Frank the Tank,​agat , downthemachine, hroark13, DM47021, thewadegeek, guspeed
Android,Cyanogenmod, BeerGang,
ChameleonOS, ibotpeaches, 0xD34D,
BO$$HOGG,,and Madhatter34​
warning: (MTD_MSM_NAND && MTD_DOC2000 && MTD_DOC2001 && MTD_DOC2001PLUS) selects MTD_NAND_IDS which has unmet direct dependencies (MTD && MTD_NAND)
If you ever get this one...heres a fix
http://lists.infradead.org/pipermail/linux-mtd/2012-January/039122.html
Code:
Fix the following build warning:
warning: (MTD_DOC2000 && MTD_DOC2001 && MTD_DOC2001PLUS) selects MTD_NAND_IDS
which has unmet direct dependencies (MTD && MTD_NAND)
Signed-off-by: Fabio Estevam <fabio.estevam at freescale.com>
---
drivers/mtd/devices/Kconfig | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/mtd/devices/Kconfig b/drivers/mtd/devices/Kconfig
index 952e956..3560fca 100644
--- a/drivers/mtd/devices/Kconfig
+++ b/drivers/mtd/devices/Kconfig
@@ -191,6 +191,7 @@ comment "Disk-On-Chip Device Drivers"
config MTD_DOC2000
tristate "M-Systems Disk-On-Chip 2000 and Millennium (DEPRECATED)"
+ depends on MTD_NAND
select MTD_DOCPROBE
select MTD_NAND_IDS
---help---
@@ -213,6 +214,7 @@ config MTD_DOC2000
config MTD_DOC2001
tristate "M-Systems Disk-On-Chip Millennium-only alternative driver (DEPRECATED)"
+ depends on MTD_NAND
select MTD_DOCPROBE
select MTD_NAND_IDS
---help---
@@ -234,6 +236,7 @@ config MTD_DOC2001
config MTD_DOC2001PLUS
tristate "M-Systems Disk-On-Chip Millennium Plus"
+ depends on MTD_NAND
select MTD_DOCPROBE
select MTD_NAND_IDS
---help---
--
1.7.1
Wow. Thanks for the huge tutorial man!
Another piece of info.
"make clobber"
In software engineering, clobbering a file or computer memory is overwriting its contents. In makefiles, a common target clobber means complete cleanup of all unnecessary files and directories produced by previous invocations of the make command.
"make clean"
deletes any files generated by previous attempts, leaving you with clean source code
These are codes to use when
1. encountering fatal errors
2. when you "repo sync" new data
3. when you make changes to make files etc...
THIS IS A ROOTING TOOL FROM JUNKIE2100,​IT WORKS FOR THE WARP SEQUENT N861​
www.oldphoneshyte.gov
I updated the picture, I updated the SuperUser.apk and I updated the SU binary...​
Warped420 said:
THIS IS A ROOTING TOOL FROM JUNKIE2100,​IT WORKS FOR THE WARP SEQUENT N861​[/SIZE
I updated the picture, I updated the SuperUser.apk and I updated the SU binary...
Click to expand...
Click to collapse
Updated for what/why??
Sent from my confused Warp/Nexus using Tapatalk 2
This is MY JellyBeer BeerGang 10.1 $ROM$​
I started this project over two months ago.
This is the new v4.30
This is the first build ,nothing is fixed
It doesn't have sound, sd card etc​Without PG and associates I wouldn't have gotten this built, see SPECIAL THANKS section​I have two more $ROM$ coming soon...
www.idon'thavethisphoneanymore.org​
WARP SEQUENT N861​

Categories

Resources