parse_cmdline详解

parse_cmdline的主要作用是用来解析命令行参数,最终返回cmdline_p指针当中提供后期函数使用。其实现原理:一个无穷循环,首先来查找第一个空格,如果找到,来空格之前的字符串是否与early_param相匹配,如果是,则通过实现的功能函数来找出其体参数。如果找到字串的末尾或cmdline的长度大于默认长度,则跳出循环。

cmdline_p=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0 rootfstype=yaffs, from=

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

其实现代码如下:


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

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

        struct early_params {undefined
                   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, 所以这样求得的长度为包含的字符个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值