Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1299693
  • 博文数量: 511
  • 博客积分: 967
  • 博客等级: 准尉
  • 技术积分: 2560
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-06 14:19
文章分类

全部博文(511)

文章存档

2016年(11)

2015年(61)

2014年(257)

2013年(63)

2012年(119)

分类: LINUX

2012-11-02 20:13:18

parse_cmdline的主要作用是用来解析命令行参数。

其实现原理:一个无穷循环,首先来查找第一个空格,如果找到,来空格之前的字符串是否与early_param相匹配,如果是,则通过实现的功能函数来找出其体参数。如果找到字串的末尾或cmdline的长度大于默认长度,则跳出循环。

其定义在:arch/armkernel/setup.c

其实现代码如下:


下面,对代码进行详细分析:

Line 439: extern struct early_params __early_begin, __early_end; [arch/arm/include/asm/setup.h ]

struct early_params {
const char *arg;
void (*fn)(char **p);
};

这两个参数定义在arch/arm/kernel/vmlinux.ld.S文件中。如下所示:

__early_begin = .;
*(.early_param.init)
__early_end = .;

其中能被插入此段的数据由:__early_param [ arch/arm/include/asm/setup.h ]来定义。

在Linux-2.6.30中,有如下字符被__early_param定义:

./arch/arm/kernel/setup.c:__early_param("mem=", early_mem);
./arch/arm/mm/init.c:__early_param("initrd=", early_initrd);
./arch/arm/mm/mmu.c:__early_param("cachepolicy=", early_cachepolicy);
./arch/arm/mm/mmu.c:__early_param("nocache", early_nocache);
./arch/arm/mm/mmu.c:__early_param("nowb", early_nowrite);
./arch/arm/mm/mmu.c:__early_param("ecc=", early_ecc);
./arch/arm/mm/mmu.c:__early_param("vmalloc=", early_vmalloc);

Line 443: strlen(p->arg);

arg 的定义是:const char *arg, 所以这样求得的长度为包含的字符个数

阅读(1368) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~