搜索
您的当前位置:首页正文

uboot2016.07移植

来源:知库网
U-boot2016-07forJz2440

嘉木

启动流程比较简单,而且和以前的版本基本就没什么区别,改了下位置,接口名,不过分析的话还是从旧的版本来简单一点。一:添加单板

1.修改顶层makefileARCH=armCROSS_CONPILE=amr-linux-2.进入board/samsung/cpsmdk2410-rfluo2440cdluo2440mvsmdk2410.cluo2440.c修改makefile3.修改KconfigifTARGET_LUO2440configSYS_BOARDdefault\"luo2440\"configSYS_VENDORdefault\"samsung\"configSYS_SOCdefault\"s3c24x0\"configSYS_CONFIG_NAMEdefault\"luo2440\"endif4.修改MAINTAINERSSMDK2410BOARDM:DavidMüllerS:MaintainedF:board/samsung/luo2440/F:include/configs/luo2440.hF:configs/luo2440_defconfig5.cdinclude/configscpsmdk2410.hluo2440.h6.cdconfigscpsmdk2410_defconfigluo2440_defconfigvimluo2440defconfigCONFIG_TARGET_LUO2440=yCONFIG_SYS_PROMPT=\"LUO2440#\"7.makemenuconfig报错HOSTCCscripts/kconfig/mconf.oInfileincludedfromscripts/kconfig/mconf.c:23:0:scripts/kconfig/lxdialog/dialog.h:26:20:fatalerror:curses.h:没有那个文件或目录compilationterminated.scripts/Makefile.host:111:recipefortarget'scripts/kconfig/mconf.o'failedmake[1]:***[scripts/kconfig/mconf.o]Error1Makefile:479:recipefortarget'menuconfig'failedmake:***[menuconfig]Error新装的ubuntu缺少一些libsudoapt-getinstalllibncurses5-dev8.vimarch/arm/Kconfig添加configTARGET_LUO2440bool\"Supportluo2440\"selectCPU_ARM920Tsource\"board/samsung/luo2440/Kconfig\"9.makemenuconfigArchitectureselect(ARMarchitecture)------>[X]ARMarchitectureARMarchitecture------>targetselect(luo2440)到此添加单板完成,可以采用两种方式配置1.makeluo2440_defconfig2.采用9的方式生成.config后即可进行makeCCASLDboard/samsung/luo2440/luo2440.oboard/samsung/luo2440/lowlevel_init.oboard/samsung/luo2440/built-in.omake的时候看到此信息就表示添加成功总结:添加单板的过程可以参考doc/READ.kconfigTipstoadd/removeboards二:串口支持

