嵌入式之路--内核启动参数解析

来源:百度文库 编辑:神马文学网 时间:2024/04/29 22:13:22

内核启动参数解析

原创声明:作者保留一切权力,转载请注明出处。

所有资料均来源于互联网,若侵犯了您的权利,请告知,作者一定修正之。

一、内核获得启动参数的四种形式

>>>>>>>>> 引用

[1]Linux系统kernel参数传递方式详细解析

1、最常用的方式,就是在makeconfig里修改“General Setup”子菜单中的“Defaultkernelcommand string”选项,通过修改这个选项来修改include/linux/autoconf.h文件中的CONFIG_CMDLINE宏。

 

2、有的时候为了省去makemenuconfig的时间,并且内核命令也是固定的,就可以写死内核arch/arm/setup.c文件default_command_line,这个变量本来是初始化为CONFIG_CMDLINE的。

 

3、除了方法1之外,另外一种正规的方法就是将内核命令写入内核参数表中,然后通过start_kernel()->setup_arch()->parse_tags()->parse_tag()->parse_tag_cmdline()函数来将内核参数表中的内核命令覆盖default_command_line变量(当然你首先得有内核参数表)。

 

4、最后,有的板子会采取直接将内核命令通过bootloader传递给内核

怎样传递呢?

[2]内核参数问题

    在UBOOT中使用bootm命令可以将参数传递给内核(其实就是将参数放到DRAM_BASE+0x00000100处,然后内核从此处读取)。

     DRAM_BASE+0x00000100处是否有TAGLIST,有的话从此处读取;

若没有,则使用default_command_line,这个就是在配置内核make menuconfig的时候设置的,即CONFIG_CMDLINE。

>>>>>>>>> 引用

 

二、内核启动参数的格式与含义

命令行的格式类似于下面的样子

CONFIG_CMDLINE="mem=64Mconsole=ttySAC0 root=/dev/ram initrd=0xc0800000,0x00800000 ramdisk_size=2048rw"

 

每个关键字分别代表什么含义,系统怎样解析呢?

从原理上,简单地讲,内核是做字符串解析。首先对整个字符串按空格分隔开,每个子串又由等号分隔。等号左边是系统预定义的关键字,等号右边是对应关键字解析函数的参数。

>>>>>>>>> 引用

[3]Linux内核启动参数详解

所有型如“name=value”参数,如果没有被上面所述的设置函数[指系统预定义关键字的解析函数]接收,将被解释为系统启动后的环境变量,

比如“TERM=vt100”就会被作为一个启动时参数。

 

所有没有被内核设置函数接收也没又被设置成环境变量的参数都将留给init进程处理,比如“single”。

>>>>>>>>> 引用

 

系统已经支持哪些关键字,即其含义是什么?

最详尽的解释无疑来自《Linux Kernel in a Nutshell》 一书,第九章。

下面是国内博客转载的一个连接地址。

[4]Linux Kernel in a Nutshell  

 

 

你还可以添加自定义的启动参数和对应的解析函数。

[5]增加自定义的内核启动参数

三、参考资料

[1]Linux系统kernel参数传递方式详细解析

http://www.bitscn.com/os/linux/200710/116553.html

 

[2]内核参数问题 http://linux.chinaunix.net/techdoc/system/2007/08/25/966304.shtml

 

[3]Linux内核启动参数详解http://edu.codepub.com/2009/1213/18715.php

 

[4]Linux Kernel in a Nutshell  http://blog.chinaunix.net/u2/76263/showart_1212604.html

 

[5]增加自定义的内核启动参数http://linux.chinaunix.net/techdoc/install/2009/08/31/1133192.shtml