bootloader与linux之间传参数
来源:互联网 发布:云服务器设计软件 编辑:程序博客网 时间:2024/06/09 17:34
2 ATAGS参数传递
2.1 结构图
2.2 数据结构
数据结构:
struct tag {
structtag_header hdr;
union{
structtag_core core;
structtag_mem32 mem;
structtag_videotext videotext;
structtag_ramdisk ramdisk;
structtag_initrd initrd;
structtag_serialnr serialnr;
structtag_revision revision;
structtag_videolfb videolfb;
structtag_cmdline cmdline;
/* Acorn specific */
structtag_acorn acorn;
/** DC21285 specific */
structtag_memclk memclk;
}u;
};
struct tag_header {
__u32 size;
__u32 tag;
} ;
2.3 说明
●Taglist 用来在 bootloader和 linux kernel之间传递参数
●Taglist地址由bootloader指定
●由bootloader负责填充Tag list列表内容
●通过 Tag size 以及当前tag 的位置来定位下一个 tag的位置
●数据结构在bootloader和linux中有完全一致的定义
●引导linux时,bootloader将Tag list地址指针传递给linux(传给linux的参数共3个,分别是0,machid,Tag list指针)
2.4 linux tag取值
# defineATAG_CORE 0x54410001
# define ATAG_MEM 0x54410002
# define ATAG_VIDEOTEXT 0x54410003
# define ATAG_RAMDISK 0x54410004
# defineATAG_INITRD 0x54410005
# define ATAG_INITRD2 0x54420005
# define ATAG_SERIAL 0x54410006
# define ATAG_REVISION 0x54410007
# define ATAG_VIDEOLFB 0x54410008
# define ATAG_CMDLINE 0x54410009
# define ATAG_ACORN 0x41000101
# define ATAG_MEMCLK 0x41000402
2.5 Tag list的解析
●linux的解析列表存放在.taglist.init固定段中
●每一项taglist的解析通过调用__tagtable( tag, fn)宏定义的方式给出
●每个tag table的表项就自动连接在了一起,而且存在于同一个段中
●在kernel中,将针对tag list中的每一项,在这个tag parser list中进行查找,如果有对应的处理项,则调用解析函数,于是就完成了参数的传递以及解析!
●可扩展,ATAG_宏定义和__tagtable( tag, fn)实现可以添加,bootloader需要增加对应的ATAG_宏定义和taglist内容
struct tagtable {
__u32 tag;
int ( * parse) ( const struct tag * ) ;
} ;
# define __tag __used __attribute__( ( __section__( ".taglist.init" )) )
# define __tagtable( tag, fn) /
static struct tagtable __tagtable_# # fn __tag = { tag, fn }
目前linux核心定义的ATAG解析项:
__tagtable( ATAG_CORE, parse_tag_core) ;
__tagtable( ATAG_MEM, parse_tag_mem32) ;
__tagtable( ATAG_VIDEOTEXT, parse_tag_videotext) ;
__tagtable( ATAG_RAMDISK, parse_tag_ramdisk) ;
__tagtable( ATAG_SERIAL, parse_tag_serialnr) ;
__tagtable( ATAG_REVISION, parse_tag_revision) ;
__tagtable( ATAG_CMDLINE, parse_tag_cmdline) ;
- bootloader与linux之间传参数
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- uboot与linux之间参数的传递
- Uboot与Linux之间的参数传递
- Uboot与Linux之间的参数传递
- linux启动 之 bootloader参数传递
- Bootloader与Kernel间参数传递机制
- bootloader与linux内核的约定
- I386中bootloader与kernel之间的信息交换
- Bootloader/Eboot与OS之间共享信息----BSP_ARGS数据结构
- BootLoader给Linux kernel传递的启动参数详解
- 转行智能控制的这些年(月无声智控事业部的前世今生)
- class中指向Data Members的指针
- C++ Applications
- js 城市三级联动
- textarea的disabled与readonly属性简介
- bootloader与linux之间传参数
- 创建自己的Repo Server
- 网站架构
- poj3687--Labeling Balls
- 零经验接手APP运营推广,聊聊这两个月我是怎么熬过来的
- web service 概念
- 网站架构参考
- 如何实现电商梦!
- oracle实现远程连接超简单;枚举与剪枝();PowerDesigner生成数据库代码注意里面的双引号,应该去掉