Changes

Jump to: navigation, search

Change Linux Command Line Parameter from U-boot

4,266 bytes added, 16:05, 8 May 2012
no edit summary
{{WorkInProgress}}
 
When booting a Linux kernel, U-Boot, among the other things, take care of passing a string called ''command line'' as kernel parameter. U-Boot uses its '''bootargs''' environment variable as parameter. This variable can be defined statically in U-Boot environment as follow:
 
<pre class="board-terminal">
NAON#setenv bootargs 'root=/dev/mmcblk0p1 rw console=ttyO0,115200n8 earlyprintk mem=176M vram=46M notifyk.vpssm3_sva=0xBF900000'
NAON#saveenv
Saving Environment to SPI Flash...
Erasing SPI flash...Writing to SPI flash...done
NAON#
</pre>
 
But a most commonly used approach is to use different environment variables that ''append'' a dedicated section of command line. This is more flexible and allow the user to change only a single part of the command line without take care of the whole string.
 
=== Runtime Kernel command line creation ===
 
As noted above, commonly the command line is created by U-Boot environment variable substitution and string concatenation.
 
As an example we'll how to change [[:Category:Naon|Naon]] frame buffer size by using the default environment variables setup.
 
Here is a dump of the interesting sections of the environment:
 
<pre class="board-terminal">
NAON#printenv net_nfs nfsargs addip addcons addmem mem vram
net_nfs=run loadk nfsargs addip addcons addmem; bootm ${buf}
nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}:${rootpath} panic=5
addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gateway}:${netmask}:${hostname}:${ethdev}
addcons=setenv bootargs ${bootargs} console=${console},115200n8 earlyprintk
addmem=setenv bootargs ${bootargs} mem=${mem} vram=${vram} notifyk.vpssm3_sva=${notify_mem}
mem=176M
vram=46M
</pre>
 
When using ''net_nfs'' configuration, which loads the kernel binary image from TFTP and uses NFS as root file system, U-Boot:
* initializes bootargs when running ''nfsargs'' macro
* appends network configuration when running ''addip'' macro (see [http://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt] for a more detailed explanation of all this parameters)
* appends console configuration with ''addcons'' macro
* appends memory parameters with ''addmem'' macro
** please note that this macro uses ''mem'', ''vram'' and ''notify_mem'' variable substitution to setup its parameter
 
For this reason a simple
 
<pre class="board-terminal">
NAON#setenv vram 36M
NAON#saveenv
Saving Environment to SPI Flash...
Erasing SPI flash...Writing to SPI flash...done
</pre>
 
Will reduce framebuffer memory allocation from 46MiB to 36MiB.
 
Here is the new boot output:
 
<pre class="board-terminal">
NAON#run net_nfs
TFTP from server 192.168.0.250; our IP address is 192.168.0.78
[snip]
Bytes transferred = 2688084 (290454 hex)
## Booting kernel from Legacy Image at 81000000 ...
Image Name: Linux-2.6.37-naon-0.2.0
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2688020 Bytes = 2.6 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
 
Starting kernel ...
 
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Linux version 2.6.37-naon-0.2.0 (ezsdk@ezsdk) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #2 Mon May 7 18:21:09 CEST 2012
[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f
[ 0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] Machine: naon
[ 0.000000] bootconsole [earlycon0] enabled
[ 0.000000] vram size = 37748736 at 0x0
[ 0.000000] reserved size = 37748736 at 0x0
[ 0.000000] FB: Reserving 37748736 bytes SDRAM for VRAM
[ 0.000000] Memory policy: ECC disabled, Data cache writeback
[ 0.000000] OMAP chip is TI8148 2.0
[ 0.000000] SRAM: Mapped pa 0x40300000 to va 0xfe400000 size: 0x20000
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 35488
[ 0.000000] Kernel command line: root=/dev/nfs rw nfsroot=192.168.0.250:/home/shared/devel/dave/naon-DAA/sw/linux/sdk/rfs/nelk-min panic=5 ip=192.168.0.78:192.168.0.250:192.168.0.254:255.255.255.0:naon:eth0 console=ttyO0,115200n8 earlyprintk mem=176M vram=36M notifyk.vpssm3_sva=0xBF900000
[ 0.000000] PID hash table entries: 1024 (order: 0, 4096 bytes)
[snip]
</pre>

Navigation menu