[Guide][7/5/13]Learn Linux Terminal/Setup A Build Environment/HTC Kernel Building

HTC_M7

Senior Member
Jun 24, 2013
301
287
0
To start I will be adding a lot to this over time so dont be upset if I dont have everything.

To open a terminal without finding it in your programs all you need to do is ctrl+alt+t

Heavily used Commands

cd: this command is used to navigate through your directory's. For example if you have a folder named apps on desktop you would type... cd Desktop...then cd apps.

mkdir: this means make directory or folder. For example cd to your directory then do mkdir whatever. Then you can cd right into that directory ever.

pwd: print working directory. This shows you where you are on the filesystem. This helps if your deep in a directory or folders.

ls: this means list. This tells you all the files in your present working directory.

man: this means manual. This prints like a help page in the terminal to guide you on whatever you need. This can be used for many things.

cp: means copy a file or directory

rm and rmdir: remove a file or like rmdir remove a directory.

mv: move a file or directory

The next command is to issue a command. There are a couple of popular ways of doing so.

First

"./": this is to issue or run a command or file that is in your current directory.

Second

"../": this runs the file that is directly above your current directory.

cat: prints a list of provided text files to the screen.

grep or global regular expression print: searches for patterns or a pattern in a list of files. This is great for small editing if thats what your into and so is.....

diff: compares two text files and displays the differences found between the files on the screen.

history: this is very useful. This shows you a list of your recent commands if you forgot the exact command. To select a command on the list use "!". For example if the label for the command is 00 then type "!00". However most linus OS's allow you to use the up arrow and enter key instead.

Also if you guys dont want a full help list using the "man" command you can use this command: --help

Popular Terminal Commands for Android:

adb: also called android debug bridge is used to issue commands to your phone and debug.

Most people use the following:

adb devices: shows what devices are connected to the computer
adb push and pull: can transfer file from computer to phone and vice versa.
if you want to push an apk to your system make sure that apk is in your adb folder and type: "adb push target.apk system/apps"

adb reboot

adb reboot bootloader

adb logcat: if you are either porting, making roms, or just debugging for a dev you need to know how to logcat. Also if you want to just take the log and make it into a txt file to share just issue the following; "adb logcat -d> logcat.txt"
The logcat will go to your adb folder and save as logcat.txt.

fastboot: is a tool used to update the flash filesystem

I use fastboot for a few things including flashing splashes and flashing recoveries. For example:

Take twrp. To flash to htc one you do...
"fastboot flash recovery twrp.img" presuming you are in your fastboot directory in terminal and the recovery.img is in that folder.

Now as you may know htc uses fastboot to unlock and lock the bootloader using the following commands:
"fastboot oem unlock"
"fastboot oem lock"
Of course you should know this by now you need to be in bootloader under fastboot usb mode.

Now to be able to use fastboot and adb u need sdk and java. Lets start.

"sudo apt-get install openjdk-6-jre openjdk-6-jdk icedtea6-plugin"

This will get u java jdk. Sudo means root and apt-get install means terminal is pulling the file from servers and then installing it.

Next you want sdk. So instead of going all around and downloading it just do this.

" wget http://dl.google.com/android/android-sdk_r20-linux.tgz"

Wget means you are "getting the package".And then you want to extract the file.

"tar -xvzf android-sdk_r20-linux.tgz"

Seeing how the file is a tar "tar -xvzf" extracts that tar. Then cd to the sdk folder and you are good to go.

Speaking of compressing and uncompressing files......

tar -zxvf filename.tar.gz
Untar a tarred and compressed tarball (*.tar.gz or *.tgz).

tar -xvf filename.tar
Untar a tarred but uncompressed tarball (*.tar).