根据韦东山讲解uboot启动过程分析{2.1setthecputoSVC32mode2.2turnoffthewatchdog2.3maskallIRQsbysettingallbitsintheINTMR2.4设置时钟比例2.5设置内存控制器2.6设置栈,调用C函数board_init_f2.7调用函数数组init_sequence里的各个函数2.7.1board_early_init_f:设置系统时钟、设置GPIO......2.8重定位代码:2.8.1从NORFLASH把代码复制到SDRAM2.8.2程序的链接地址是0,访问全局变量、静态变量、调用函数时是使\"基于0地址编译得到的地址\"现在把程序复制到了SDRAM需要修改代码,把\"基于0地址编译得到的地址\"改为新地址2.8.3程序里有些地址在链接时不能确定,要到运行前才能确定:fixabs2.9clear_bss2.10调用C函数board_init_r:第2阶段的代码}1.修改时钟在luo2440.c里面board_early_init_f注释掉对MPLL的设置因为会在start.s里面提前设置在start.s中删除/*FCLK:HCLK:PCLK=1:2:4*//*defaultFCLKis120MHz!*/ldrr0,=CLKDIVNmovr1,#3strr1,[r0]添加#defineMPLLCON0x4C0000040#defineS3C2440_MPLL400MHZ((0x5c<<12)|(0x01<<4)|(0x01<<0))#defineS3C2440_MPLL_400MHZ((0x5c<<12)|(0x01<<4)|(0x01))ldrr0,=0x4c000014//movr1,#0x03;//FCLK:HCLK:PCLK=1:2:4,HDIVN=1,PDIVN=1movr1,#0x05;//FCLK:HCLK:PCLK=1:4:8strr1,[r0]/*如果HDIVN非0,CPU的总线模式应该从“fastbusmode”变为“asynchronousbusmode”*/mrcp15,0,r1,c1,c0,0/*读出控制寄存器*/orrr1,r1,#0xc0000000/*设置为“asynchronousbusmode”*/mcrp15,0,r1,c1,c0,0/*写入控制寄存器*//*MPLLCON=S3C2440_MPLL_200MHZ*/ldrr0,=0x4c000004ldrr1,=S3C2440_MPLL_400MHZstrr1,[r0]/*启动ICACHE*/mrcp15,0,r0,c1,c0,0orrr0,r0,#(1<<12)mcrp15,0,r0,c1,c0,0@readcontrolreg@writeitback2.修改存储控制器在Lowlevel_init.s里面.long0x22011110.long0x00000700.long0x00000700.long0x00000700@BWSCON@BANKCON0@BANKCON1@BANKCON2.long.long.long.long.long.long.long.long.long0x000007000x000007000x000007000x000180050x000180050x008C07A30x000000B10x000000300x00000030@BANKCON3@BANKCON4@BANKCON5@BANKCON6@BANKCON7@REFRESH@BANKSIZE@MRSRB6@MRSRB7替换掉原来的参数下载到Norflash串口应该有输出,一般是乱码3.修改串口设置在board_f.c里面serial_initreturnget_current()->start();其中get_current()if(!(gd->flags&GD_FLG_RELOC))dev=default_serial_console();elseif(!serial_current)dev=default_serial_console();elsedev=serial_current;应该是走第一个分支default_serial_console();#ifdefined(CONFIG_SERIAL1)return&s3c24xx_serial0_device;#elifdefined(CONFIG_SERIAL2)return&s3c24xx_serial1_device;#elifdefined(CONFIG_SERIAL3)return&s3c24xx_serial2_device;#else#error\"CONFIG_SERIAL?missing.\"#endif这里走的就是第一个分支return&s3c24xx_serial0_device;搜索s3c24xx_serial0_device;得到DECLARE_S3C_SERIAL_FUNCTIONS(0);structserial_devices3c24xx_serial0_device=INIT_S3C_SERIAL_STRUCTURE(0,\"s3ser0\");下一步#defineDECLARE_S3C_SERIAL_FUNCTIONS(port)\\ints3serial##port##_init(void)\\{\\returnserial_init_dev(port);\\}\\所以串口的初始化应该就是在这里serial_init_dev_serial_setbrg(dev_index);reg=get_PCLK()/(16*gd->baudrate)-1;进入ulongget_PCLK(void){structs3c24x0_clock_power*clk_power=s3c24x0_get_base_clock_power();return(readl(&clk_power->clkdivn)&1)?get_HCLK()/2:get_HCLK();}进入ulongget_HCLK(void)问题出在这,由于没有定义CONFIG_S3C2440所以时钟获取错误所以在配置文件中定义此宏viminclude/configs/luo2440.h//#defineCONFIG_S3C2410/*specificallyaSAMSUNGS3C2410SoC*/#defineCONFIG_S3C2440/*specificallyaSAMSUNGS3C2440SoC*报错.arm-none-linux-gnueabi-ld:u-boot.lds:1:ignoringinvalidcharacter`#'inexpression删除//#defineCONFIG_S3C2410/*specificallyaSAMSUNGS3C2410SoC*/重新编译成功此时串口已经有输出U-Boot2016.07(Sep112016-13:53:24+0800)CPUID:32440001FCLK:400MHzHCLK:100MHzPCLK:50MHzDRAM:64MiBWARNING:CachesnotenabledFlash:0BytesNAND:0MiB***Warning-badCRC,usingdefaultenvironmentIn:serialOut:serialErr:serialNet:CS8900-0Error:CS8900-0addressnotset.LUO2440#此处存在一个问题,当设置CLKDIVN=0x03(400,200,100)时,串口无输出对应3_uboot.tar.bz2三:支持nand启动

支持nand启动强制设置链接地址CONFIG_SYS_TEXT_BASE这就是我们的链接地址链接的时候去掉-pie选项arch/arc/config.mk注释#LDFLAGS_u-boot+=-pie#ALL-y+=checkarmreloc此时编译程序会小很多//不注释掉这个会报错1.添加init.c,其中就是涉及的nand的初始化和读写修改makefile3.在luo2440.h中修改#defineCONFIG_SYS_TEXT_BASE内存是64m(0x34000000)(0x34000000-0x33f000000)=1m(目前的uboot编译出来是520k,大于了512k)2.在crt0.s中添加my_relocate:blnand_init_llmovr0,#00x33f00000ldrr1,=_TEXT_BASEldrr2,=__bss_startsubr2,r2,r1blcopy_code_to_sdramblclear_bssldrpc,=call_board_init_fcall_board_init_f:3:注释掉brelocate_code//codesize//4.修改链接脚本把start.slowlevel_init.sinit.c放在最前面在arch/arm/cpu/u-boot.lds中添加board/smasung/luo2440/built-in.o(.text*)这里不能是添加start.s(.text*)lowlevel_init.0(.text*)不然编译时会报多重定义的错误5.make成功,烧写到nand启动此时串口有输出,表明重定向成功,但是程序死掉了CPUID:32440001FCLK:400MHzHCLK:100MHzPCLK:50MHzDRAM:64MiBWARNING:CachesnotenabledH后面关于flash的输出没有所以程序应该死在了board_init_r中间并且是initr_caches到initr_flash之间由于定义了很多宏,所以init_sequence_r中很多函数并没有执行根据目前默认配置的情况,可以得到只有下面函数执行了initr_traceinitr_relocinitr_cachesinitr_reloc_global_datainitr_barrier,//initr_malloc,initr_console_record,initr_bootstage//board_initstdio_init_tables,initr_serial,initr_announcepower_init_boardinitr_flashinitr_nandinitr_envinitr_secondary_cpustdio_add_devices,initr_jumptable,console_init_rinterrupt_initinitr_enable_interruptstimer_initinitr_ethaddrinitr_netrun_main_loop//////deadbeforehere只要能到run_main_loop一般就是可以了这里应为本人没太看懂内存分布但是感觉应该是内存分布出错不然不会输出一部分,而且后面没有输出的部分也没有卡住的理由但是刚开始还是去尝试打印,看看死在哪个函数里是由于什么参数导致因为之前修改crt0.s中的时候直接注释了brelocate_code但是其中有些东西又不太明白,所以这一直担心这里设置gd会出问题所以想再后面函数中看是不是因为这里的gd设置不对,导致函数卡住但是结果不理想,并没有看出来于是想直接修改链接地址这里还和uboot的大小有一定关系因为这里修改了#defineCONFIG_SYS_TEXT_BASE0x33f80000比之前小了一半内存,能多打印一点东西CPUID:32440001FCLK:400MHzHCLK:100MHzPCLK:50MHzDRAM:64MiBWARNING:CachesnotenabledFlash:0BytesNAND:16MiB***Warning-badCRC,usingdefaultenvironmentIn:Out:Err:Net:serialserialserial0x33f38000再次修改CONFIG_SYS_TEXT_BASE分配给uboot800K的内存此时成功U-Boot2016.07(Sep122016-21:09:24+0800)CPUID:32440001FCLK:400MHzHCLK:100MHzPCLK:50MHzDRAM:64MiBWARNING:Cachesnotenabledinitr_barrierafterinitbarriermem_malloc_initbeforememsetbeforebin_relocthisisinlineinitmallocbootstageinit_serialpowerinitFlash:0BytesNAND:16MiB***Warning-badCRC,usingdefaultenvironmentIn:serialOut:serialErr:serialNet:CS8900-0Error:CS8900-0addressnotset.LUO2440#这里首先尝试的是1M(0x33f00000),输出:CPUID:32440001FCLK:400MHzHCLK:100MHzPCLK:50MHzDRAM:64MiBWARNING:Cachesnotenabled512k(0x33f80000)输出:CPUID:32440001FCLK:400MHzHCLK:100MHzPCLK:50MHzDRAM:64MiBWARNING:CachesnotenabledFlash:0BytesNAND:16MiB***Warning-badCRC,usingdefaultenvironmentIn:serialOut:serialErr:serialNet:720k(0x33f4c000)U-Boot2016.07(Sep122016-22:19:31+0800)CPUID:32440001FCLK:400MHzHCLK:100MHzPCLK:50MHzDRAM:64MiBWARNING:CachesnotenabledFlash:0BytesNAND:16MiB***Warning-badCRC,usingdefaultenvironmentIn:Out:Err:Net:serialserialserial600k(0x33f6a000)U-Boot2016.07(Sep122016-21:05:12+0800)CPUID:32440001FCLK:400MHzHCLK:100MHzPCLK:50MHzDRAM:64MiBWARNING:Cachesnotenabledinitr_barrierafterinitbarriermem_malloc_initbeforememsetbeforebin_relocthisisinlineinitmallocbootstageinit_serialpowerinitFlash:0BytesNAND:16MiB***Warning-badCRC,usingdefaultenvironmentIn:Out:Err:Net:serialserialserial800k(0x33f38000)输出正确四:支持nor操作

修改错误在board_r.c中,函数序列里面1.WARNING:Cachesnotenabledinitr_caches2.Flash:0Bytesinitr_flashflash_initnorflash的操作十分简单,和内存有一样的接口,只需要确定基地址和位宽就行了这里定义#define_DEBUG1查看调试信息JEDECPROBE:IDc222490fwcaddr00000000cmdff00ff16bitx16bitfwcaddr00000000cmd90009016bitx16bitfwcaddr00000000cmdff00ff16bitx16bit这里编译出来的uboot是520k左右,下到了Norflash,出现了和上一节支持nand启动时一样的问题,打印一部分内容这里应该还是和那个连接地址的设置有关具体原因不太清楚去掉DBUEG选项,编译出啦483k左右,又能正确运行所以根据大小可能适当调一下连接地址这里应该和uboot执行程序的大小没有什么关系因为之前设置1m不能运行,800k反而可以,720,512这些也不行c2厂家ID2249设备ID追踪到这debug(\"JEDECPROBE:ID%x%x%x\\n\info->manufacturer_id,info->device_id,info->device_id2);if(jedec_flash_match(info,info->start[0]))break;elseunmap_physmem((void*)info->start[0],查看数组staticconststructamd_flash_infojedec_table[]没有支持我们的Flash的,所以添加一项//添加对nor的支持MT29LV160DB{.mfr_id=(u16)MX_MANUFACT,.dev_id=AM29LV160DB,.name=\"JZ2440\.uaddr={//ulockaddrfornorflash[1]=MTD_UADDR_0x0555_0x02AA/*x16*/},.DevSize=SIZE_2MiB,.CmdSet=CFI_CMDSET_AMD_LEGACY,//P_ID_AMD_STD.NumEraseRegions=4,.regions={//根据手册得到ERASEINFO(16*1024,1),//16k1ERASEINFO(8*1024,2),//8k2ERASEINFO(32*1024,1),//32k1ERASEINFO(64*1024,31),//64k15}},再修改luo2440.h#defineCONFIG_SYS_MAX_FLASH_SECT(128)因为我们的山区数目已经超过了原本定义的19现在下载到norflash里面就能识别了进行简单测试flinfoeraseA0000AFFFFcp.b30000000A000010000md.b30000000md.bA0000LUO2440#cmp30000000a000010000wordat0x30010000(0xe5238072)!=wordat0x000b0000(0xffffffff)Totalof16384word(s)werethesame两次显示的数据是一样的,表明nor写成功,已经可以操作但是在nor里面不能识别nand的大小,nand里面不能识别Nor的大小3.***Warning-badCRC,usingdefaultenvironment现在内核里面搜索,再去反汇编里面查看得知应该是在initr_envset_default_envdefault_environment五:支持nand操作支持nandflash操作代码原本是根据2410设置的,所以这里我们需要根据2440的俱存器修改initr_nandnand_initnand_init_chip(i);board_nand_init时序问题修改为如下tacls=1;twrph0=4;twrph1=1;;#ifdefLUO2440#defineS3C2440_NFCONF_512BYTE#defineS3C2440_NFCONF_4STEP#defineS3C2440_NFCONF_INITECC#defineS3C2440_NFCONF_nFCE(1<<14)(1<<13)(1<<12)(1<<1)#defineS3C2440_NFCONF_TACLS(x)((x)<<12)#defineS3C2440_NFCONF_TWRPH0(x)((x)<<8)#defineS3C2440_NFCONF_TWRPH1(x)#endif((x)<<4)cfg|=S3C2440_NFCONF_TACLS(tacls-1);//bit12-13cfg|=S3C2440_NFCONF_TWRPH0(twrph0-1);//bi8-10cfg|=S3C2440_NFCONF_TWRPH1(twrph1-1);//bit4-6cfg=0;//enablenand,diableselect,initecccfg=(1<<0)|(1<<1)|(1<<4);writel(cfg,&nand_reg->nfcont);s3c24x0_hwcontrol:if(ctrl&NAND_CLE){writeb(cmd,&nand->nfcmd);}elseif(ctrl&NAND_ALE){writeb(cmd,&nand->nfaddr);}nand->select_chip=s3c2440_nand_select_chip;staticvoids3c2440_nand_select_chip(structmtd_info*mtd,intchipnr){inti;structs3c24x0_nand*nand_reg=s3c24x0_get_base_nand();writel(readl(&nand_reg->nfcont)&(~(1<<1)),&nand_reg->nfcont);for(i=0;i<10;i++);}luo2440.h#defineLUO2440编译烧写NAND:256MiB六:支持DM9000

支持DM90001.修改luo2440.h#defineCONFIG_ETHADDR#defineCONFIG_NETMASK#defineCONFIG_IPADDR#defineCONFIG_SERVERIP#define#define#define#define00:0c:29:4d:e4:f4255.255.255.0192.168.44.120192.168.44.128CONFIG_DRIVER_DM90001CONFIG_DM9000_BASE0x20000000//bank4DM9000_IOCONFIG_DM9000_BASEDM9000_DATA(CONFIG_DM9000_BASE+4)//setforcmdpin2.修改luo2440.c#ifdefCONFIG_DRIVER_DM9000rc=dm9000_initialize(bis);#endif编译下载Error:dm9000addressnotset.后面应该可以在环境变量中修改eth_getenv_enetaddr_by_index(base_name,eth_number,env_enetaddr);mac和ip可以在uboot启动之后设置setipsetserveip但是此时不能使用save保存,应为在nand上面没有指定环境变量的位置七:环境变量及yaffs

***Warning-badCRC,usingdefaultenvironment现在内核里面搜索,再去反汇编里面查看得知应该是在initr_envset_default_envdefault_environmentCONFIG_BOOTARGS就是uboot传递给内核的参数我们可以在luo2440.h里面进行定义#defineCONFIG_BOOTARGS\"console=ttySAC0root=/dev/mtdblock3rootfstype=jffs2\"设置控制台为串口1根文件系统在nand的block3CONFIG_BOOTCOMMAND#defineCONFIG_BOOTCOMMANDCONFIG_IPADDRCONFIG_SERVERIP#ifdefCONFIG_ETHADDR\"ethaddr=\"__stringify(CONFIG_ETHADDR)#endif添加这句话就可以解决之前dm9000的问题2.裁剪裁剪内容:/*************************************************************USBsupport(currentlyonlyworkswithD-cacheoff)************************************************************/#defineCONFIG_USB_OHCI#defineCONFIG_USB_OHCI_S3C24XX#defineCONFIG_USB_KEYBOARD#defineCONFIG_USB_STORAGE#defineCONFIG_DOS_PARTITION/*************************************************************RTC************************************************************/#defineCONFIG_RTC_S3C24X0uboot本身不需要对操作文件系统/**Filesystem*/#defineCONFIG_CMD_UBI#defineCONFIG_CMD_UBIFS\"nandread30000000kernel;bootm30000000\"\"\\0\"#defineCONFIG_CMD_MTDPARTS#defineCONFIG_MTD_DEVICE#defineCONFIG_MTD_PARTITIONS#defineCONFIG_YAFFS2#defineCONFIG_RBTREE编译出错do_date/u-boot-2016.07/cmd/date.c:65:undefinedreferenceto`rtc_reset'根据命令格式可以知道#defineCONFIG_CMD_DATE应该是这个宏去掉定义usb.c:240:undefinedreferenceto`submit_control_msg'注释掉luo2440_defconfig中的CONFIG_CMD_USB=y现在编译就已经小了一半左右了3.#defineCONFIG_ENV_IS_IN_NAND#defineCONFIG_ENV_OFFSET0x80000#defineCONFIG_ENV_SIZE0x20000//mustbeintertimeofoneblock#defineCONFIG_ENV_RANGECONFIG_ENV_SIZE#defineCONFIG_MTD_DEVICE#defineCONFIG_CMD_MTDPARTS#defineMTDIDS_DEFAULT\"nand0=LUO2440\"#defineMTDPARTS_DEFAULT\"mtdparts=LUO2440:512k(uboot),\"\\\"128k(params),\"\\\"3m(kernel),\"\\\"-(rootfs)\"添加run_command(\"mtdpartsdefault\0);在for(;;)main_loop();return0;前面现在又只能启动一部分,修改下面这句话#defineCONFIG_SYS_TEXT_BASE0x33f38000为#defineCONFIG_SYS_TEXT_BASE0x33f80000编译下载后可以启动,环境参数也有但是NANDreadfromoffset80000failed-74***Warning-readenv()failed,usingdefaultenvironment出现这个问题,刚开始怀疑是参数没有设置对但是检查够发现不对,nand也是可以读写的但是执行一次save之后再次重启就对了应该是由于第一次下载分区里面并没有东西,但是执行了读操作,所以在报错,在save之后重启就ok测试tftp30000000uImagenanderase.partkernelnandwrite30000000kernel$filesize成功支持yaffs文件系统luo2440.h添加#defineCONFIG_CMD_NAND_YAFFS在nand.c622行添加#ifdefCONFIG_CMD_NAND_YAFFS}elseif(!strcmp(s,\".yaffs\")){if(read){printf(\"Unknownnandcommandsuffix'%s'.\\n\s);return1;}ret=nand_write_skip_bad(mtd,off,&rwsize,NULL,maxsize,(u_char*)addr,WITH_YAFFS_OOB);#endifinclude/nand.h添加#defineWITH_YAFFS_OOB(1<<0)/*whetherwritewithyaffsformat.Thisflag*isa'mode'meaningitcannotbemixedwith*otherflags*/在nand_util.c中nand_write_skip_bad函数中#ifdefCONFIG_CMD_NAND_YAFFSif(flags&WITH_YAFFS_OOB){if(flags&~WITH_YAFFS_OOB)return-EINVAL;intpages;pages=mtd->erasesize/mtd->writesize;blocksize=(pages*mtd->oobsize)+mtd->erasesize;if(*length%(mtd->writesize+mtd->oobsize)){printf(\"Attempttowriteincompletepage\"\"inyaffsmode\\n\");return-EINVAL;}}else#endif{blocksize=mtd->erasesize;}注释掉truncated_write_size=write_size;#ifdefCONFIG_CMD_NAND_TRIMFFSif(flags&WITH_DROP_FFS)truncated_write_size=drop_ffs(mtd,p_buffer,&write_size);#endifrval=nand_write(mtd,offset,&truncated_write_size,p_buffer);if((flags&WITH_WR_VERIFY)&&!rval)rval=nand_verify(mtd,offset,truncated_write_size,p_buffer);offset+=write_size;p_buffer+=write_size;并且在此添加#ifdefCONFIG_CMD_NAND_YAFFSif(flags&WITH_YAFFS_OOB){intpage,pages;size_tpagesize=mtd>writesize;size_tpagesize_oob=pagesize+mtd>oobsize;structmtd_oob_opsops;ops.len=pagesize;ops.ooblen=mtd->oobsize;ops.mode=MTD_OPS_RAWops.ooboffs=0;pages=write_size/pagesize_oob;for(page=0;page_write_oob(mtd,offset,&ops);if(rval)break;offset+=pagesize;p_buffer+=pagesize_oob;}}else#endif{truncated_write_size=write_size;#ifdefCONFIG_CMD_NAND_TRIMFFSif(flags&WITH_DROP_FFS)truncated_write_size=drop_ffs(mtd,p_buffer,&write_size);#endifrval=nand_write(mtd,offset,&truncated_write_size,p_buffer);if((flags&WITH_WR_VERIFY)&&!rval)rval=nand_verify(mtd,offset,truncated_write_size,p_buffer);offset+=write_size;p_buffer+=write_size;}include\\linux\\mtd\\mtd.h添加/**ooboperationmodes**MTD_OOB_PLACE:oobdataareplacedatthegivenoffset*MTD_OOB_AUTO:oobdataareautomaticallyplacedatthefreeareas*whicharedefinedbytheecclayout*MTD_OOB_RAW:modetoreadrawdata+oobinonechunk.Theoobdata*isinsertedintothedata.Thatsarawimageofthe*flashcontents.*/typedefenum{MTD_OOB_PLACE,MTD_OOB_AUTO,MTD_OOB_RAW,}mtd_oob_mode_t;修改机器Id2.smdk2410.cboard_initgd->bd->bi_arch_number=MACH_TYPE_SMDK2410;所以需要修改machid为MACH_TYPE_S3C2440生成补丁文件diff-urNoldFilenewFile>Luo2440.patch总结:

移植过程主要参考了韦东山的毕业班视频,讲得确实比较详细。其次是从网络各方面参考而来,以及不少朋友的解答,yaffs的支持,是利用旧版本的代码,从以前的旧版本支持yaffs的,把关于yaffs的部分就行直接复制。新的uboot支持menuconfig进行裁剪配置,这里我采用比较简单的方法,直接从配置文件注释很多宏,如果仔细看过Makefile,.config,就知道这些宏就决定是否对一些文件进行编译,最后我的uboot大概有260k左右。之前看到有哥们的的裁剪是利用删除文件的方法,这点应该不太好,有些依赖关系容易错。其中我也有许多不太明白的地方,比如内存分布,着实没看明白,有些设置时碰运气,有些是照葫芦画瓢,一些根据自己分析进行设置。文档中的疑问如果有大神能够指点一下,请发送邮件3454005784@qq.com,嘉木。由于水平有限,不足之处,请见谅。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top