linux26启动流程分析

linux26启动流程分析

ID:22683090

大小:63.50 KB

页数:12页

时间:2018-10-30

linux26启动流程分析_第1页
linux26启动流程分析_第2页
linux26启动流程分析_第3页
linux26启动流程分析_第4页
linux26启动流程分析_第5页
资源描述:

《linux26启动流程分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、linux2.6启动流程分析linux2.6启动传递命令行分析内核在启动时可以传递一个字符串命令行,来控制内核启动的过程,例如:"console=ttyS2,115200mem=64M@0xA0000000"这里指定了控制台是串口2,波特率是115200,内存大小是64M,物理基地址是0xA0000000。另外我们可以在内核中定义一些全局变量,使用这些全局变量控制内核的配置,例如usb驱动中定义了staticintnousb;/*DisableUSBwhenbuiltintokernelimage*/这个

2、变量为1,则整个usb驱动不初始化,如果想将其置1,可在字符串命令行中添加nousb=1。在操作该变量之前,还要让系统知道该变量,方法是:__module_param_call("",nousb,param_set_bool,param_get_bool,&nousb,0444);__module_param_call这个宏定义在kernelincludelinuxmoduleparam.h原型如下:#define__module_param_call(prefix,name,set,get,arg

3、,perm)  staticchar__param_str_##name[]=prefix#name;  staticstructkernel_paramconst__param_##name   __attribute_used__          __attribute__((unused,__section__("__param"),aligned(sizeof(void*))))={__param_str_##name,perm,set,get,arg}它定义了一个kernel_par

4、am类型的变量,这个变量被放到了段__param,kernel_param结构体的定义是:structkernel_param{constchar*name;unsignedintperm;param_set_fnset;param_get_fnget;void*arg;};__param这个段的声明有些平台是在arch/../../vmlinux.lds.S,而大多数平台是放到kernelincludeasm-genericvmlinux.lds.h中,定义如下:__param:AT(ADDR(_

5、_param)-LOAD_OFFSET){     VMLINUX_SYMBOL(__start___param)=.;     *(__param)        VMLINUX_SYMBOL(__stop___param)=.;   }内核启动时就会对字符串命令进行解析,在kernelinitmain.c中,内核启动函数start_kernel中对外部数组进行了声明:externstructkernel_param__start___param[],__stop___param[];然后调

6、用函数parse_args对数组进行解析:parse_args("Bootingkernel",command_line,__start___param,     __stop___param-__start___param,     &unknown_bootoption);其中command_line就是要解析的字符串命令行,unknown_bootoption是函数指针,它用来获取指定参数的=右边的值。parse_args就会在数组中找到和nousb名称一样的kernel_param变量,并调用它的

7、set函数对其进行付值。内核启动地址的确定内核编译链接过程是依靠vmlinux.lds文件,以arm为例vmlinux.lds文件位于kernel/arch/arm/vmlinux.lds,但是该文件是由vmlinux-armv.lds.in生成的,根据编译选项的不同源文件还可以是vmlinux-armo.lds.in,vmlinux-armv-xip.lds.in。vmlinux-armv.lds的生成过程在kernel/arch/arm/Makefile中LD     =arch/arm/vmlinu

8、x-armv.lds.inarch/arm/vmlinux.lds:arch/arm/Makefile$(LD)$(wildcardinclude/config/cpu/32.h)$(wildcardinclude/config/cpu/26.h)$(wildcardinclude/config/arch/*.h)@echo'  Generating$@'@sed's/TEXTADDR/$(TEXTADDR)/;s/DA

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

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

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