gunzip filename.gz
Decompress a zipped file (*.gz" or *.z).

bunzip2 filename.bz2
Decompress a file (*.bz2) zipped with bzip2 compression.

unzip filename.zip
Decompress a file (*.zip).

Next. Processes.
You know hiw windows has task manager with ctrl+alt+delete. Well here is that for terminal.

ps
(=print status) Display the list of currently running processes with their process IDs (PID) numbers.

kill PID
Force a process shutdown. First determine the PID. Use the command "ps".

bg PID
Send the process to the background.The same can be accomplished with z.

any_command&
Run any command in the background the symbol "&" means run the proceeding command in the background.

killall program_name
Kill program or multiple programs by name. This is useful

lpq
Shows your printing queue.

lprm job_number
Remove a printing job "job_number" from the queue. Alot like windows printing task manager.

lpc
Check and control the printer(s). Type "?" to see the list of available commands.

renice -1 PID
(as root) Change the priority of a running process to -1. Make sure you are Root.
*
Ill add more later. My fingers are tired.
 
Last edited:

HTC_M7

Senior Member
Jun 24, 2013
301
287
0
Here are some useful admin commands

printtool
Configuration tool for your printer(s).

linuxconfig
(as root, either in text or graphical mode). You can access and change hundreds of setting from it. Be careful. :D

adduser user_name
Create a new account (you must be root).

userdel user_name
Remove an account (you must be a root).

passwd
Change the password on your current account. If you are root, you can change the password for any user using: "passwd user_name"

chmod perm filename
Change the file access permission for the files you own. You can make a file accessible in three modes: read (r), write (w), or execute (x) to three classes of users: owner (u), group (g), or others (o).


ls -l filename
Checks the files current permissions.
If the file is accessible to all users in all modes it will show:
rwxrwxrwx
The first triplet shows the file permission for the owner of the file, the second for that group, the third for others. A no permission is shown as "-".

su
You will be asked for your password. Type "exit" to return you to your previous login. Don't work on your machine as root. Use it only when you need it.

fdisk
(as root) Linux hard drive partitioning utility. The program gparted I think is better. To install gparted just like many other programs us the command "sudo apt-get install gparted".

fsck -t ext2 /dev/hda2
Check and repair a filesystem.

Sent from my HTCONE using xda premium
 
Last edited:
  • Like
Reactions: ssojyeti2

HTC_M7

Senior Member
Jun 24, 2013
301
287
0
Build Environment

Instructions For Setting up a Build Environment for Linux

Make sure you are 64-bit
Have a big hard drive
A good amount of ram

If you dont have java already. Get it.
sudo apt-get install openjdk-6-jdk

You will also need python
sudo apt-get install python

And git

sudo apt-get install git-core

Android SDK:
I showed you guys how to get it in the first post.

Now open your home folder and press Ctrl+H to show hidden files, and open up a file called .bashrc.

Add these lines to the bottom of .bashrc:

# Android tools
export PATH=${PATH}:~/SDK/tools
export PATH=${PATH}:~/SDK/platform-tools
export PATH=${PATH}:~/bin

Now you should also find .profile file in the same place you found .bashrc file. Add this to that file:

PATH="$HOME/SDK/tools:$HOME/SDK/platform-tools:$PATH"

After that you need to install these packages:

sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc

On Ubuntu 12.04:

sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev x11proto-core-dev \
libx11-dev libreadline6-dev libgl1-mesa-glx \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev

Also this:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Now Configure your USB.

Type :
gksudo gedit /etc/udev/rules.d/51-android.rules

A blank text will open and now add this code and save:

#Acer
SUBSYSTEM=="usb", ATTR{idVendor}=="0502", MODE="0666"

#ASUS
SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", MODE="0666"

#Dell
SUBSYSTEM=="usb", ATTR{idVendor}=="413c", MODE="0666"

#Foxconn
SUBSYSTEM=="usb", ATTR{idVendor}=="0489", MODE="0666"

#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"

Once you have saved the file type this:

sudo chmod a+r /etc/udev/rules.d/51-android.rules

Now install your repository:

Type the following:

mkdir ~/bin

PATH=~/bin:$PATH

curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

chmod a+x ~/bin/repo

Now all you have to do is initialize your repository and then make a working folder and sync:

mkdir WORKING_FOLDER

cd WORKING_FOLDER

So lets just say you want to sync and build cm10.1 you need the repo so once you cd into the directory type this:

repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1

While that runs in the terminal it is going to ask you to put in your name and email address.

Once all thats done just type:

repo sync

And your good to go. Thats where I stop for now. Any questions just ask.

Sent from my HTCONE using xda premium
 
Last edited:
  • Like
Reactions: ssojyeti2

HTC_M7

Senior Member
Jun 24, 2013
301
287
0
How to build a sense kernel from source

Judging that you are reading this and going to try and build a kernel make sure you have looked at the previous posts above as they may be needed to complete this task.

This is the readme from htc dev's website. But why do all this work. Lets use Linux and bash scripts to our advantage.

defconfig file: m7wls_defconfig (arm-eabi-4.6)

Download:
=========
If you are not already using an AOSP toolchain (included in an AOSP build tree), download the corresponding official android toolchain for the arm-eabi specified above for this device:

git clone https://android.googlesource.com/platform/prebuilt for 4.4.3
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6 for 4.6
(use darwin-x86 in place of linux-x86 for mac)

Build the kernel:
=================
set the following environment variables:

export TOP= [where you installed the toolchain or top of android AOSP code base]
export PATH=$TOP/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH (use corresponding arm-eabi bin path)
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-

make [the defconfig file for this device above]
make clean (for subsequent builds)
make -j4 (in this example 4 is the number of processors of your build machine)

Output Binary Files:
====================
After the build process is finished, there should be a file named "zImage" found in arch/arm/boot/
If you are building a rom with this kernel ZImage, copy it into your build's output folder and rename it to "kernel".

You will also need the following kernel modules. These will eventually be installed into /system/lib/modules on the device.

kernel modules:
./driver/*.ko
The only thing I will ask you to get are the following.
-Download the source from htcdev.
-Get your toolchain and put it in your desired folder. Do that with this command.
"git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6"
-for me I put the toolchain in my directory like this. It is different for each toolchain and device. It doesn't matter. /android/kernel/**toolchain**. That's where the extracted toolchain is.
-Next step open a file and add the following text. Make sure the file is executable so you can run it. Add this....

echo "~m7wls STOCK KERNEL COMPILER~"
cd Kernel-m7wls
export ARCH=arm CROSS_COMPILE=/android/kernel/toolchain/arm-eabi-4.6/bin/arm-eabi-4.6-
echo "Cleaning up source"
make clean && make mrproper
date +%Y%m%d%H%M > CURRENT_VERSION
echo "Making config"
make m7wls_defconfig
echo "Adding Current Version to Kernel"
cp CURRENT_VERSION .version
echo "Building Kernel"
make -j4
echo "Kernel ready"
cp -f arch/arm/boot/zImage /android/kernel/htcone/STOCK-m7wls/zImage

echo "Copying modules"
rm -f /android/kernel/htcone/STOCK-m7wls/boot.img-ramdisk/lib/modules/*

find . -name "*.ko" -exec cp {} /android/kernel/htcone/STOCK-m7wls/boot.img-ramdisk/lib/modules/ \;

cd /android/kernel/htcone/STOCK-m7wls/boot.img-ramdisk/lib/modules/

for i in $(find . | grep .ko | grep './')
do
echo $i
/android/kernel/toolchain/arm-eabi-4.6/bin/arm-eabi-4.6-strip --strip-unneeded $i
done

echo "Stripped Modules"
echo "All done,Press Enter to Quit"
read ANS
-This is a quick script that does all the work for me. No need to add paths, etc. As long as your folders and filed match the paths of the script all will be ok. Now this script will have to be edited to suite your computer and the destinations of your kernel folders.

-Now once the script is fully correct and everything is setup just cd to the directory your script is in and type the following assuming your file name is m7wls type:

./m7wls

Once the script has fully run. It should take a while in the folders I made you should see zImage and kernel modules. From there you will need to know how to pack the kernel.

Notice if you downloaded sprints htc one kernel source the source is named m7wls-jb-crc-3.4.10-eb45596. I changed this to just m7wls to make it easier for the script.

Finally, remember you will have to make directories to suit the script for example this line "rm -f /android/kernel/htcone/STOCK-m7wls/boot.img-ramdisk/lib/modules/*" this is where the modules go "*" but I had to make these folders first boot.img-ramdisk/lib/modules/.

If you followed my instructions and did your own fooling around you should have a sense kernel built from source. This is not for beginners. If you have any questions just ask. Message me if you really need some more help.

Happy Building!
 
Last edited:
  • Like
Reactions: ssojyeti2

HTC_M7

Senior Member
Jun 24, 2013
301
287
0
Cool thanks. Gotta add alot of stuff tho. Need to fix computer first. Doin this on phone is a pain.

Sent from my HTCONE using xda premium
 

HTC_M7

Senior Member
Jun 24, 2013
301
287
0
What else would you guys like to know? Let me know. How to build a kernel from htc source? How to use apktool? How to read a logcat?

Sent from my HTCONE using xda premium
 

Sloth

Recognized Contributor / Retired Forum Moderator
Apr 23, 2012
10,699
11,295
0
Xda-Dev,NV
What else would you guys like to know? Let me know. How to build a kernel from htc source? How to use apktool? How to read a logcat?

Sent from my HTCONE using xda premium
Yes
Yes and
Yes :p

Sent from my HTCONE using xda app-developers app
 
  • Like
Reactions: HTC_M7

HTC_M7

Senior Member
Jun 24, 2013
301
287
0
Im really trying to get this moved to general software section but no mod has contacted me back yet.

Sent from my HTCONE using xda premium
 
Last edited: