内核运行需要一定的运行的环境,所以在内核启动之前,由u-boot等启动程序来提供这部分的运行环境,这里讲讲u-boot准备好运行环境后,怎么给内核传递必须的参数。
传参的思想:将要传递的每一个参数封装成一个结构体,然后把这一个个结构体连续存储在内存的一片区域内,然后将这片区域的地址传递给内核,这样就可以完成传参。
u-boot中将这个结构体定义为tag,下面是tag的定义:
struct tag {
struct tag_header hdr;
union {
struct tag_core core;
struct tag_mem32 mem;
struct tag_videotext videotext;
struct tag_ramdisk ramdisk;
struct tag_initrd initrd;
struct tag_serialnr serialnr;
struct tag_revision revision;
struct tag_videolfb videolfb;
struct tag_cmdline cmdline;
/*
* Acorn specific
*/
struct tag_acorn acorn;
/*
* DC21285 specific
*/
struct tag_memclk memclk;
struct tag_mtdpart mtdpart_info;
} u;
};
里面的内容是一个结构体+一个共用体。先说说共用体,说明tag里面存储的内容仅且是共用体里面的内容,设计得十分巧妙。而上面一个结构体存储的是这个参数的信息。