2022年Uboot如何向内核传递参数 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年Uboot如何向内核传递参数 .pdf》由会员分享,可在线阅读,更多相关《2022年Uboot如何向内核传递参数 .pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Uboot如何向内核传递参数一:启动参数的传递过程启动参数是包装在数据结构里的,在 linux kernel启动的时候,bootloader把这个数据结构拷贝到某个地址,在改动PC 跳向内核接口的同时,通过通用寄存器R2 来传递这个地址的值,下面这句话就是uboot跳向linux kernel的代码(bootm命令)theKernel(0,bd-bi_arch_number,bd-bi_boot_params);thekernel其实不是个函数,而是指向内核入口地址的指针,把它强行转化为带三个参数的函数指针,会把三个参数保存到通用寄存器中,实现了向 kernel传递信息的功能,在这个例子里,会
2、把 R0 赋值为 0,R1赋值为机器号R2 赋值为启动参数数据结构的首地址因此,要向内核传递参数很简单,只要把启动参数封装在linux预定好的数据结构里,拷贝到某个地址(一般约定俗成是内存首地址+100dex)二:启动参数的数据结构启动参数可保存在两种数据结构中,param_struct和 tag,前者是 2.4 内核用的,后者是 2.6 以后的内核更期望用的但是,到目前为止,2.6 的内核也可以兼容前一种结构,两种数据结构具体定义如下(arm cpu):struct param_struct union struct unsigned long page_size;/*0*/unsigned
3、 long nr_pages;/*4*/unsigned long ramdisk_size;/*8*/unsigned long flags;/*12*/#define FLAG_READONLY 1#define FLAG_RDLOAD 4#define FLAG_RDPROMPT 8 unsigned long rootdev;/*16*/unsigned long video_num_cols;/*20*/unsigned long video_num_rows;/*24*/unsigned long video_x;/*28*/unsigned long video_y;/*32*/
4、unsigned long memc_control_reg;/*36*/unsigned char sounddefault;/*40*/unsigned char adfsdrives;/*41*/unsigned char bytes_per_char_h;/*42*/unsigned char bytes_per_char_v;/*43*/unsigned long pages_in_bank4;/*44*/unsigned long pages_in_vram;/*60*/名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 4 页 -unsigned long initrd
5、_start;/*64*/unsigned long initrd_size;/*68*/unsigned long rd_start;/*72*/unsigned long system_rev;/*76*/unsigned long system_serial_low;/*80*/unsigned long system_serial_high;/*84*/unsigned long mem_fclk_21285;/*88*/s;char unused256;u1;union char paths8128;struct unsigned long magic;char n1024-size
6、of(unsigned long);s;u2;char commandlineCOMMAND_LINE_SIZE;param_struct只需要设置 cmmandline,u1.s.page_size,u1.s.nr_pages三个域,具体使用可参见下面的例子对于 tag 来说,在实际使用中是一个struct tag组成的列表,在 tag-tag_header中,一项是 u32 tag(重名,注意类型)其值用宏 ATAG_CORE,ATAG_MEM,ATAG_CMDLINE,ATAG_NONE等等来表示,此时下面 union就会使用与之相关的数据结构同时,规定 tag列表中第一项必须是ATAG
7、_CORE,最后一项必须是ATAG_NONE,比如在linux代码中,找到启动参数之后首先看 tag 列表中的第一项的tag-hdr.tag是否为 ATAG_CORE,如果不是,就会认为启动参数不是tag结构而是 param_struct 结构,然后调用函数来转换.在 tag-tag_header中,另一项是 u32 size,表示 tag 的大小,tag 组成列表的方式就是指针+size,实际使用中用tag_next(params).tag的具体使用见三中的例子struct tag struct tag_header hdr;union struct tag_core core;struct
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Uboot如何向内核传递参数 2022 Uboot 如何 内核 传递 参数
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内