文档介绍:Revised final draft November 26, 2020
UBoot中MAC地址设置及往内核中传递
一、内核参数的传递U-Boot向Linux驱动传递参数的方式有两种,一为在系统启动的时候由bor=MACH_TYPE_SMDK2410;/*193*//*adressofbootparameters*/可以看到,U-Boot传给内核的参数表存放在内存中起始偏移0×100的位置,这里只是指定了“指针”的位置,但还没初始化其中的值,这是在do_bootm_linux()中跳到内核前去完成的。
三、参数列表的构建#ifdefined(CONFIG_SETUP_MEMORY_TAGS)||\defined(CONFIG_CMDLINE_TAG)||\defined(CONFIG_INITRD_TAG)||\defined(CONFIG_SERIAL_TAG)setup_start_tag(bd);#ifdefCONFIG_SERIAL_TAGsetup_serial_tag(&params);#endif#ifdefCONFIG_REVISION_TAGsetup_revision_tag(&params);#endif
#ifdefCONFIG_SETUP_MEMORY_TAGS?setup_memory_tags(bd);#endif
#ifdefCONFIG_CMDLINE_TAG?setup_commandline_tag(bd,commandline);#endif
#ifdefCONFIG_INITRD_TAGif(initrd_start&&initrd_end)setup_initrd_tag(bd,initrd_start,initrd_end);#endif
#ifdefined(CONFIG_VFD)||defined(CONFIG_LCD)setup_videolfb_tag((gd_t*)gd);#endifsetup_end_tag(bd);#endif
四、解决U-Boot命令行中不能重新设置ethaddr的问题,经常会提示Can’toverwrite“ethaddr”common/
#ifndefCONFIG_ENV_OVERWRITE/**EthernetAddressandserial#canbesetonlyonce,*verisreadonly.*/#ifdefCONFIG_HAS_UID/*Allowserial#forcedoverwritewith0xdeaf4addflag*/if(((strcmp(name,“serial#”)==0)&&(flag!=0xdeaf4add))||#elseif((strcmp(name,“serial#”)==0)||#endif((strcmp(name,“ethaddr”)==0)
#ifdefined(CONFIG_OVERWRITE_ETHADDR_ONCE)&&defined(CONFIG_ETHADDR)&&(strcmp((char*)env_get_addr(oldval),MK_STR(CONFIG_ETHADDR))!=0)#endif/*