版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
UBoot中MAC地址设置及往内核中传达UBoot中MAC地址设置及往内核中传达7/7肅PAGE7蚂袆蒀膆螇薈膅螃肃螆袈莈蒆肀芅莃蒄蚆薀蕿蕿荿芅羂蚁蚆莂薆芈羁莅薁肂薆蝿螇肆腿蒅莄蒂蒆蒁肈袅螁薅羃袃莆罿艿袈聿蚅薂羀芇蚁芆蚇薁螄膁莁羃腿蒇莆衿袄螀螂袃袁虿葿莁袄蚄膃螃艿蚆膈蚀羄芃薄蚃羁袇羇节肄袂蚁薃蒈膈螅薀膄蒁肁蒃膀荿螈螈芄芄蒂蒃蚈莆薇莀莄袃UBoot中MAC地址设置及往内核中传达一、内核参数的传达
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()函数,而传入给它的参数就是等号后边的物理地址“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))ntohl(hdr->ih_ep);
header是uImage的头部,经过头部,获取内核映像初步的执行地址,表记为theKernel。从中也能够看到,内核接受
三个参数,第一个为0,第二个为系统的ID号,第三个是传入内核的参数。
在do_bootm_linux()的最后,会跳到内核去执行:
theKernel(0,bd->bi_arch_number,bd->bi_boot_params);
的board_init()中被初始化:
/*archnumberofSMDK2410-Board*/
gd->bd->bi_arch_number=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_TAG
setup_serial_tag(¶ms);
#endif
#ifdefCONFIG_REVISION_TAG
setup_revision_tag(¶ms);
#endif
#ifdefCONFIG_SETUP_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)||defined(CONFIG_LCD)
setup_videolfb_tag((gd_t*)gd);
#endif
setup_end_tag(bd);
#endif
四、解决U-Boot命令行中不能够重新设置ethaddr的问题,经常会提示Can’toverwrite“ethaddr”
中函数_do_setenv中找到
#ifndefCONFIG_ENV_OVERWRITE
/*
EthernetAddressandserial#canbesetonlyonce,
verisreadonly.
*/
#ifdefCONFIG_HAS_UID
/*Allowserial#forcedoverwritewith0xdeaf4addflag*/
if(((strcmp(name,“serial#”)==0)&&(flag!=0xdeaf4add))||#else
if((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/*CONFIG_OVERWRITE_ETHADDR_ONCE&&CONFIG_ETHADDR*/)){
printf(“Can’toverwrite”%s”n”,name);
return1;
}
#endif
把((strcmp(name,“ethaddr”)==替0)换成(0即可;
在#ifdefCONFIG_CMDLINE_TAG
setup_commandline_tag(bd,commandline);
下面增加以下语句:
char*buf1=malloc(1024);
sprintf(buf1,“%smac=%s”,getenv(“bootargs”),getenv(“ethaddr”));
setup_commandline_tag(bd,buf1);
staticintemac_eth_setup(void)
{
前面增加:
staticchardavinci_mac_addr_uboot[20]=“”;
staticint__initparam_mac_setup(char*str)
{
strncpy(davinci_mac_addr_uboot,str,sizeof(davinci_mac_addr_uboot));
}
__setup(“mac=”,param_mac_setup);
并在函数emac_eth_setup内部语句print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《 工程制图基础习题集 第2版》课件 第6章 机件表达(习题答案)
- 酒店管理就业方向撰写
- 脑出血业务查房专项考试试题
- 2026八年级道德与法治上册 国家利益领域
- 医院科室一线工作制度
- 医院麻醉责任制度范本
- 南通公司避雷工作制度
- 卫生所外科工作制度
- 卫生部精神药物管理制度
- 卫生院犬伤工作制度
- GB/T 10810.1-2025眼镜镜片第1部分:单焦和多焦
- 《金钥匙服务理念》课件
- 中国典籍英译概述课件
- 2024年6月浙江省高考生物试卷真题(含答案解析)
- 高中语文新课标必背古诗文72篇
- 水闸设计过水流量和水闸设计规范毕业论文
- 《国际市场营销》课程标准
- 小学道法6 人大代表为人民1课件
- 色盲检测图(俞自萍第六版)
- 以焦炉气为原料合成甲醇项目可行性研究报告
- 文胸基础知识培训专家讲座
评论
0/150
提交评论