U-Boot中MAC地址设置及往内核中传递资料

U-Boot中MAC地址设置及往内核中传递资料

ID:39703575

大小:38.50 KB

页数:3页

时间:2019-07-09

U-Boot中MAC地址设置及往内核中传递资料_第1页
U-Boot中MAC地址设置及往内核中传递资料_第2页
U-Boot中MAC地址设置及往内核中传递资料_第3页
资源描述:

《U-Boot中MAC地址设置及往内核中传递资料》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、一、内核参数的传递U-Boot向Linux驱动传递参数的方式有两种,一为在系统启动的时候由bootloader传入,还有一种是将驱动编译成模块,将参数作为模块加载的参数传入。内核通过setup接口接受Bootloader传入的参数。方式如下:staticint__initparam_mac_setup(char*str){……}__setup(“mac=”,param_mac_setup);这样,当在Bootloader中指定“mac=00:2E:79:38:6D:4E”,系统在加载这个模块的时候,就会执行相应的param_mac_setup()函数,而传入给它的参数就是等号后面的物

2、理地址“00:2E:79:38:6D:4E”。这样,该函数就可以对它进行相应的处理。在U-Boot中,默认设置mac地址的参数为ethaddr,我们可以用过setenvethaddrMac地址来设置开发板的mac地址。二、bootm传递参数的方式在bootm执行的流程图中,可以看到会调用do_bootm_linux()在执行Linux内核,内核的起始地址如下:void(*theKernel)(intzero,intarch,uintparams);image_header_t*hdr=&header;      theKernel=(void(*)(int,int,uint))nto

3、hl(hdr->ih_ep);header是uImage的头部,通过头部,得到内核映像起始的执行地址,标识为theKernel。从中也可以看到,内核接受三个参数,第一个为0,第二个为系统的ID号,第三个是传入内核的参数。在do_bootm_linux()的最后,会跳到内核去执行:      theKernel(0,bd->bi_arch_number,bd->bi_boot_params);最后两个参数在board/smdk2410/smdk2410.c的board_init()中被初始化:      /*archnumberofSMDK2410-Board*/      gd->b

4、d->bi_arch_number=MACH_TYPE_SMDK2410;/*193*/      /*adressofbootparameters*/      gd->bd->bi_boot_params=0×30000100;可以看到,U-Boot传给内核的参数表存放在内存中起始偏移0×100的位置,这里只是指定了“指针”的位置,但还没初始化其中的值,这是在do_bootm_linux()中跳到内核前去完成的。值得注意的是,内核的默认运行地址的0×30008000,前面就是留给参数用的。所以一般不要将内核下载到该地址之前,以免冲掉了传给内核的参数。三、参数列表的构建#ifdef

5、ined(CONFIG_SETUP_MEMORY_TAGS)

6、

7、   defined(CONFIG_CMDLINE_TAG)

8、

9、   defined(CONFIG_INITRD_TAG)

10、

11、defined(CONFIG_SERIAL_TAG)      setup_start_tag(bd);#ifdefCONFIG_SERIAL_TAG      setup_serial_tag(¶ms);#endif#ifdefCONFIG_REVISION_TAG      setup_revision_tag(¶ms);#endif#ifdefCONFIG_SETUP_

12、MEMORY_TAGS      setup_memory_tags(bd);#endif#ifdefCONFIG_CMDLINE_TAG      setup_commandline_tag(bd,commandline);#endif#ifdefCONFIG_INITRD_TAG      if(initrd_start&&initrd_end)             setup_initrd_tag(bd,initrd_start,initrd_end);#endif#ifdefined(CONFIG_VFD)

13、

14、defined(CONFIG_LCD)      setup_

15、videolfb_tag((gd_t*)gd);#endif      setup_end_tag(bd);#endif四、解决U-Boot命令行中不能重新设置ethaddr的问题,经常会提示Can’toverwrite“ethaddr”common/cmd_nvedit.c中函数_do_setenv中找到#ifndefCONFIG_ENV_OVERWRITE/**EthernetAddressandserial#canbesetonlyonce,*ver

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

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

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