Related
Hey all,
I wish to try some modifications I made to the CM7 kernel and I need help building the kernel.
I followed this guide: http://wiki.cyanogenmod.com/wiki/Building_Kernel_from_source
I had to use the code sourcery cross compiler since kernel.org is down.
I have 3 questions:
1. When I build the kernel, the wifi drivers fail to build with an array out of bound exception. I didn't change that code, do I need to do something special to build the wifi drivers? I managed to built the kernel by disabling wifi in the config file.
2. Where can I get CM .config file for crespo kernel? I tried getting it from the latest nightly but /proc/config.gz wasn't there!?!
3. How can I created an cwm flashable zip? I downloaded Anykernel from koush but when trying to flash I get an error saying mount need 4 args. Which branch of anykernel works with Nexus S?
Thx a lot for your help,
Steve
Sent from my Nexus S using Tapatalk
It might be worth sending a PM to mathkid95
Sent from the future to put right what once went wrong.
How to compile a kernel
First, Download the following cross compiler and extract it into your working directory http://minus.com/l0zydfa4ncuQP
Then, cd to your kernel's directory in terminal and then type the following in terminal to compile:
Code:
export PATH=$PATH:/home/your-username/your-working-directory/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/
make ARCH=arm clean
make ARCH=arm herring_defconfig
make -j4 ARCH=arm CROSS_COMPILE=arm-eabi-
The herring_defconfig is the default config file for the nexus s and it in the kernel repo. Also if you are using CM kernel source, the herring_defconfig has been modified.
As for the cwr zip, download one of my any rom kernels extract it. Put the zimage and bcm.ko module in the appropriate folder and zip it.
Sent from my Nexus S
Redd has it haha
Sent from my HTC Sensation 4G using XDA App
This is great. I'll try it out tomorrow. Now that I have all those infos I'm sure everything will go smoothly.
Thanks again!
Sent from my Nexus S using Tapatalk
That worked beautifully!
This is the result: http://forum.xda-developers.com/showthread.php?t=1276278
Hi my name is ashy and I need some help regarding building a kernel from source for an ongoing project called H1droid here: h**p://samsungi8320.freeforums.org/portal.php
Basically I am just getting into this kind of stuff and at best Iam a hacker and a modder not a developer, so Linux is pretty new to me. However I learn fast and have a good grasp on what's what.
I am trying to build the Kernel for this project from this source h**p://samsungi8320.freeforums.org/onenand-mtd-multiboot-recovery-cm7-2rc1-t765.html
These sources were created originally by R3D4 who doesn't come to our fourms any more, so I am here to ask for help.
In a nut shell I am trying to build the kernel from R3D4's sources. I have Ubuntu, the tool chains, cloned the source and have managed to build the kernel. The problem is that the kernel requires to be in uImage format with built in ramdisk, however for the life of me I can't figure out how to create the valid boot.img..
I have pulled the config file from the device to use as the default .config, and haven't changed anything in menuconfig when compiling.
I have tried flashing the resulting image to the device, but it doesn't boot at all. It seems that there is no ramdisk to boot a rootfs.
I notice in .config it expects an initramfs to be in a specified directory, however my problem is I have no idea how to create the initramfs to build into the kernel when compiling.
This is probably something easy, but I have searched and searched and can't figure it out, so I am asking here for someone who has the knowledge if they can guide me in the right direction as to how to build the initramfs into the kernel and then compile it as a boot.img to flash via recovery.
I appreciate any and all help.
Thanks, ashy
Please help!
Update: I have managed to compile the kernel with built in initramfs, however the phone still doesn't boot.
Can anybody help here I'm stumped. Iam using Ubuntu 11.10 in VMware and these are the steps I have taken:
1. Clone sources as in first post
2. copy initramfs files into directory specified in config file: CONFIG_INITRAMFS_SOURCE="../out/target/product/nowplus/root"
2. Open terminal in Kernel directory
3. use command: make ARCH=arm nowplus_defconfig (this is the config file from the phone)
4. start the build of the kernel: make ARCH=arm CROSS_COMPILE=/home/user/cm7/arm-2012.03/bin/arm-none-eabi- uImage
During the compile there are warnings regarding unused variables or something, but believe these are normal. However at the end of the build modpost reports: WARNING: modpost: Found 2 section mismatch(es).
Is this significant?
Could really do with some help here, I am new at this stuff and getting really frustrated as I've been at it for 2 weeks now. I have searched and searched the whole internet for an answer.
ashyx said:
Update: I have managed to compile the kernel with built in initramfs, however the phone still doesn't boot.
Can anybody help here I'm stumped. Iam using Ubuntu 11.10 in VMware and these are the steps I have taken:
1. Clone sources as in first post
2. copy initramfs files into directory specified in config file: CONFIG_INITRAMFS_SOURCE="../out/target/product/nowplus/root"
2. Open terminal in Kernel directory
3. use command: make ARCH=arm nowplus_defconfig (this is the config file from the phone)
4. start the build of the kernel: make ARCH=arm CROSS_COMPILE=/home/user/cm7/arm-2012.03/bin/arm-none-eabi- uImage
During the compile there are warnings regarding unused variables or something, but believe these are normal. However at the end of the build modpost reports: WARNING: modpost: Found 2 section mismatch(es).
Is this significant?
Could really do with some help here, I am new at this stuff and getting really frustrated as I've been at it for 2 weeks now. I have searched and searched the whole internet for an answer.
Click to expand...
Click to collapse
Ok have managed to make a little progress, it seems the rootfs is loading as it boots up to a screen with blue A N D R O I D text and then changes to a flashing cursor in the top left of the screen. I guess this means the kernel isn't booting.
Still looking for pointers out there on this, can nobody give me a hint or a way to debug this problem?
ashyx said:
Ok have managed to make a little progress, it seems the rootfs is loading as it boots up to a screen with blue A N D R O I D text and then changes to a flashing cursor in the top left of the screen. I guess this means the kernel isn't booting.
Still looking for pointers out there on this, can nobody give me a hint or a way to debug this problem?
Click to expand...
Click to collapse
Hey, like you i'm an user which enjoy to experiment stuff with linux, so, i want just thank you to share your experience, it helped me
This thread aims to be a comprehensive guide to building and packaging kernels for US Variant Samsung Galaxy SIIIs
In my opinion, a kernel is a great way to get into building things for your device and its pretty easy to do too.
Intro
What is a kernel?
http://en.wikipedia.org/wiki/Kernel_(computing)
This guide is for US SGSIII's (d2att,d2cri,d2mtr,d2spr,d2tmo,d2usc,d2vzw,others?)
It may be possible to adapt this to other devices, but I am not responsible for anything that happens should you try to do this.
This guide assumes you have a general knowledge of the Linux operating system. If you've never used it, you might consider playing around
with it for awhile before attempting this guide.
Click to expand...
Click to collapse
Prerequisites
On all devices you must be rooted, on Verizon SGS3 (d2vzw) you must also have the unlocked (VRALE6) bootloader installed.
This is not the thread for figuring out how to do this. You can use the forum's search function to figure out how to do this on your device.
You'll need a computer or a virtual machine running ubuntu. You may be able to figure out how to get this working on other distributions,
but since ubuntu is generally the most accepted distribution to use for building android things, I'll stick to using that here.
At the time of this writing, I'm using ubuntu 12.10, 64-bit.
You'll need to install some packages on your ubuntu machine:
Code:
sudo apt-get install build-essential git zip unzip
On 64-bit you'll also need some multilib and 32-bit compatibility packages:
Code:
sudo apt-get install gcc-multilib g++-multilib lib32z1-dev
Click to expand...
Click to collapse
Setting up the Build Environment
Next, you'll need a toolchain which is used to actually build the kernel. You may download one of these:
GCC 4.4.3: Download || Mirror
GCC 4.6: Download || Mirror
GCC 4.7: Download || Mirror
If you aren't sure, go for 4.4.3 or 4.6.
4.7 requires some code changes to work. The original kernel developer may or may not have made these changes.
Here is what I needed to do in order for 4.7 to build, boot and have wifi work:
https://github.com/invisiblek/linux-msm-d2/commit/f8d7199d37cfbfa1bcb6b4bcae3fc15ae71fbdea
https://github.com/invisiblek/linux-msm-d2/commit/ea58076501e5874db7b934c215c4dae81ddfd0a6
The toolchains are also available in the android NDK.
*** There are many toolchains out there, some of you may know of the Linaro toolchain which is aimed to optimize your binary even further ***
*** If you choose to use a different toolchain, that is fine. Keep in mind that you may run into issues depending on the toolchain you use ***
You can check what your currently running kernel was built with by issuing these commands:
Code:
adb root
adb shell cat /proc/version
It should return something like:
Linux version 3.4.0-cyanogenmod-gc4f332c-00230-g93fb4aa-dirty ([email protected]) (gcc version 4.7 (GCC) ) #134 SMP PREEMPT Thu Feb 28 00:22:41 CST 2013
Click to expand...
Click to collapse
This shows my particular kernel here was built with GCC 4.7
You can use wget to download one of the links from above, in this instance we'll download version 4.4.3 from the first link:
Code:
wget http://invisiblek.org/arm-eabi-4.4.3.tar.bz2
Extract this to somewhere you will remember, probably your home directory.
Code:
mkdir arm-eabi-4.4.3
tar -xf arm-eabi-4.4.3.tar.bz2 -C arm-eabi-4.4.3/
Click to expand...
Click to collapse
Obtaining Source
Find someone's source to use as a base. This can be a source archive from Samsung, a kernel tree from CyanogenMod, or any other developer around that makes kernels for your device.
TIMEOUT
This is a good spot to stop and take note that the Linux kernel is licensed under the GNU General Public License (GPL): http://www.gnu.org/licenses/gpl-2.0.html
What does this mean you ask? It means that if you plan to share your kernel with the community (if it's good, please do so!) then you MUST share your
source code as well. I am not liable for what you choose to do once you start building kernels, but know this: if you share your kernel and do not
provide source code for it, you will get warnings from XDA for a determined amount of time, after that you may have your threads closed, deleted and
possibly your user account terminated. This is extremely important!
Also, you may run into more problems than just XDA. There are organizations out there that do take action if you consistently refuse to comply with the GPL.
I recommend you read this: http://www.gnu.org/licenses/gpl-2.0.html so that you are familiar with what legalities you are getting yourself into.
The main thing to remember is to share your source code if you decide to share your built kernel.
Click to expand...
Click to collapse
In this instance, we will use CyanogenMod's kernel source for the US Galaxy S3's. You may browse the source code here:
https://github.com/CyanogenMod/android_kernel_samsung_d2
You'll notice that the branch there is cm-10.1
This is the default branch of this repository on github. This means that if you intend to build this branch, you'll need to use it on CM version 10.1. Most
likely it will not function on another version.
To obtain the source code:
Code:
git clone https://github.com/CyanogenMod/android_kernel_samsung_d2
This will take a little while, be patient.
When done, you'll have a directory called android_kernel_samsung_d2, cd into this directory.
Code:
cd android_kernel_samsung_d2
Next, you'll need to set up a couple environment variables. These tell the system two things:
1. What CPU architecture to build for, in this case arm
2. Where to find the toolchain we downloaded earlier, so that the system can cross compile for arm
Code:
export ARCH=arm
export CROSS_COMPILE=~/arm-eabi-4.4.3/bin/arm-eabi-
You'll need to set these variables on each new session. You can modify your Makefile in the root of your kernel tree in order to have these set permanently.
Click to expand...
Click to collapse
Building
At this point you can make any changes to the source code that you want. If this is your first time, I recommend not making any changes and make sure you have a
sane build environment before adding any complications.
When you build a kernel, you need to choose a defconfig. This is a specialized configuration file, specifically tailored for your device.
CyanogenMod names their defconfigs for their devices like so: cyanogen_<device>_defconfig and they are located in arch/arm/configs/
Code:
ls arch/arm/configs/cyanogen*
In this example, we will build for d2vzw.
Set up your tree to build for the d2vzw:
Code:
make cyanogen_d2vzw_defconfig
(do this in your kernel's root directory, in this example it was android_kernel_samsung_d2/ )
Now you are ready to build:
First, determine how many cpu's your computer has. You'll use this number to determine how many jobs the compiler command will use. The more jobs you can use, the more
cpu threads the compile will take advantage of, thus you'll get faster builds. If you don't know, just assume you'll use the number 2. We'll use 2 as an example here.
Code:
make -j2
Where 2 is the number of CPU cores your build system has.
And now we wait...until it's done compiling...
You'll know it successfully compiled when you have this line when it stops:
Kernel: arch/arm/boot/zImage is ready
Click to expand...
Click to collapse
PROTIP:
If it stops somewhere other than "zImage is ready" then you had build errors. Try running the 'make' command with no options after it. This will run the compile on a single thread
and will cause it to stop compiling as soon as it hits an error. When you run it on multiple threads, it definitely goes much faster, but if an error occurs, the console doesn't stop
until it finishes all of its threads. Causing you to have to scroll up and search around for an error
Click to expand...
Click to collapse
Now, assuming the build completed successfully, you have two things you are concerned with: A zImage (the kernel binary itself) and your kernel modules, which get built based
on what was configured in your defconfig.
You'll find your zImage at: arch/arm/boot/zImage
Code:
ls arch/arm/boot/zImage
The modules are scattered all over the place, depending on where the source existed that they were compiled from. We can easily search for them using this command:
Code:
find . -name "*.ko"
If both of the previous commands completed, you are now ready to package your kernel up for testing.
Move up a directory before continuing.
Code:
cd ..
Click to expand...
Click to collapse
Packaging
You may know of an awesome developer by the name of koush.
Well, once upon a time, koush created a rather simple zip, called AnyKernel, that would flash a kernel on a device, regardless of what ramdisk the kernel has on it.
I've taken his zip and modified it for d2 devices and to work with the newer recoveries out there.
This has a script in it that will dump your current boot.img (kernel+ramdisk), unpack it, replace the kernel, repack it and flash it.
It'll also copy any modules to the proper directory (/system/lib/modules) and set permissions appropriately.
You can get a zip here: Download || Mirror
(You can get it here as well: https://github.com/invisiblek/AnyKernel )
(Everyone is invited to use this zip, it'll probably make your life easier to not have to worry about the ramdisk. Enjoy!)
IMPORTANT
This AnyKernel package is for US variations of the Galaxy S3.
NOT the international (I9300) or any other device.
There are checks in the updater-script that will ensure you are running a d2 device before it does anything.
If you were to remove these checks, and not modify the partition that it flashes to later, you could end up with a brick.
If you intend to adapt this package for another device (please, do this! its a very handy script!), make sure you know it well, or ask someone to help you determine your device's
partition scheme before using it.
The risk here is due to the fact that the script doesn't know your device's partition scheme. It is configured specifically for the d2 devices. Flashing it on something else, who's boot
partition is somewhere else, might cause a bad flash to the bootloader partition (bad bad news if this happens).
Just be careful if you want to use this on another device. You won't run into problems if you use this on a d2 device.
EDIT: I made modifications that should make this less likely, but please, if you intend to use this on a different device (which is completely fine!) make sure you configure
the scripts to flash to the proper partitions.
Click to expand...
Click to collapse
Download and extract one of the above, we'll again use the first link for this example:
Code:
wget http://invisiblek.org/AnyKernel_samsung-d2.zip
unzip AnyKernel_samsung-d2.zip -d AnyKernel/
Now we'll copy our newly compiled zImage (still referring to the same kernel directory we used above, your repo might be called something different)
Code:
cp android_kernel_samsung_d2/arch/arm/boot/zImage AnyKernel/kernel/
cp `find android_kernel_samsung_d2 -name "*.ko"` AnyKernel/modules/
Finally we are ready to zip this up and test out flashing it.
Code:
cd AnyKernel
zip ../MyAwesomeKernel.zip -r *
cd ..
You'll now have a file named MyAwesomeKernel.zip which you should be able to flash via custom recovery (TWRP or CWM)
Click to expand...
Click to collapse
Extra Credit/Protips
Learn to use git. It's very powerful and great way to store your code.
Learn to use adb. It's an invaluable tool for any android developer.
Touchwiz and AOSP-based kernels are different. This means you cannot take CyanogenMod's source, build a kernel and expect it to work on a Touchwiz-based ROM.
Build a ROM next: http://wiki.cyanogenmod.org/w/Build_for_d2vzw
Crackflash your own stuff!
ALWAYS NANDROID!
Click to expand...
Click to collapse
Source code for all of my projects can be found here: http://github.com/invisiblek
FAQ
Q: How do I update my source tree to the latest that is available from where I downloaded it?
A: This can be handy if, for instance, you are building a CyanogenMod kernel and they added some patches, after you downloaded the source, that you want to include in your next build. You'll want to cd to your kernel tree and issue a git pull:
Code:
cd android_kernel_samsung_d2
git pull
You may then continue with the building instructions.
This may, however, have other problems if you've made changes to files. You might run into conflicts. I won't cover fixing any of this here, its not in the scope of this thread.
Q: I'm using X as a kernel base, but Y has a patch that I really like. How do I get it in my kernel easily?
A: I'll let you check Google for this answer, but I'll give you a hint use: git cherry-pick
Nice tutorial bro! Always good to learn something new everyday
Really is a good thread,thanks
This guide would have made things too easy for me.
Too easy, indeed. haha
Great job, invisiblek! AnyKernel is the beez neez.
Ok so this is a noob question but I gotta ask anyway lol. Ok so I cloned the kernel source, I made my edits, now how do I push all this to my github?
I already have a github account, I already made a new repo for the kernel. Here's a link to my github if you need it...
https://github.com/ghicks12/d2vzw_kernel.git
spc_hicks09 said:
Ok so this is a noob question but I gotta ask anyway lol. Ok so I cloned the kernel source, I made my edits, now how do I push all this to my github?
I already have a github account, I already made a new repo for the kernel. Here's a link to my github if you need it...
https://github.com/ghicks12/d2vzw_kernel.git
Click to expand...
Click to collapse
git remote add origin git_location_you_created_on_github.git
git push -u origin somebranch
The -u is for first time run only, you can just git push afterwards.
Sent from my SCH-I535
GideonX said:
git remote add origin git_location_you_created_on_github.git
git push -u origin somebranch
The -u is for first time run only, you can just git push afterwards.
Sent from my SCH-I535
Click to expand...
Click to collapse
Thanks! When I run
Code:
git remote add origin https://github.com/ghicks12/d2vzw_kernel.git
I get this back:
Code:
fatal: remote origin already exists.
I'm editing a CM based kernel, not sure if that matters or not?
That just means you added the remote already. Just issue the push command then.
Sent from my SCH-I535
Why is this happening? I don't know what i did wrong
[email protected]:~/cm$ make VARIANT_DEFCONFIG=cyanogen_d2att_defconfig
scripts/kconfig/conf --silentoldconfig Kconfig
drivers/media/video/msm/Kconfig:123:warning: choice value used outside its choice group
drivers/media/video/msm/Kconfig:128:warning: choice value used outside its choice group
***
*** Configuration file ".config" not found!
***
*** Please run some configurator (e.g. "make oldconfig" or
*** "make menuconfig" or "make xconfig").
***
make[2]: *** [silentoldconfig] Error 1
make[1]: *** [silentoldconfig] Error 2
make: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'. Stop.
[email protected]:~/cm$
Hey. I'm having some problems with some GIT terminology and procedures. I'm a .NET developer and I use TFS and SVN on a daily basis. Forgive me if this is complete off basis from what you'd do with GIT.
What I want to do is merge one branch into another branch. In other words I want to take the latest kernel source from my favorite dev and merge in the latest from cyanogen's 4.3 d2 branch. Is this a rebase thing? It doesn't seem like cherrypicking to me.
I have successfully compiled kernel and made modules.I inserted zImage and modules inside any kernel updater,flashed via TWRP.When reboot stuck in odin and it says could not do normal boot.
Q&A for [DEV][WIP] xubuntu on tf300tg 0.1.2 (updated 130408)
Some developers prefer that questions remain separate from their main development thread to help keep things organized. Placing your question within this thread will increase its chances of being answered by a member of the community or by the developer.
Before posting, please use the forum search and read through the discussion thread for [DEV][WIP] xubuntu on tf300tg 0.1.2 (updated 130408). If you can't find an answer, post it here, being sure to give as much information as possible (firmware version, steps to reproduce, logcat if available) so that you can get help.
Thanks for understanding and for helping to keep XDA neat and tidy!
cannot boot into xubuntu
Hello guys.
I'm having a problem trying to make everything working. I tried to follow the webdoctors instructions and somehow things went wrong.
First of all, I installed v2.2.9 kernel using TWRP. Then, I split my microSD cart into partitions under gparted, then I used dd to copy from img to first card's partition. To this point everything went well. I tried to boot into xubuntu - it worked. But I had no internet connection and couldn't run mod_update.sh under xubuntu. Then, I decided to reboot system. And I couldn't go back into xubuntu - I'm choosing linux [1], and then there are some lines and it looks like it's stuck on lines like
Code:
init avahi-deamon terminated (or something like that)
...
pad_get_pspval->inval=Not charging ret=0
pad_get_psp voltage_now=8060
pad_get_psp ...
asuspec: [asuspec_enter_s3_work_function] EC in S3
I can boot into android without any problem, but WiFi isn't working. I've tried to format my card, put files from rootfs for a couple of times, and it worked only twice, rest of it just shows lines of code I mentioned.
I hope I managed to write everything clearly I receive some help from you!
xubuntu 14.04 working
[It seems as a new member I cannot post to the dev thread directly, but to an associated Q&A thread. I hope the people that might be interested in this post can read it anyway.]
I have been running xubuntu 14.04 on my Asus TF300T for some months now. As other people seem to have difficulties with this I want to share how I got this to work. My own contribution in this is quite small. It mostly consists in combining in a particular way the great work others here on xda have done.
About my methodology: I am neither expert in the relevant hardware nor software. Also I like things to be reproducible and portable. So I try to start from the most standard ingredients (official sources, standard linux distrubtions etc.) and modify them in small independent and documented modular steps until I get things to work.
In this post I will present only a very brief outline of how I proceeded. I hope to present more details in later posts.
KERNEL:
I am using a boot menu setup with kexec hardboot. Thus, for linux I am using a dedicated linux kernel, not a dual purpose linux/android kernel. The kernel is based on the official Asus source with a few small patches. I am not sure the patches are relevant for 14.04 to work, but they might be. I will describe them in a later post.
ROOTFS + INITRAMFS:
The initial rootfs is simply the official ubuntu core 14.04 armhf image found at the official ubuntu site [cannot post link].
On top of this the kernel config in /boot and modules + firmware in /lib/modules and /lib/firmware have to be installed. Also a few other small files for wifi + bluetooth to work can be installed at this stage or later.
The initial initramfs is generated through a chroot from this image via the standard update-initramfs tool. For this to work properly only a tiny configuration file that indicates the linux root partition is needed in /etc/initramfs-tools/conf.d
In subsequent stages new versions of the initramfs can always be generated directly from the booted linux image via update-initramfs.
The chroot can also be used to download all required packages for the full install via
> apt-get -d install "packagename"
This requires having set /etc/apt/sources.list and possibly /etc/resolv.conf /etc/hosts /etc/hostname
X11:
As everybody knows X11 is a problem with tegra graphics. Fortunately, drivers are available at Nvidia's Linux for Tegra Site [cannot post link].
Unfortunately, these cover only X11 ABI up to version 14, while X11 in 14.04 is using ABI 15. What is more, I have experienced graphics corruption issues with the ABI 14 driver so I am actually using the ABI 13 driver. That means in addition to installing the relevant files from the nvidia site it is necessary to downgrade X11 for 14.04. I got this to work with the following packages:
- from 12.04:
libxi6 (this is more up to date than the 13.04 version)
- from 13.04:
xserver-xorg-core
libxfixes3
xserver-xorg-input-evdev
xserver-xorg-input-multitouch
xserver-xorg-video-dummy (might not be necessary)
- from 13.10:
libgl1-mesa-dri
Also you need the package xserver-xorg-input-mtev
sources are at rabits launchpad site [cannot post link]
SECOND STAGE:
After setting up a user, downloading desired packages (in particular "xubuntu-desktop"), making available the X11 packages etc. boot into the new system as the new user. Now install the X11 packages, set some of them on hold (apt-mark hold), for me it worked by marking xserver-xorg-core, libxfixes3 and libgl1-mesa-dri. Afterward you might need
> apt-get -f install
Then install xubuntu-desktop and possibly further required packages, then generate a new initramfs. Also further stuff needs to be / can be installed at this stage for audio, video, codecs, keyboard etc.
The next boot should then land you in a fully working xubuntu 14.04.
Good news! Could you upload your image xubuntu 14.04?
aurel33 said:
Good news! Could you upload your image xubuntu 14.04?
Click to expand...
Click to collapse
The image I am using myself is quite a mess now, after many months of use. Stripping this to the essentials and removing all personal stuff would be quite some work. What I rather want to do is share a procedure that should allow anybody to generate his/her own customized image. My previous post was extremely brief in this respect, but I hope to give more details in a follow up post. The next post, however, will be dedicated to the kernel I use as there are two patches that might (or might not) be relevant for 14.04 to work.
kernel for xubuntu 14.04
[I am sorry for not including the relevant links. As a new member I am not allowed to post links.]
As I said I am using a dedicated linux kernel, not a dual purpose linux/android kernel.
I am using the toolchain from ubuntu package "gcc-arm-linux-androideabi".
Instructions: Download the official Asus kernel source and get the toolchain ready.
Apply the following patches (attached):
toolchain/config patches:
- toolchain.patch : a minimal patch to solve toolchain dependent compliation issues
- modmake.patch : compile modules with option "-fno-pic"
- compressed_makefile.patch : also to solve toolchain issues (I found this in various places)
- bcm.patch : complete Kconfig for modules "bcmdhd_29" so none of "bcmdhd", "bcm43xx", "bcm4329" needs to be selected
proper kernel patches:
- mored.patch : patch to see console information at boot (from xda contributer "moreD")
- subreaper.patch : patch to update certain process information/signals to kernel 3.4 (from Lennart Poettering)
- 0001/2/3-AppArmor-... : update kernel to make apparmor work properly (from John Johansen)
- grouper-f2fs.patch : use this in case you want to add f2fs support (from Alex Page)
My kernel config file "config.txt" is also attached.
Now set environment variables:
KBUILD_OUTPUT=<outdir> directory for compilation output and config files
INSTALL_MOD_PATH=<libdir> directory for module and firmware installation
INSTALL_PATH=<bootdir> directory for kernel installation
In case of cross compilation set additionally:
ARCH=arm
CROSS_COMPILE=arm-linux-androideabi-
Now compile:
make -j4 all
make modules_install
make firmware_install
make zinstall
I am not sure if any of the above patches is essential to get xubuntu 14.04 running, but I suspect that the subreaper patch and the AppArmor patches might be important. The reason I use them is that I got errors in previous attempts of installing (x)ubuntu that after some research I found got fixed with these patches.
Happy compliling!
Can you please give me step by step instructions on how to install Ubuntu 14.04 on my TF300T?
Sent from my TF300T using XDA Free mobile app
rootfs for xubuntu 14.04 - PART 1
Here I describe in more detail the first part of the installation of the root file system (rootfs) for xubuntu 14.04 on the Asus TF300T. I will assume that the installation is to the root of an empty partition.
I. PREPARE ROOTFS:
1. CORE ROOTFS: Download the file
"ubuntu-core-14.04.1-core-armhf.tar.gz"
from the Ubuntu repositories. (Search for "ubuntu core" to find the site, I cannot post the link.) Extract this to the xubuntu partition. This is the initial rootfs.
This rootfs already works in a chroot, either from an existing linux installation or from Android. However, for this to be more useful we need to set up internet access and repositories.
2. INTERNET SETUP: Extract the attached file "inet-setup-trusty.tar.gz" into the rootfs. This sets up the relevant ubuntu repositories and fixes DNS lookup and gives the machine a name. Here I chose "tf300t-linux". To change the name, edit the files "/etc/hostname" and "/etc/hosts".
Before entering the rootfs via chroot, we set up more infrastructure for the ability to later run the rootfs stand alone. This requires a kernel.
3. KERNEL SETUP 1: Extract the kernel modules into "/lib/modules/..." and the kernel firmware into "/lib/firmware/...". If you compiled the kernel youself, these files will have been generated in the process. If you take the kernel from elsewhere these files have to be provided with the kernel.
4. KERNEL SETUP 2: To ensure relevant modules are loaded at boot, a file "/etc/modules" might be needed. This depends on the kernel. Assuming you compilde the kernel following my instructions in a previous post, just extract the attached file "initmodules.tar.gz" into the rootfs.
We shall later use "update-initramfs" to generate the initial ram file system, a file named "initrd.img". For this to work we need the following:
4. KERNEL SETUP 3: Put the kernel image into "/boot/". It should be called "vmlinuz-3.1.10" or similar. Also put "config-3.1.10" and "System.map-3.1.10" into this directory. These are also generated when compiling the kernel. I am not sure if "System.map-3.1.10" is required. "config-3.1.10" can be extracted from the kernel image if not provided. (See instructions elsewhere.)
5. INITRD CONFIG: For "update-initramfs" to work correctly a configuration file is needed indicating the root partition. This goes into "/etc/initramfs-tools/conf.d/". You might just extract the attached file "initramfs-mmcblk1p1.tar.gz". This assumes that xubuntu uses the partition "mmcblk1p1" with "ext4", i.e. the first partition on the external micro sd card and fomatted with the "ext4" file system. If you use a differnt partition and/or file system, edit the included file "/etc/initramfs-tools/conf.d/specify_root_device" accordingly.
6. WIFI: For wifi to work you need a file "nvram.txt". This is located under Android in "/data/misc/wifi/nvram.txt". Copy this to the rootfs at "/lib/firmware/nvram.txt" if you use the kernel I describe in a previous post. Otherwise the required location might be different. You can read it off in the kernel config file "config-3.1.10". (Search for "*NVRAM_PATH*".) Also you need firmware files. Under Android these should be under "/system/vendor/firmware/". Copy them to "/lib/firmware/" or see the location in the config file (search for "*FW_DIR*"). Note that these files include subdirectories, copy with subdirectories.
7. BLUETOOTH: You need a firmware file. This should be in Android under "/system/etc/firmware/". Its name should start with "BCM4329...". In the rootfs name this "/lib/firmware/BCM4329.2.hcd". You need an executable called "brcm_patchram_plus" which loads the firmware dynamically. This goes in the rootfs into "/usr/sbin/brcm_patchram_plus". Go to the site of the Linux for Tegra R16 project of Nvidia. Download "Tegra30_Linux_R16.4.0_armhf.tbz2". Inside look for "Linux_for_Tegra/nv_tegra/nvidia_drivers.tbz2". Inside this you find the executable "/usr/sbin/brcm_patchram_plus". You need a process that automatically calls this executable. It is convenient to integrate this with ubuntu's upstart. To this end just extract the attached file "nvbt.tar.gz". It yields a file "/etc/init/patchram.conf". I have adapted this file from previous work on xda on bluetooth for linux on the tf300t or tf700t (but can't find the post now). Modify this if you want to change the name or location of the firmware file.
8. GENERAL CONFIG: To fix some general configuration parameters for the tf300t extract the attached file "nvinit.tar.gz". This yields a file "/etc/init/nv.conf". Again, this is from prvious work on xda for the tf300t or tf700t (but I can't find the relevant post now).
II. ENTER ROOTFS:
I suppose you have mounted the partition for xubuntu at "/mnt/linux", either under an existing linux or under Android.
> LC_ALL=C sudo chroot /mnt/linux
update repositories:
> apt-get update
this is useful for a smooth installation of packages:
> apt-get install dialog
now install upgrades:
> apt-get dist-upgrade
create your user:
> adduser username
> addgroup username adm
> addgroup username sudo
generate initramfs and leave chroot:
> update-initramfs -c -k 3.1.10
> exit
This generates a file "/boot/initrd.img-3.1.10". This file together with the kernel image are needed to boot into the newly set up system.
III. BOOT ROOTFS:
You should now be able to boot into the system. How this is done depends on your set up. There are lots of threads on xda devoted to this subject. You should now have a functional minimal linux system based on ubuntu 14.04.
If you want to install packages it is convenient to download these from the chroot (where wifi is available) and before booting into the system as follows:
> apt-get -d install package1 package2 ...
Then after booting, install them via,
> sudo apt-get install package1 package2 ...
The details of the further set up of the GUI and of the full xubuntu 14.04 will be described in a subsequent post.
rootfs for xubuntu 14.04 - PART 2
Here I describe the second part of the installation of the root file system (rootfs) for xubuntu 14.04 on the Asus TF300T. I assume the rootfs has been prepared as described in this post, following the steps "I. PREPARE ROOTFS" and "II. ENTER ROOTFS", but not booted yet. If it has already been booted it might (or might not) be necessary to rewrite the file "/etc/resolv.conf" to the version contained in the file "inet-setup-trusty.tar.gz" from that post. This is to ensure internet access works correctly from chroot.
I. GET REQUIRED PACKAGES
The most complicated part of getting xubuntu 14.04 to work is in the graphics drivers and libraries. Mostly, the necessary files are found on the page of the "Linux for Tegra R16" project of nvidia. Look for the Tegra 30 "Cardhu" versions. As described in my first post, the problem with this and Ubuntu 14.04 is that this version of Ubuntu uses an X server with ABI version 15. An appropriate driver is not supplied by nvidia. The latest driver version supplied by nvidia is with ABI version 14. However, I had problems with graphics corruption with this driver, so I am using the one for ABI version 13. There is a ready made package containing this in the ubuntu 13.04 repository. Get this. The filename is:
"nvidia-tegra3_16.0-0ubuntu3_armhf.deb"
(I compiled a version of this with updated source files using nvidia's latest release "16.4" for my own use, but it is somewhat complicated to do this, so I wont put the details in this post. Anyway, this version should work for most purposes.)
Since we need the X server with ABI version 13, we need to install corresponding packages that are not from ubuntu 14.04, but from previous releases. Grab the following packages:
RELEASE PACKAGE FILENAME
12.04 libxi6 libxi6_1.7.1.901-1ubuntu1~precise1_armhf.deb
13.04 xserver-xorg-core xserver-xorg-core_1.13.3-0ubuntu6.2_armhf.deb
13.04 libxfixes3 libxfixes3_5.0-4ubuntu5.13.04.1_armhf.deb
13.04 xserver-xorg-input-evdev xserver-xorg-input-evdev_2.7.3-0ubuntu2b2_armhf.deb
13.04 xserver-xorg-input-multitouch xserver-xorg-input-multitouch_1.0~rc2+git20110312-2build3_armhf.deb
13.04 xserver-xorg-video-dummy xserver-xorg-video-dummy_0.3.6-0ubuntu1_armhf.deb (this might not be needed)
13.10 libgl1-mesa-dri libgl1-mesa-dri_9.2.1-1ubuntu3_armhf.deb
There is another package needed for the X server for the touchscreen to work. Build instructions can be found on the GitHub page of user "rabits" under "tf700". I have attached the resulting package "xserver-xorg-input-mtev". Uncompressing yields:
"xserver-xorg-input-mtev_0.1.13ubuntu2_armhf.deb"
II. PLACE PACKAGES
1. Put all the 9 package files for the x server into a directory in the rootfs.
2. Enter the rootfs via chroot from Linux or Android (supposing the parition of the rootfs is mounted at "/mnt/linux")
> LC_ALL=C sudo chroot /mnt/linux
3. Go to the directory with the X server packages. Then install them:
> dpkg -i filename1 filename2 ...
4. IMPORTANT! Prevent relevant packages from being updated:
> apt-mark hold xserver-xorg-core
> apt-mark hold libxfixes3
> apt-mark hold libgl1-mesa-dri
5. Pull in dependencies:
> apt-get -f install
6. Get xubuntu packages (this takes some time depending on the speed of your internet connection) and leave:
> apt-get -d install language-pack-en
> apt-get -d install xubuntu-desktop
> exit
III. XUBUNTU INSTALL
Now, boot the rootfs.
1. Set timezone
> sudo dpkg-reconfigure tzdata
2. Install language pack to avoid locale problems
> sudo apt-get install language-pack-en
3. Install xubuntu. (This takes some time)
> sudo apt-get install xubuntu-desktop
4. Produce a new initrd.img and exit
> sudo update-initramfs -c -k 3.1.10
> sudo shutdown now
Copy this from /boot/initrd.img-3.1.10 to where its needed for the boot process.
IV. FURTHER CONFIG
1. FIX AUDIO CONFIG PROBLEMS
Extract attached file "nvaudio.tar.gz" to the rootfs.
2. SET UP X INPUT DRIVERS
Extract attached file "xorg-input.tar.gz" to the rootfs.
V. BOOT XUBUNTU
Booting the rootfs should land you now in a fully working xubuntu 14.04.
There are further steps to improve the experience such as
- install nvidia codecs and player
- fix graphics corruption on resume from suspend
- install keymaps for a better keyboard experience with the dock
I hope to describe some of this in later posts in so far as it differs from solutions that other xda members have already proposed.
A final remark:
THE IDENTICAL PROCEDURE SHOULD WORK FOR INSTALLING LUBUNTU.
(Just replace "xubuntu-desktop" with "lubuntu-desktop", I have tested this once)
It does not work with standard Ubuntu (i.e. Unity) though, because that depends on the newer X server.
@Geometry
Is there any chance, that you would share your working rootfs (ofc fresh build) and others can use it? Or everyone has to follow your guide to have working rootfs and it cannot be shared?
mentosso said:
@Geometry
Is there any chance, that you would share your working rootfs (ofc fresh build) and others can use it? Or everyone has to follow your guide to have working rootfs and it cannot be shared?
Click to expand...
Click to collapse
I would certainly be happy to share a working rootfs (understandably not the one I have been using myself for the last couple of months though). Unfortunately, I can spend very little time on this. So it is a question of finding the time to prepare a new build, then finding a free file hosting service etc. I will try to make an effort to make this happen in the near future, but can't promise anyhing at this point...
can you go more in depth in how you installed the kernel? I get some of the basics but I don't understand how to install it.
phonegeekjr said:
can you go more in depth in how you installed the kernel? I get some of the basics but I don't understand how to install it.
Click to expand...
Click to collapse
Sorry for being very brief in this respect. One way to install the kernel would be to use the "abootimg" tool to combine the kernel with a initrd.img file into a boot image, then convert this to a blob file using "blobpack" and then flashing this to the tablet. However, this would leave you unable to run any other OS/ROM (such as any Android). So this is probably not what you want. Instead you want some multiboot/multirom system. What I use myself is a modified version of the boot kernel from the main thread which starts a script that gives me a menu and then boots the kernel/initrd.img I select via kexec-hardboot. To "install" a kernel/initrd.img you just have to store them at a place where this script can find them. If I have time I might describe my particular setup in more detail later. But for the moment my main intention is to have those that already have a setup like this be able to test a full xubuntu 14.04. Then, with the help of those experts it will be easier to generate a way to make this accessible to a large number of users.
test kernel
I provide here a test kernel, compiled as described in this post. There is one small difference compared to the description in the post. It turns out that instead of the "arm-linux-androideabi-" toolchain, the "arm-linux-gnueabihf-" toolchain works as well and I have used that. Note that the kernel is a linux only kernel that will not work with Android. The attached file can be decompressed directly into the rootfs, automatically providing all essential files (modules, config etc.) in the right place. The (compressed) kernel itself is the file "/boot/vmlinuz-3.1.10". This is the file that is often named "zImage". The kernel config file is "/boot/config-3.1.10".
The other news is that I have also built a working xubuntu 14.04 rootfs as described in his post. As soon as I find a suitable file hosting service I will make this available here.
xubuntu 14.04 rootfs
So, here is the rootfs as prepared according to this post and this post. There is one small difference in the preparation as compared to those posts. I have used a modified and updated version of the package "nvidia-tegra3", see attached file.
So the rootfs file is called "tf300t-xubuntu-rootfs.tar.gz" and can be found here. Expand this into the partition you want to use for xubuntu 14.04. It is recommendable that you replace the file "/lib/firmware/nvram.txt" with you own version from your own machine at "/data/misc/wifi/nvram.txt" in Android.
This associated kernel is also in the rootfs at "/boot/vmlinuz-3.1.10". The initial ramfs is the file "/boot/initrd.img-3.1.10". This assumes linux is in first partition "mmcblk1p1" of the external micro sd card. The username is "ubuntu" with password "ubuntu".
If you want to use a different kernel (I hope other kernels will work too, please report!) then replace the module files under "/lib/modules" and possibly some firmware files under "/lib/firmware" as necessary. Also (!) put the kernel config file in "/boot/config-3.1.10". Then enter the rootfs via chroot and generate a new initrd.img via "update-initramfs -c -k 3.1.10". It will be replace the provided one.
Also, if you want to put this on a different partition edit "/etc/initramfs-tools/conf.d/specify_root_device" accordingly and generate a new initrd.img as described above.
As before I assume here that you know what to do with the kernel and the initrd.img...
Happy testing!
---
md5sum for "tf300t-xubuntu-rootfs.tar.gz" is: 46639d3af438e9c856d5951a321e203b
---
UPDATE: Here is an alternative download link for the rootfs which might provide faster download speed. Thanks to Graiden05!
@Geometry
Thank you a lot for your effort! I have a question tho, is it possible to run your rootfs and have dualboot? The best way would be to use dualboot kernel posted somewhere in the topic. If it's possible, can you briefly write how to do it?
Geometry said:
Sorry for being very brief in this respect. One way to install the kernel would be to use the "abootimg" tool to combine the kernel with a initrd.img file into a boot image, then convert this to a blob file using "blobpack" and then flashing this to the tablet. However, this would leave you unable to run any other OS/ROM (such as any Android). So this is probably not what you want. Instead you want some multiboot/multirom system. What I use myself is a modified version of the boot kernel from the main thread which starts a script that gives me a menu and then boots the kernel/initrd.img I select via kexec-hardboot. To "install" a kernel/initrd.img you just have to store them at a place where this script can find them. If I have time I might describe my particular setup in more detail later. But for the moment my main intention is to have those that already have a setup like this be able to test a full xubuntu 14.04. Then, with the help of those experts it will be easier to generate a way to make this accessible to a large number of users.
Click to expand...
Click to collapse
thanks
actualy converting it all to a blob file really is what I want to do. what is this program blobpack? I have googled it and didn't get much.
phonegeekjr said:
thanks
actualy converting it all to a blob file really is what I want to do. what is this program blobpack? I have googled it and didn't get much.
Click to expand...
Click to collapse
OK, so I assume you know how to use "abootimg" to create a boot image. "blobpack" converts this into a blob file that you can flash to the staging partition. For the blob tools see this thread. However, I had problems with the version of "blobpack" from that thread. Instead, a different version of "blobpack" worked for me. I got this by going to the cyanogenmod web site and following the instructions to built cyanogenmod for the tf300t. In the build process not only cyanogenmod is built, but various tools as well. This includes a version of blobpack, called "blobpack_tfp". This worked for me. Note that I did this almost a year ago. So I am not sure an up to date version of cyanogenmod yields the same. If you are just after the blobpack tool, downloading the complete source and building cyanogenmod is a huge overkill of course. But I guess you could browse through their sources online and find exactly what you need. Hope this info helps!
mentosso said:
@Geometry
Thank you a lot for your effort! I have a question tho, is it possible to run your rootfs and have dualboot? The best way would be to use dualboot kernel posted somewhere in the topic. If it's possible, can you briefly write how to do it?
Click to expand...
Click to collapse
I don't know of the rootfs works with this dualboot kernel. Actually, it would be great if somebody could test this! How to adapt the rootfs to another kernel is sketched in the post. However, some of the patches described here and not included in that kernel might be necessary for xubuntu 14.04 to work. But I'm not sure...
Another possibility would be to modify the kernel I described here for dualboot (or multiboot). This would require an additional kexec-hardboot patch and a modification of the initrd.img to include the kexec binary and a script that offers the boot menu.
---------- Post added at 17:01 ---------- Previous post was at 16:18 ----------
I have now announced the xubuntu 14.04 rootfs described in previous posts on the main thread here. I would like to encourage people to continue discussion there as I think that is the more appropriate place.
Hi
i would like to install xubuntu on my tablet.
I have not yet figured out what the starting point.
I currently have installed a cm11 official rom.
what i can do now? which are the steps to make dualboot working?
I can install android on the internal memory and xubuntu in sd card?
How can i make this work? I've to many doubts to start flashing and install stuffs right now.
Thanks in advance.
I've only recently after lot of struggle compiled my first kernel. While the information is still fresh in my mind, I want to share all the problems I encountered and what to do if you are in the same situation.
This guide is mainly for Linux users since that is what I am familiar with.
I've used this amazing guide to learn the basics. If you haven't yet, read it first.
Errors from scripts/gcc-wrapper.py
Open the file and change the first line from
Code:
#! /usr/bin/env python
to
Code:
#! /usr/bin/env python2
Kernel won't compile
* Did you forget to set and export the variables ARCH and CROSS_COMPILE?
* Do you have the right .config file present?
Try extracting the .config file from the original boot kernel and use it instead
* Are you sure you are in the correct branch?
Run git branch inside kernel's source code to verify that
* Are you using a very recent or very old version of the compiler? Some old kernels for example would only compile with gcc-4 but not gcc-7 or 8. Most kernels - at the time of writing - won't compile with gcc-8
Kernel compiles fine but won't boot
* Are you using wrong kernel configuration (.config) ?
* Try different compiler or different compiler version.
I've tried to compile my current with Android's prebuild gcc 4 compiler and it wouldn't boot, switched to gcc 7 and it booted perfectly fine.
Kernel starts but system crashes somewhere during boot
You can enable adb during boot so that you can see what causes the error.
Find this file in your extracted boot image ramdisk/default.prop
Set or update the following values
Code:
ro.adb.secure=0
ro.secure=0
persist.sys.usb.config=adb
Then you can do adb shell logcat or adb shell dmesg to see what is going on
My phone won't boot after flashing my new kernel, how do I boot to recovery?
First of all, you shouldn't have! You should test your new kernel without flashing it using fastboot.
Simply reboot to bootloader then run the command
Code:
fastboot boot /path/to/my/new-image
So what can I do now? Try to reach bootloader screen. the method differs from device to device but it involve pushing certain physical phone buttons while turning on the phone.
Once you are in the bootloader screen, you can do adb fastboot /path/to/twrp-recovery.img or even path to original boot image if you kept a backup.
ramast_ said:
I've only recently after lot of struggle compiled my first kernel. While the information is still fresh in my mind, I want to share all the problems I encountered and what to do if you are in the same situation.
This guide is mainly for Linux users since that is what I am familiar with.
I've used this amazing guide to learn the basics. If you haven't yet, read it first.
Errors from scripts/gcc-wrapper.py
Open the file and change the first line from
Code:
#! /usr/bin/env python
to
Code:
#! /usr/bin/env python2
Kernel won't compile
* Did you forget to set and export the variables ARCH and CROSS_COMPILE?
* Do you have the right .config file present?
Try extracting the .config file from the original boot kernel and use it instead
* Are you sure you are in the correct branch?
Run git branch inside kernel's source code to verify that
* Are you using a very recent or very old version of the compiler? Some old kernels for example would only compile with gcc-4 but not gcc-7 or 8. Most kernels - at the time of writing - won't compile with gcc-8
Kernel compiles fine but won't boot
* Are you using wrong kernel configuration (.config) ?
* Try different compiler or different compiler version.
I've tried to compile my current with Android's prebuild gcc 4 compiler and it wouldn't boot, switched to gcc 7 and it booted perfectly fine.
Kernel starts but system crashes somewhere during boot
You can enable adb during boot so that you can see what causes the error.
Find this file in your extracted boot image ramdisk/default.prop
Set or update the following values
Code:
ro.adb.secure=0
ro.secure=0
persist.sys.usb.config=adb
Then you can do adb shell logcat or adb shell dmesg to see what is going on
My phone won't boot after flashing my new kernel, how do I boot to recovery?
First of all, you shouldn't have! You should test your new kernel without flashing it using fastboot.
Simply reboot to bootloader then run the command
Code:
fastboot boot /path/to/my/new-image
So what can I do now? Try to reach bootloader screen. the method differs from device to device but it involve pushing certain physical phone buttons while turning on the phone.
Once you are in the bootloader screen, you can do adb fastboot /path/to/twrp-recovery.img or even path to original boot image if you kept a backup.
Click to expand...
Click to collapse
good job!
Do you have any general tutorials on kernel optimization?
wangyiling said:
good job!
Do you have any general tutorials on kernel optimization?
Click to expand...
Click to collapse
I am afraid not, sorry. I am just a beginner
@ramast_
The information you provided has solved pretty much all of the problems I was having. We need more content like this. Everything I find about kernel building explains things like you're a Linux expert, where as your post is much more layman friendly. I can't thank you enough for this.
Quick question; which version of Linux do you use?
You are very welcome, happy someone found it useful.
By Linux version I suppose you mean Linux distro (distribution).
I use Gentoo which is certainly not for beginners.
I'd suggest Ubuntu for beginners. Not because it's the best but because it has a very big community and you are more likely to find help when facing any problem.
This article explain how to cross compile arm code (how to compile code so that it can run on an arm device). Should get you started.
Best of luck
Spaceminer said:
@ramast_ I can't thank you enough for this.
Quick question; which version of Linux do you use?
Click to expand...
Click to collapse
ramast_ said:
You are very welcome, happy someone found it useful.
By Linux version I suppose you mean Linux distro (distribution).
I use Gentoo which is certainly not for beginners.
I'd suggest Ubuntu for beginners. Not because it's the best but because it has a very big community and you are more likely to find help when facing any problem.
This article explain how to cross compile arm code (how to compile code so that it can run on an arm device). Should get you started.
Best of luck
Click to expand...
Click to collapse
Thanks again. Distro is what I meant. I was thinking I should use Ubuntu, but I wanted to see what you had to say about it.