[Q] how to change Droid's kernel parameters?

Search This thread

Nexus 1

Member
Jan 21, 2010
24
0
config_cmdline won't take effect if I modify there.

mkbootimg plus costumized command like also do not show up when kernel booting.


it looks like the kernel command line is in the bootloader code and passed to the kernel, and can NOT be overriden.

any one has sucussful experience changing the kernel commandline on droid?

Thanks in advance.
 

Nexus 1

Member
Jan 21, 2010
24
0
my kernel command line in dmesg is attached here:

<5>[ 0.000000] Kernel command line: console=ttyS2,115200n8 console=ttyMTD7 rw mem=244M@0x80C00000 init=/init ip=off brdrev=P3A_CDMA mtdparts=omap2-nand.0:1536k@1792k(pds),384k@6272k(misc),3584k(boot)ro,4608k(recovery),143744k(system),94848k(cache),268032k(userdata),2m(kpanic) androidboot.mode=normal androidboot.bootloader=2C6C0 androidboot.serialno=xxxxxxxxxxxxxxxxxxxx
<6>[ 0.000000] boot_mode=normal
<6>[ 0.000000] PID hash table entries: 1024 (order: 0, 4096 bytes)
 
Last edited:

drewbug

New member
Jan 17, 2008
3
0
config_cmdline won't take effect if I modify there.

mkbootimg plus costumized command like also do not show up when kernel booting.


it looks like the kernel command line is in the bootloader code and passed to the kernel, and can NOT be overriden.

any one has sucussful experience changing the kernel commandline on droid?

Thanks in advance.

I just finished doing this so that I could boot Debian. I'll post my notes here, and come back and pretty them up later.

Code:
Install the following packages using your favorite package manager:
Debian based Linux distributions
32bit and 64bit systems:
git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev abootimg
64bit only:
ia32-libs lib32z1-dev lib32ncurses5-dev gcc-multilib g++-multilib


Download Code Sourcery ARM EABI Toolchain:
Use "./arm-2012.03-56-arm-none-eabi.bin" to install, then create an environment variable denoting the location of the toolchain as follows:
export CCOMPILER=[Install Folder]/bin/arm-none-eabi


Download Kernel Source Code
mkdir -p ~/android/kernel
cd ~/android/kernel
git clone git://github.com/cvpcs/android_kernel_omap.git --branch cm-sholes
cd android_kernel_omap
git reset --hard 470cb3613f8da9a2483d5592f750ef4ad7de29bf


Download cm-7.2.0-sholes.zip: 
Extract, then copy boot.img to cm-kernel folder, then pull .config as follows:
scripts/extract-ikconfig boot.img > .config


The heart of this hack relies on a kernel configuration option that was created for situations when you can't change the command-line options of the boot loader, but you can change the kernel.

1) Open .config and replace:
------------------------------------
CONFIG_CMDLINE="root=/dev/nfs nfsroot=192.168.0.1:/home/user/buildroot ip=192.168.0.2:192.168.0.1:192.168.0.1:255.255.255.0:tgt:eth0:off rw console=ttyS2,115200n8"
------------------------------------
with
------------------------------------
CONFIG_CMDLINE="mem=244M@0x80C00000 mtdparts=omap2-nand.0:640k@128k(mbm),384k@1408k(cdt),384k@3328k(lbl),384k@6272k(misc),3584k(boot),4608k(recovery),143744k(system),94848k(cache),268032k(userdata),2m(kpanic) root=/dev/mmcblk0p2 console=tty1"
CONFIG_CMDLINE_FORCE=y
------------------------------------

2)
Open arch/arm/Kconfig and replace:
------------------------------------
	  time by entering them here. As a minimum, you should specify the
	  memory size and the root device (e.g., mem=64M root=/dev/nfs).

config XIP_KERNEL
	bool "Kernel Execute-In-Place from ROM"
	depends on !ZBOOT_ROM
------------------------------------
with
------------------------------------
	  time by entering them here. As a minimum, you should specify the
	  memory size and the root device (e.g., mem=64M root=/dev/nfs).

config CMDLINE_FORCE
	bool "Always use the default kernel command string"
	depends on CMDLINE != ""
	help
	  Always use the default kernel command string, even if the boot
	  loader passes other arguments to the kernel.
	  This is useful if you cannot or don't want to change the
	  command-line options your boot loader passes to the kernel.

	  If unsure, say N.

config XIP_KERNEL
	bool "Kernel Execute-In-Place from ROM"
	depends on !ZBOOT_ROM
------------------------------------

3)
Open arch/arm/kernel/setup.c and replace:
------------------------------------
static int __init parse_tag_cmdline(const struct tag *tag)
{
	strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
	return 0;
}
------------------------------------
with
------------------------------------
static int __init parse_tag_cmdline(const struct tag *tag)
{
	#ifndef CONFIG_CMDLINE_FORCE
		strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
	#else
		pr_warning("Ignoring tag cmdline (using the default kernel command line)\n");
	#endif /* CONFIG_CMDLINE_FORCE */
	return 0;
}
------------------------------------


Actual Compiling!
make ARCH=arm CROSS_COMPILE=$CCOMPILER -j`grep 'processor' /proc/cpuinfo | wc -l`


Creating "boot.img"!
mkdir ~/android/boot/
mv boot.img ~/android/boot/boot.img
cd ~/android/boot/
abootimg -x boot.img
sed -i 8d bootimg.cfg
rm boot.img initrd.img zImage
cp ~/android/kernel/android_kernel_omap/arch/arm/boot/zImage ~/android/boot/zImage
echo > ~/android/boot/initrd.img
abootimg --create boot.img -f bootimg.cfg -k zImage -r initrd.img


Flashing "bootimg"!
adb push boot.img /tmp/boot.img
adb shell flash_image boot /tmp/boot.img