网站大量收购独家精品文档,联系QQ:2885784924

linux启动--启动参数处理.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux启动--启动参数处理

linux启动--启动参数处理 QQ:270428231 dragonnk@126.com 引导加载程序(U-Boot)传递给内核的参数是atags参数列表来完成的,在与体系结构相关的setup_arch( )函数中进行处理,而命令行参数作为参数列表中的一个成员,在setup_arch( )中内核只负责将其复制到指定全局数组中,进一步的处理由start_kernel()中的parse_early_param()函数完成。1 atags参数 atags参数为bootloader向内核传递参数的形式。参数由struct tag数组组成,每一项为一个tag结构。tag结构定义在arch/arm/include/uapi/asm/setup.h文件中,如下:struct tag {struct tag_header hdr;union {struct tag_corecore;struct tag_mem32mem;struct tag_videotextvideotext;struct tag_ramdiskramdisk;struct tag_initrdinitrd;struct tag_serialnrserialnr;struct tag_revisionrevision;struct tag_videolfbvideolfb;struct tag_cmdlinecmdline;struct tag_acornacorn;struct tag_memclkmemclk;} u;};一个struct tag由二个结构体组成,第一个是struct tag_header结构,定义如下:struct tag_header {__u32 size;__u32 tag;};该结构代表一个tag结构的开头,size表示tag结构(包含tag_header)的大小,以字(32bit)为单位。tag是表示是什么类型的struct tag结构。tag结构中第二项是一个联合体,表示某一类型的tag参数,每个类型有一个特殊的标记,就保存在struct tag_header的tag成员中。例如:#define ATAG_CORE0/* tag参数列表必须以此项开头 */struct tag_core {__u32 flags;/* bit 0 = read-only */__u32 pagesize;__u32 rootdev;};#define ATAG_MEM0truct tag_mem32 {__u32size;__u32start;/* physical start address */};/*struct tag_cmdline中保存的是命令行参数的字符串,虽然数组项中只有一项,但不影响,只要在相应的tag_header中size成员设置正确的值,即2+(lenof(cmdline)+3)/4 */#define ATAG_CMDLINE0truct tag_cmdline {charcmdline[1];/* this is the minimum size */}; /* tag参数列表必须以此项结束,ATAG_NONE参数tag_header中size成员也应设为0*/#define ATAG_NONE0 下面是tag参数列表的一个示意,可能不是很规范:.word 5,01,4096,0 /*ATAG_CORE*/.word 4,000 /*ATAG_MEM*/ .word 6,0.ascii “root=/dev/ram” /*ATAG_CMDLINE*/.aligned 4 .word 0,0,0,0 /*ATAG_NONE*/2 atags参数的处理 tag参数列表的起始地址在启动前存在r2寄存器中,在内核解压后,调用start_kernel()前保存在__mmap_switched_data结构体中,该结构体在arch/arm/kernel/head-common.S文件中,如下: .type__mmap_switched_data, %object__mmap_switched_data:.long__data_loc@ r4.long_sdata@ r5.long__bss_start@ r6.long_end@ r7.longprocessor_id@ r4.long__machine_arch_type@ r5机器类型编号.long__atags_pointer@ r6/*tag参数列表起始地址*/#

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档