Site Tools


Hotfix release available: 2024-02-06a "Kaos". upgrade now! [55.1] (what's this?)
New release available: 2024-02-06 "Kaos". upgrade now! [55] (what's this?)
kerneldev

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
kerneldev [2012/02/24 09:18] – [Kernel Debugging] armelfkerneldev [2014/06/21 18:57] (current) – [Mainline Git Kernel] santox
Line 5: Line 5:
 [[http://en.wikipedia.org/wiki/Nvidia_Tegra#Tegra_2_series|NVidia's Tegra2]]((http://www.nvidia.com/object/tegra-2.html)), which is dual-core [[http://arm.com|ARM]] [[http://en.wikipedia.org/wiki/Cortex-A9|Cortex-A9]], supports only [[http://en.wikipedia.org/wiki/ARM_architecture#VFP|VFPv3]] ((http://www.arm.com/products/processors/technologies/vector-floating-point.php)) and **not** [[http://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_.28NEON.29|NEON]] ((http://www.arm.com/products/processors/technologies/neon.php)) extensions which are more powerful. [[http://en.wikipedia.org/wiki/Nvidia_Tegra#Tegra_2_series|NVidia's Tegra2]]((http://www.nvidia.com/object/tegra-2.html)), which is dual-core [[http://arm.com|ARM]] [[http://en.wikipedia.org/wiki/Cortex-A9|Cortex-A9]], supports only [[http://en.wikipedia.org/wiki/ARM_architecture#VFP|VFPv3]] ((http://www.arm.com/products/processors/technologies/vector-floating-point.php)) and **not** [[http://en.wikipedia.org/wiki/ARM_architecture#Advanced_SIMD_.28NEON.29|NEON]] ((http://www.arm.com/products/processors/technologies/neon.php)) extensions which are more powerful.
  
-As of 2012/02/18, the most stable kernel is 3.0.19, and [[http://gitorious.org/~marvin24/ac100/marvin24s-kernel/|Marc Dietrich]]the ac100 kernel maintainer, started to work on [[http://gitorious.org/~marvin24/ac100/marvin24s-kernel/commits/chromeos-ac100-3.2-exp|kernel 3.2.x series]] for AC100.+As of 2012/06/28, the most stable kernel is [[http://gitorious.org/~marvin24/ac100/marvin24s-kernel/commits/chromeos-ac100-3.0|3.0.19]]. This kernel is based on the original work made by [[http://git.chromium.org/gitweb/?p=chromiumos/third_party/kernel.git;a=summary|Google]]. Work has been started on [[http://gitorious.org/ac100/marvin24s-kernel/trees/linux-tegra-nv-ac100-3.1-exp|3.1.10]] kernel for AC100, which is based on the work of [[http://nv-tegra.nvidia.com/gitweb/?p=linux-2.6.git;a=summary|NVIDIA]]. The next Ubuntu version 12.10 will be based upon this kernel. There also exists a very experimental version of a mainline kernel [[http://gitorious.org/~marvin24/ac100/marvin24s-kernel/commits/for-next|(for-next)]] with a minimal amount of patches.
  
 The most hotspot in kernel development is NVEC driver (incomplete implementation and marginal stability issue), sound driver (noise annoyance, automatic switch between Speaker/Headphone (not implemented at all in ASoC but can be easily done with a userspace daemon)) and ''rt2800usb'' Wifi driver (some stability issues and high stress on specific memory pool (reduced by **echo 32000 > /proc/sys/vm/min_free_kbytes**)). The most hotspot in kernel development is NVEC driver (incomplete implementation and marginal stability issue), sound driver (noise annoyance, automatic switch between Speaker/Headphone (not implemented at all in ASoC but can be easily done with a userspace daemon)) and ''rt2800usb'' Wifi driver (some stability issues and high stress on specific memory pool (reduced by **echo 32000 > /proc/sys/vm/min_free_kbytes**)).
Line 90: Line 90:
 ===== 3.0.x Kernel series ===== ===== 3.0.x Kernel series =====
 TODO TODO
 +=== From marvin24s git ===
 +To build the kernel native on the ac100, do the following:
 +<code>
 +git clone -b chromeos-ac100-3.0 git://gitorious.org/~marvin24/ac100/marvin24s-kernel.git
 +cd marvin24s-kernel
 +make paz00_defconfig
 +make zImage modules
 +make modules_install
 +</code>
 +You will find the kernel in arch/arm/boot/zImage, which you can flash with abootimg (see above).
  
 +Cross-Compiling:
 +If you don't have the time to wait for a build on the AC100 (~ 30 minutes), you can try with a cross-compiler on your favorit desktop machine. How to setup such an environment is out of scope of this article, but google is your friend.
 +
 +The procedure is similar to the native one:
 <code> <code>
 git clone -b chromeos-ac100-3.0 git://gitorious.org/~marvin24/ac100/marvin24s-kernel.git git clone -b chromeos-ac100-3.0 git://gitorious.org/~marvin24/ac100/marvin24s-kernel.git
 cd marvin24s-kernel cd marvin24s-kernel
 +make paz00_defconfig ARCH=arm
 +make zImage modules INSTALL_MOD_PATH=/tmp INSTALL_MOD_STRIP=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
 +make modules_install INSTALL_MOD_PATH=/tmp INSTALL_MOD_STRIP=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
 </code> </code>
  
 +The INSTALL_MOD_PATH and INSTALL_MOD_STRIP arguments are optional, but convenient. After this, you will find
 +the stripped modules under /tmp/lib/modules/<kernel-version>.
 +
 +Similar procedures can be used for the 3.1 and for-next kernels.
 +
 +Some note on the needed kernel command lines:
 +The 3.0 series uses a reserved video memory which is created by adding "mem=448M@0" to the kernel command line.
 +Later kernels can reserve this memory by themself, thus adding "mem=512M@0" is required here.
 +
 +The for-next series is very special (you may have guessed that already). First, everything is setup by device-tree info (if you don't know what a device-tree is, yes, google is your friend again). This means that beside the kernel and the modules, you also have to compile the device-tree, which is done by the "dtbs" make target. After that, the compiled device-tree (in arch/arm/boot/tegra20-paz00.dtb) must be concatenated to the kernel image. So something like
 +<code>
 +cat arch/arm/boot/tegra20-paz00.dtb >> arch/arm/boot/zImage
 +</code>
 +should be sufficient. Make sure you used paz00_defconfig, because this kernel seems to ignore the parameters submitted by the bootloader.
 +
 +=== Stock Ubuntu 12.04 Kernel ===
 +
 +Step by step: Recompiling the Ubuntu stock kernel natively (for example to patch it) coming from a stock Ubuntu 12.04 install.
 +As of writing the kernel-version is **3.0.27** and will have to be replaced when another kernel comes out/is used. The created files will be copied to a safe place (/home/turbo/Downloads/ in my case)
 +
 +Become root for all steps
 +<code>sudo su</code>
 +Install dependencies for the kernel and build it:
 +<code>
 +apt-get build-dep linux-ac100
 +apt-get install build-essential lzop
 +cd /usr/src/
 +apt-get source linux-ac100
 +cd linux-ac100-3.0.27/
 +</code>
 +Now if you want the original Ubuntu config do 
 +<code>cp /boot/config-$(uname -r) .config</code>
 +If you want the standrad ac100 config instead do:
 +<code>make paz00_defconfig</code>
 +Apply patches if wanted. In this example I use gordans overclocking patches from [[http://www.altechnative.net/2011/12/31/overclocking-the-toshiba-ac100/|his site]].
 +<code>patch -p1 < tegra_common.patch
 +patch -p1 < tegra_1200.patch</code>
 +(Note that one patch didn't apply cleanly, but the errors were pretty obvious and easy to fix manually.)
 +
 +<code>
 +make -j3 INSTALL_MOD_STRIP=1 zImage modules
 +make -j3 modules_install
 +cp arm/boot/zImage /home/turbo/Downloads/zImage1200-3.0.27
 +cp .config /boot/config-3.0.27
 +</code>
 +
 +Get the bootimg.cfg
 +<code>cd /boot/bootimg.cfg /home/turbo/Downloads/</code>
 +Adjust the bootimg.cfg to your needs. Most importantly giving it a cool greeting text of course!
 +
 +Create the initrd
 +<code>
 +cp .config /boot/config-3.0.27
 +update-initramfs -k 3.0.27 -c
 +cp /boot/initrd.img-3.0.27 /home/turbo/Downloads/initrd1200-3.0.27.img
 +</code>
 +
 +Create the final image
 +<code>cd /home/turbo/Downloads/
 +abootimg --create part6_1200-3.0.27.img -f bootimg.cfg -k zImage1200-3.0.27 -r initrd1200-3.0.27.img</code>
 +In my case (10K, Android 2.2) the boot partition is partition 6 as seen by nvflash and /dev/mmcblk0p4 as seen from Ubuntu. Make sure you flash to the right partition, this means: `cat /proc/partitions` has to show the partition as 8.0 MiB and `sudo abootimg -i /dev/mmcblk0p4` has to show "Android boot Image" in the first line.
 +
 +Double-check and create a backup of the boot partition:
 +<code>dd if=/dev/mmcblk0p4 of=/home/turbo/Downloads/part6-$(uname -r).img</code>
 +Size of the original is 8388608 aka 8.0M. This backup wont help you if it's //on// your ac100, so:
 +Be sure to copy this image somewhere else.
 +
 +Be sure to copy this image somewhere else. Really.
 +
 +Flash the image
 +<code>dd if=/home/turbo/Downloads/part6_1200-3.0.27.img of=/dev/mmcblk0p4</code>
 +
 +Reboot.
 +
 +===== 3.10.x Kernel series =====
 +3.10 build process is close to 3.0 for-next.
 +Device-tree is mandatory, you need to build it and concatenate with a kernel:
 +<code>
 +make dtbs
 +cat arch/arm/boot/tegra20-paz00.dtb >> arch/arm/boot/zImage
 +</code>
 +But 3.10 don't use paz00_defconfig anymore. Instead is uses tegra_defconfig (main idea of device-tree is to have all-in-one kernel and choose drivers on boot time using device-tree):
 +<code>make tegra_defconfig</code>
 +
 +===== Mainline Git Kernel =====
 +From 3.15, AC100 finally boots the official mainline kernel ! 
 +To succesfully cross-compile it, i used linaro precompiled toolchain [[http://releases.linaro.org/14.05/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux.tar.xz]]:
 +
 +  wget http://releases.linaro.org/14.05/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux.tar.xz
 +
 +extract it somewhere, and export install path so the toolchain can be found:
 +  tar xvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux.tar.xz 
 +  export PATH=$PATH:gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux/bin/
 +
 +Now you have to clone the kernel git repository:
 +  git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
 +  cd linux
 +  
 +As already described above, configure && make && install and your kernel is ready!
 +  make tegra_defconfig ARCH=arm
 +  make zImage modules dtbs INSTALL_MOD_PATH=/tmp INSTALL_MOD_STRIP=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
 +  make modules_install INSTALL_MOD_PATH=/tmp INSTALL_MOD_STRIP=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
 +
 +Copy everything you need in a folder (to copy on SD or USB key and put into AC100)
 +  mkdir ~/linux-3.16-0
 +  mv /tmp/lib/ ~/linux-3.16-0/
 +  cp arch/arm/boot/zImage ~/linux-3.16-0/
 +  cp arch/arm/boot/dts/tegra20-paz00.dtb ~/linux-3.16-0/
 + 
 ==== Kernel Debugging ==== ==== Kernel Debugging ====
  
kerneldev.1330071517.txt.gz · Last modified: 2012/02/24 09:18 by armelf