Kernel compile notes

NOTE: The upstream (git) kernel *sometimes* does not compile with gcc-4.x. Install gcc-3.4 and change /usr/bin/gcc (which links to gcc-4.x) to point to gcc-3.4 instead.

Compile using make-kpkg on Debian. Kernel compiles as a .deb (initrd image + modules) and can be directly installed using dpkg -i. (Steps, UbuntuWiki). The problem with make-kpkg is that every time you make a change to the kernel code it recompiles everything from scratch, which is a pain in the neck! To avoid that, it is better to compile the kernel from scratch and not use jazzy distro scripts


The old fashioned way

1. Go to the kernel directory (say, kernel_dir) and edit the Makefile to specify the EXTRAVERSION. (This is what --append-to-version does in make-kpkg). It is good to do this as it helps to identify your kernel from the rest.

2. Configure the kernel
make menuconfig

If you do not know where to start for, use
make defconfig

This creates a default configuration for i386. You can then confirm the configuration with
make menuconfig

[OLD]It might be useful to run (not required)
make oldconfig

3. Compile the kernel and modules
make bzImage
make modules


In the 2.6+ kernel, you can just do the following instead

make -j N, where N is the number of parallel compilation tasks you want to kick in for a faster compile. (N = 2,4,...)

TIP: If you have already compiled and installed the kernel once and later made changes ONLY to the kernel, doing a make would build the modules too. To avoid that do

make bzImage

TIP: To reduce the compilation noise you can forward the output of make to /dev/null.

4. Install the modules in /lib/modules

sudo make modules_install

Confirm that /lib/modules/ has the modules corresponding to your kernel version.

5. Copy the kernel image binaries to /boot

Lets say that the kernel version (along with the EXTRAVERSION) is 2.6.24-custom.010209

cd kernel_dir
sudo mv arch/i386/boot/bzImage /boot/vmlinuz-2.6.24-custom.010209
sudo mv .config /boot/config-2.6.24-custom.010209
sudo mv System.map /boot/System.map-2.6.24-custom.010209


6. Create the RAM Disk image (initrd).

In Ubuntu the mkinitrd is no longer supported. Instead mkinitramfs is used.

update-initramfs -c -k 2.6.24-custom.010209 # your kernel version

Note that update-initramfs looks at /lib/module for the kernel version. Make sure that you have installed the modules in step 4.

The initrd file initrd-2.6.24-custom.010209 would be created in /boot

NOTE: Usually the following are selected by default at the time of kernel configuration. If these are not set, you might get a kernel panic while booting.
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_CRAMFS=y


7. Last step is to update grub

sudo update-grub

Check in /boot/grub/menu.lst and confirm.

8. Reboot, and select your kernel

Getting the front-mic to work

Weird problem. By default the front-mic does not work on my laptop. In order to get it to work, there is some magic that needs to be done with the ALSA Mixer.

1. Open Alsa mixer, select Input source as "Front Mic". Close Alsa mixer
2. Now open Alsa mixer again and now select the Input source as "Mic". Close Alsa mixer.
3. The front mic starts working again! (Need to find the real fucking reason behind this)

(confirmed: link)

Linux system calls

1. How to implement my own system call in kernel 2.6 -> here
2. IBM developerWorks "Kernel command using Linux system calls" -> here
3. Linux system call table -> here
4. How system call works on Linux/i386 -> here
5. syscalls() man page -> here

Pandora as an application on Gnome using firefox

Firefox supports multiple profiles. You can create a dedicated profile for Pandora.

1. Close firefox and start it from the command prompt using

firefox -no-remote -ProfileManager

2. Create a new profile and call it Pandora

3. Customize the profile. Install the add-on "Compact Menu 2" and remove all the toolbars.

4. Make pandora.com the home page.

5. ProfileManager makes the last profile as default. Start profile manager again and select the "default" profile so that it opens your actual profile.

6. You can create a GNOME launcher now and give the following command

firefox -no-remote -P Pandora

7. Go to menu edit and add this under (say) "Sound & Video"

8. Search google images and get a PNG or SVG image for Pandora.

9. If you are using Avante-window-manager (AWM) you can add this to your launcher.

10. Enjoy the music!

Convert Firefox into Chrome in 4 simple steps

1. Install the following Add-ons : Compact Menu 2, Download Satusbar, Stylish
2. Install the following theme : Chromifox
3. Install the following styles using Stylish: Back/Forward drop-down, Tab bar on top
4. Right click on the menubar, hide it and click on customize. Add compact menu on the right side along with the the new tab button.

Restart Firefox. Bingo!

Getting Bamboo to work on Ubuntu

Wacom is very well supported on Linux but to make it to work with all the features you need to build the driver.

Ubuntu's Wacom wiki page has all the details .. here

Just to reiterate the steps .. here

Jarnal is a good application that you can use for taking notes. Apart from that inkscape and GIMP can be used for drawing\sketching.

Using Latex for formulas

NOTE: This is only if you are using it within OpenOffice

All of this translates to the formulas below

P_total = AC{V^2}f + {%tau}AVI_shortf + VI_leak newline
P_o = C_o {{V_o}^2}f newline
P_n = 0.5 P_o newline
I_leak = K_2 W(V over {T_ox})^2 func e^({{%alpha}T_ox over V}) newline
sum from 0 to 100 (a^2)(b^3)d newline
where, left lbrace {stack{a, contanst# b, variable # d, dynamic}} right rbrace


Using GNUPlot

GNU plot is one of the most useful applications on Linux for creating plots. GNU plot takes in data in the following format

10 324.12 12312 56
100 34231.3 2312123 67

There are three columns here, there can be any number, make sure the data is separated by a space. You can make your program write the data directly in a file, call it whatever you want to, e.g. "simout.dat"

# Fire gnuplot
gnuplot>

# draw using the first two columns from the data file
gnuplot> plot "simout.dat" using 1:2

# draw using the first and second col AND first and third col.
gnuplot> plot "simout.dat" using 1:2, "simout.dat" using 1:3

#draw using lines
gnuplot> plot "simout.dat" using 1:2 with lines, "simout.dat" using 1:3 with lines

# draw using points on the lines
gnuplot> plot "simout.dat" using 1:2 with linespoint, "simout.dat" using 1:3 with linespoint

# draw with a legend for the lines
gnuplot> plot "simout.dat" using 1:2 with linespoint ti "Marks in CA", "simout.dat" using 1:3 with linespoint ti "Marks in WUC"

# set title
set title "The title of the plot"

# set X label
set xlabel "Blocks (N)"

# Set Y label
set ylabel "Performance [MFlops]"

# Set x and y Range
set xrange [100:10000]
set yrange [0:10e6]

# Set log scale on X
set logscale x

There are so many other things that you can do with GNUPlot, which I even don't know as I am still learning how to use it.

Excellent tutorial here (that is how I got started).