版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
u-boot修改移植开发知识梳理/****************************************************************************************************u-boot裁剪**/board >只留与扳机相关的文件夹cpu >只留与扳机相关的文件夹include >与架构无关的目录删除include/configs>只留架构相关的一个文件include/asm >删除与架构无关的目录./ >主目录lib开头与架构无关的目录删除,注意报libfdt留下/****************************************************************************************************makefile关键说明**/makeming2440_config流程:makemini2440_config-->mini2440_config : unconfig@$(MKCONFIG)$(@:_config=)armarm920tmini2440risecomms3c24x0-->mkconfigmini2440_config : unconfig@$(MKCONFIG)$(@:_config=)armarm920tmini2440risecomms3c24x0//$(A:patternA=patternB)。意思就是将A中patternA格式的字符用patternB来代替。回归$(@:_config),//@代表输入的参数,即:mini2440_config,patternA是_config,patternB是空的。说白了就是将mini2440_config的_config去掉。@$(MKCONFIG)$(@:_config=)armarm920tmini2440tekkamanninjas3c24x0//查找MKCONFIG,MKCONFIG就是uboot目录下的那个mkconfig这个文件,这条语句就是:运行mkconfig文件,并传递6个参数进去mkconfig文件:作用:建立include目录下的link目录(asm),include目录下创建confg.mk文件,创建config.h文件。APPEND=no #Default:CreatenewconfigfileBOARD_NAME=""#NametoprintinmakeoutputTARGETS=""while[$#-gt0];docase"$1"in--)shift;break;;-a)shift;APPEND=yes;;-n)shift;BOARD_NAME="${1%%_config}";shift;;-t)shift;TARGETS="`echo$1|sed's:_::g'`${TARGETS}";shift;;*)break;;esacdone//$#是脚本传递的参数的个数。-gt是>的意思。$1:第一个参数。shift:奸杀第一个参数,//将第二参数变成第一个……这段代码意思检查参数中,有无-a-n-t这样的参数,没有的话直接break。//很明显,makefile传递的6个参数,没有-a,-t,-n。直接break。["${BOARD_NAME}"]||BOARD_NAME="$1" //:["${BOARD_NAME}"]表示一个条件,BOARD_NAME!=NULL,||表示如果条件为假则运行后面的程序。同时&&表示如果条件为真,则运行后面的程序//BOARD_NAME等于传进来的第一个参数,即BOARD_NAME=mini2440[$#-lt4]&&exit1 //小于4个参数则退出[$#-gt6]&&exit1 //大于6个参数则退出if["${ARCH}"-a"${ARCH}"!="$2"];then //判断ARCH变量值是否为BULL,-a是and的意思,并且ARCH!=$2echo"Failed:\$ARCH=${ARCH},shouldbe'$2'for${BOARD_NAME}"1>&2exit1fiecho"Configuringfor${BOARD_NAME}board..."//建立asm连接//Createlinktoarchitecturespecificheaders//if["$SRCTREE"!="$OBJTREE"];then //都为null,相等,所以运行else后面mkdir-p${OBJTREE}/includemkdir-p${OBJTREE}/include2cd${OBJTREE}/include2rm-fasmln-s${SRCTREE}/include/asm-$2asmLNPREFIX="../../include2/asm/"cd../includerm-rfasm-$2rm-fasmmkdirasm-$2ln-sasm-$2asmelsecd./includerm-fasmln-sasm-$2asmfirm-fasm-$2/archif[-z"$6"-o"$6"="NULL"];then //-z的意思是判断字符串是否为""-o是或的意思,判断语句意思是$6==""或者$6==NULLln-s${LNPREFIX}arch-$3asm-$2/archelseln-s${LNPREFIX}arch-$6asm-$2/arch //asm-arm下建立连接文件arch,link到arch-s3c24x0fiif["$2"="arm"];thenrm-fasm-$2/procln-s${LNPREFIX}proc-armvasm-$2/procfi#把芯片信息输出到config.mk文件中#CreateincludeMake#echo"ARCH=$2">config.mkecho"CPU=$3">>config.mkecho"BOARD=$4">>config.mk["$5"]&&["$5"!="NULL"]&&echo"VENDOR=$5">>config.mk["$6"]&&["$6"!="NULL"]&&echo"SOC=$6">>config.mk#AssignboarddirectorytoBOARDIRvariableif[-z"$5"-o"$5"="NULL"];thenBOARDDIR=$4elseBOARDDIR=$5/$4fi/****************************************************************************************************u-boot支持go命令的方法*在cmd_boot.c文件中(没有就自己创建)增加以下内容*//*1、添加call_linux函数*/voidcall_linux(longa0,longa1,longa2){__asm__("movr1,#0\n""movr1,#7<<5\n" /*8segments*/"1:orrr3,r1,#63<<26\n" /*64entries*/"2:mcrp15,0,r3,c7,c14,2\n" /*clean&invalidateDindex*/"subsr3,r3,#1<<26\n""bcs2b\n" /*entries64to0*/"subsr1,r1,#1<<5\n""bcs1b\n" /*segments7to0*/"mcrp15,0,r1,c7,c5,0\n" /*invalidateIcache*/"mcrp15,0,r1,c7,c10,4\n" /*drainWB*/);__asm__("movr0,#0\n""mcrp15,0,r0,c7,c10,4\n"/*drainWB*/"mcrp15,0,r0,c8,c7,0\n"/*invalidateI&DTLBs*/);//以上的内容可以不要//r0、r1、r2三个寄存器的参数是传递到内核head.S文件中,r0:0,r1:体系结构号,r2地址__asm__("movr0,%0\n" //获取0号,也就是第一个(a0)的数据"movr1,#0x0c1\n" //查芯片相关资料,mini2440的为1999"movr2,%2\n" //启动地址mini2440=0x30008000"movip,#0\n""mcrp15,0,ip,c13,c0,0\n"/*zeroPID*/"mcrp15,0,ip,c7,c7,0\n"/*invalidateI,Dcaches*/"mcrp15,0,ip,c7,c10,4\n"/*drainwritebuffer*/"mcrp15,0,ip,c8,c7,0\n"/*invalidateI,DTLBs*/"mrcp15,0,ip,c1,c0,0\n"/*getcontrolregister*/"bicip,ip,#0x0001\n" /*disableMMU*/"mcrp15,0,ip,c1,c0,0\n"/*writecontrolregister*/"movpc,r2\n""nop\n""nop\n":/*nooutpus*/:"r"(a0),"r"(a1),"r"(a2));}/****************************************************************************2、添加setup_linux_param函数****************************************************************************/staticvoidsetup_linux_param(ulongparam_base){structparam_struct*params=(structparam_struct*)param_base;char*linux_cmd;//获取bootargs参数linux_cmd=getenv("bootargs");memset(params,0,sizeof(structparam_struct));params->u1.s.page_size=0x00001000; //DDR的页大小params->u1.s.nr_pages=(0x04000000>>12); //页数/*setlinuxcommandline*/memcpy(params->commandline,linux_cmd,strlen(linux_cmd)+1);}/****************************************************************************************************u-boot中MAC地址设置及往内核中传递**///1.解决uboot命令行中不能设置ethaddr的问题,经常会提示:Can'toverwrite"ethaddr":common/cmd_nvedit.c中函数_do_setenv中找到189#ifndefCONFIG_ENV_OVERWRITE190191/*192*EthernetAddressandserial#canbesetonlyonce,193*verisreadonly.194*/195#ifdefCONFIG_HAS_UID196/*Allowserial#forcedoverwritewith0xdeaf4addflag*/197if(((strcmp(name,"serial#")==0)&&(flag!=0xdeaf4add))||198#else199if((strcmp(name,"serial#")==0)||200#endif201((strcmp(name,"ethaddr")==0)202203#ifdefined(CONFIG_OVERWRITE_ETHADDR_ONCE)&&defined(CONFIG_ETHADDR)204&&(strcmp((char*)env_get_addr(oldval),MK_STR(CONFIG_ETHADDR))!=0)205#endif/*CONFIG_OVERWRITE_ETHADDR_ONCE&&CONFIG_ETHADDR*/206)){207printf("Can'toverwrite\"%s\"\n",name);208return1;209}210#endif把201行替换成(0即可;2.为了让uboot命令行中设置的参数ethaddr传递到内核,必须修改uboot和linux内核两个地方:(1)uboot修改:lib_arm/armlinux.c在247#ifdefCONFIG_CMDLINE_TAG248setup_commandline_tag(bd,commandline);下面添加如下语句:char*buf1=malloc(1024);sprintf(buf1,"%smac=%s",getenv("bootargs"),getenv("ethaddr"));setup_commandline_tag(bd,buf1);(2)linux内核修改:drivers/net/davinci_emac.cstaticintemac_eth_setup(void)1899{前面添加:staticchardavinci_mac_addr_uboot[20]="";1887staticint__initparam_mac_setup(char*str)1888{1889strncpy(davinci_mac_addr_uboot,str,sizeof(davinci_mac_addr_uboot));1890}1891__setup("mac=",param_mac_setup);并在函数emac_eth_setup内部语句printk("TIDaVinciEMAC:MACaddressis%s\n",ema
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年选拔乡镇领导班子考试(基本素质和能力)综合能力测试题及答案
- Gadofosveset-trisodium-MS-325-生命科学试剂-MCE
- 心理护理沟通技巧:建立治疗性关系的要素
- 小儿肺炎护理的应急预案
- 2026mba 面试题目及答案大全
- 2026java软件开发面试题及答案
- 2026年济源市法制局招考(劳务派遣)易考易错模拟试题(共500题)试卷后附参考答案
- 2026年泰安肥城市事业单位公开招聘工作人员专业增补(三)易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河南郑州巩义市部分委(局)引进事业单位工作人员100人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年河南省新乡市封丘县政府购买岗招聘100人易考易错模拟试题(共500题)试卷后附参考答案
- 上海市住宅物业管理规定实施细则
- 老年人能力评估师高级需求评估
- 2023非水反应型双组分聚氨酯灌浆材料
- 中小学计算机教室学生上机登记表
- 旅馆业突发事件应急处置预案
- 安全生产管理及人员名单
- 某钢厂热风炉炉体及框架结构安装施工方案
- 浮力实验说课课件
- GB/T 5269-2008传动与输送用双节距精密滚子链、附件和链轮
- GB/T 20145-2006灯和灯系统的光生物安全性
- GB/T 15596-2021塑料在玻璃过滤后太阳辐射、自然气候或实验室辐射源暴露后颜色和性能变化的测定
评论
0/150
提交评论