Linux启动参数及实现.doc_第1页
Linux启动参数及实现.doc_第2页
Linux启动参数及实现.doc_第3页
Linux启动参数及实现.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux启动参数及实现 _setup与early_param #define _setup_param(str, unique_id, fn, early) / static char _setup_str_#unique_id _initdata = str; / static struct obs_kernel_param _setup_#unique_id / _attribute_used_ / _attribute_(_section_(.init.setup) / _attribute_(aligned(sizeof(long) / = _setup_str_#unique_id, fn, early #define _setup(str, fn) / _setup_param(str, fn, fn, 0) #define early_param(str, fn) / _setup_param(str, fn, fn, 1)_setup与early_param不同的是,early_param 宏注册的内核选项必须要在其他内核选项之前被处理。在函数start_kernel中,parse_early_param处理early_param定义的参数,parse_args处理_setup定义的参数。parse_early_param();parse_args(Booting kernel, static_command_line, _start_param, _stop_param - _start_param, &unknown_bootoption); 1,所有的系统启动参数都是由形如 static int _init foo(char *str);的函数来支持的注:#define _init _attribute_ (_section_ (.init.text)申明所有的启动参数支持函数都放入.init.text段2.1,用_setup宏来导出参数的支持函数_setup(foo= , foo);展开后就是如下的形式static char _setup_str_foo _initdata = foo=; static struct obs_kernel_param _setup_foo _attribute_used_ _attribute_(_section_(.init.setup) _attribute_(aligned(sizeof(long) = _setup_str_foo, foo, 0 ;/foo=,foo,0也就是说,启动参数(函数指针)被封装到obs_kernel_param结构中,所有的内核启动参数形成内核映像.init.setup段中的一个obs_kernel_param数组2.2用early_param宏来申明需要早期处理的启动参数,例如在arch/i386/kernel/setup.c就有如下的申明:early_param(mem, parse_mem);展开后和_setup是一样的只是early参数不一样,因此会在do_early_param中被处理3,内核对启动参数的解析:下面函数历遍obs_kernel_param数组,调用支持函数static int _init do_early_param(char *param, char *val) struct obs_kernel_param *p; for (p = _setup_start; p early & strcmp(param, p-str) = 0) if (p-setup_func(val) != 0) printk(KERN_WARNING Malformed early option %s/n, param); /* We accept everything at this stage. */ return 0;这个函数在parse_early_param中被调用,而parse_early_param在start_kernel中被调用,parse_early_param之后的parse_args会调用下面函数static int _init obsolete_checksetup(char *line) struct obs_kernel_param *p; int had_early_param = 0; p = _setup_start; do int n = strlen(p-str); if (!strncmp(line, p-str, n) if (p-early) /* Already done in parse_early_param? * (Needs exact match on param part). * Keep iterating, as we can have early * params and _setups of same names 8( */ if (linen = /0 | linen = =) had_early_param = 1; else if (!p-setup_func) printk(KERN_WARNING Parameter %s is obsolete, ignored/n, p-str); return 1; else if (p-setup_func(line + n)/调用支持函数 return 1; p+; while (p _setup_end); return had_early_param;init/main.c中启动参数申明列表:_setup(nosmp, nosmp);_setup(maxcpus=, maxcpus);_setup(reset_devices, set_reset_devices);_setup(debug, debug_kernel);_setup(quiet, quiet_kernel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论