Linux Command Line 解析

Linux Command Line 解析

ID:42575760

大小:22.60 KB

页数:5页

时间:2019-09-18

Linux Command Line 解析_第1页
Linux Command Line 解析_第2页
Linux Command Line 解析_第3页
Linux Command Line 解析_第4页
Linux Command Line 解析_第5页
资源描述:

《Linux Command Line 解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、处理模型Linuxkernel 的启动包括很多组件的初始化和相关配置,这些配置参数一般是通过commandline 进行配置的。在进行后续分析之前,先来理解一下commandline 的处理模型:要处理的对象是一个字符串,其中包含了各种配置信息,通常各个配置之间通过空格进行分离,每个配置的表达形式是如:param=value1,value2或者很简单就是一个rw 。那么kernel 就需要提供对这些参数进行处理的处理函数列表。根据参数的作用以及执行期的先后不同,这些处理函数被定义到不同的段中。针对每一个参数,Ker

2、nel 都会到相应的段中查找相应的处理函数,最终进行各个组件的配置。1 配置格式常见的配置格式如: console=ttySAC0,115200root=nfsnfsroot=192.168.1.9:/source/rootfsinitrd=0x10800000,0x14af47 2 配置方式2.1Bootloader动态配置由bootloader 进行参数配置,commandline 将做为atag_list 的一个节点传递到Kernel 。2.2Kernel 静态配置通过makemenuconfig 进行配置:

3、运行后配置bootoptions->Defaultkernelcommandstring 。该配置将被静态编译到Kernel 中,通过变量default_command_line 访问。3  解析配置3.1 相关定义根据执行的先后顺序,可以将处理函数分为三个大类,他们分别存在于下面三个段中(参考top/arch/arm/kernel/vmlinux.lds ): __setup_start=.;*(.init.setup)__setup_end=.; __early_begin=.;*(.early_param.i

4、nit)__early_end=.; __start___param=.;*(__param)__stop___param=.; 这三个段内存储的不是参数,而是commandline 参数所需要的处理函数。3.1.1.early_param.init段“.early_param.init ”所定义的处理相对靠前一些,它所处理的参数例如:initrd= ,cachepolicy=,nocache , nowb , ecc= , vmalloc= , mem= ,等等。这些处理函数是通过__early_param宏来定

5、义的,例如:staticvoid__initearly_initrd(char**p){……}__early_param("initrd=",early_initrd);对于宏__early_param,可以在top/arch/arm/include/asm/Setup.h 中找到如下定义: structearly_params{    constchar*arg;    void(*fn)(char**p);};#define__early_param(name,fn)staticstructearly_par

6、ams__early_##fn__used__attribute__((__section__(".early_param.init")))={name,fn}  3.1.2.init.setup段 “.init.setup ”定义的处理则要靠后一些,它所处理的参数例如:nfsroot= , ip= ,等等。这些处理函数是通过__setup宏来定义的,例如: staticint__initnfs_root_setup(char*line){……}__setup("nfsroot=",nfs_root_setup)

7、; 对于宏__setup,可以在top/include/linux/Init.h 中看到: #define__setup_param(str,unique_id,fn,early)    staticchar__setup_str_##unique_id[]__initdata__aligned(1)=str;    staticstructobs_kernel_param__setup_##unique_id           __used__section(.init.setup)          

8、 __attribute__((aligned((sizeof(long)))))           ={__setup_str_##unique_id,fn,early}#define__setup(str,fn)    __setup_param(str,fn,fn,0)/*NOTE:fnisaspermodule_param,not__setup

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。