DSP

DAVINCI DM3730开发攻略——U-BOOT-2010.06的移植

2019-07-13 16:19发布

【原文:http://zjbintsystem.blog.51cto.com/964211/1399719 说来惭愧,又很长时间没更新文章了,本来这篇文章可以春节过来搞定的,结果春节回到公司,大客户一直要求抓紧时间设计DM3730平台的720P宽动态低照度相机产品,和另外两款多网口的DM3730产品的样机,南京老客户也在催DM3730 3G工业级板子样机,刚搞定两个老客户,又有两个新客户找我们设计DM3730新产品,一个是3G+WIFI 4CIF视频分析产品,另一个客户人脸识别车载方面的产品,整个桐烨科技都很忙。现在又不敢招人,毕竟冷酷的现实不得不面对:这个掌握无敌的宇宙真理国度经济不断下行,搞得第一季度我们也没有什么大单子,毕竟给客户做新样机是没什么钱赚的,都是培训客户。虽然现在是春天,但经济的寒冬才来临,通货膨胀造成公司运营成本飞涨,总感觉很累,有时自己很想静心钻进本公司新产品的研发去,但是客户那边有些关键的软件问题还得本人亲自解决,累也得坚持下去。 上篇文章介绍DM3730xloader的移植,这边介绍DM37302 boot阶段移植:u-boot-2010.06的移植,其实本人已经写过DM6446DM36X平台UBOOT的文章,但是由于平台和版本不一样,所以这里单独一篇,对有些人来说可能写得比较肤浅,请不要见笑,目的是完善自己的DM3730开发攻略,让有兴趣在这方面开发的生手提供一点点帮助。这个u-boot-2010.06源码存放的位置在《DAVINCIDM3730开发攻略——DVSDK4_03和双核CODEC机制介绍.doc》已经介绍。下面我们开始DM3730进行u-boot-2010.06的移植工作。
一、裁剪和交叉编译环境变量设置    u-boot-2010.06-psp04.02.00.07.sdk改名u-boot-2010.06,简洁;    1、总的Makefile修改
   对u-boot-2010.06/Makefile进行修改,    屏蔽第139140行:    #      examples/standalone    #      examples/api    然后把u-boot-2010.06/examples文件夹删除掉,简洁;
   第159行的修改为:    CROSS_COMPILE = arm-arago-linux-gnueabi-    这个就是DVSDK4——03自带的交叉编译工具,关于这个交叉编译工具,TI做得很全面了,提供很 多免费的应用程序LIB等等。
   第244行修改为:    #LIBS += api/libapi.a    屏蔽,然后把u-boot-2010.06/api,简洁,和项目不相关;
  2、涉及到交叉编译环境的u-boot-2010.06archarmconfig.mk24行改为:   CROSS_COMPILE =arm-arago-linux-gnueabi-
二:删除多余文件夹    这个DVSDK4_03自带的u-boot-2010.06-psp04.02.00.07.sdk很占空间,也比较乱。很不便于开发和备份,我们就是要把68M字节的变成20M字节简化版(bz2gz压缩的一般才3.4M的大小)。 注意,下面介绍的有些目录下是删除文件夹,有些是删除文件,不要搞混;    1、删除u-boot-2010.06/arch/除了arm文件夹外其他所有文件夹 其他非arm平台去掉,占空间,啰嗦。
   2、删除u-boot-2010.06/arch/armarm_cortexa8外的其他所有文件夹 DM3730属于arm cortex-A8架构(前几篇文章写成COTEX-A8了,系本人简写错误,有时本人直接跟客户就是ARM-A8的称呼)。DM6446DM6467DM6467TDM365DM368都是比较差劲的ARM926EJS架构。    3、删除u-boot-2010.06/arch/arm/arm_cortexa8/omap3文件外,删除其他文件夹, 就是删除mx51s5pc1xxti81xx文件夹,DM3730/DM3725芯片属于OMAP3平台,这里边还包括OMAP35302010年拿来做MOTO 智能手机的OMAP3630等芯片。    4、保留u-boot-2010.06/arch/arm/include/asm/下面的三个文件夹: arch-omaparch-omap3proc-armv,同这个目录下的那些.h文件不要删除,这一点要注意一下。
   5、删除u-boot-2010.06/board/ti外的其他所有文件夹;   UBOOT版本越来越高,新的厂商的板子不断加进去,很多,很烦,很占空间,对我们专注开发某个平台不好,所以我们接把不相关的板子平台去掉。
   6、删除u-boot-2010.06/board/tievm外的其他所有文件夹和文件; 同时TI文件夹也保留好几家第三方的板子,比如最典型的beagle xM,还有ti DM8148 DM8168的。我们直接使用ti evm板,或者参考其他ARM 学习板有关UBOOT移植的移植,重新起个个人的名字或公司名字,修改对应Makefile等等,太多文章介绍了。
   7、删除u-boot-2010.06/include/configsomap3_evm.h其他文件(注意这里是文件); 这个目录下的头文件和平台有关,DM3730使用的是omap3_evm.h,其他头文件可以干掉。    8、删除u-boot-2010.06/ nand_splonenand_ipl 目前在DAVINCI平台还没发觉用到onenand的东西,可以去掉;
   好了,经过上面的删除工作,这个u-boot-2010.06已经很简洁了,压缩备份很方便,当然还可以删除更简洁的,这里就不详细说了。
三:编译u-boot-2010.06 u-boot-2010.06/下生成build-u-boot-all.shbuild-u-boot-tmp.sh的两个文件: build-u-boot-all.sh内容为:
exportPATH=$PATH:/home/davinci/dm3730/dvsdk4_03/linux-devkit/bin: make distclean makeomap3_evm_config make cp u-boot.bindm3730_uboot.bin cp u-boot.bin/tftpboot/dm3730_uboot.bin
上面的会直接读取总的Makefile3000多行的: omap3_evm_config : unconfig       @$(MKCONFIG) $(@:_config=) armarm_cortexa8 evm ti omap3 编译参数,这样会自动去选择编译,u-boot-2010.06archarmcpuarm_cortexa8omap3里边的源码和u-boot-2010.06oard ievm里边的源码,并且指定include u-boot-2010.06/include/configs/omap3_evm.h的平台头文件。
build-u-boot-tmp.sh内容为
exportPATH=$PATH:/home/davinci/dm3730/dvsdk4_03/linux-devkit/bin: make cp u-boot.bindm3730_uboot.bin cp u-boot.bin/tftpboot/dm3730_uboot.bin
对这两个sh文件进行: chmod +x build-u-boot-all.sh chmod +x build-u-boot-tmp.sh 然后第一次或者每次做了make distclean动作后,都有先执行./ build-u-boot-all.sh,进行omap3_evm_config。以后改动改动源码的时候可以不要重复make distcleanmake omap3_evm_config,直接使用./build-u-boot-tmp.sh编译就可以了。build-u-boot-all.shbuild-u-boot-tmp.sh文件自动帮你copy文件到主机tftp server对应的目录/tftpboot/
四、修改移植 上面第三点已经讲明如何链接编译omap3_evm_config ,那么我们现在可以进行对应的移植和修改源码。 1、针对DM3730芯片,我们先从u-boot-2010.06/include/configs/omap3_evm.h这个文件修改,让他指向对应的芯片平台;
#defineCONFIG_ARMCORTEXA8  1     /* This is an ARM V7 CPU core */ #defineCONFIG_OMAP                            1     /*in a TI OMAP core */ #defineCONFIG_OMAP34XX           1     /* which is a 34XX */ #defineCONFIG_OMAP3430             1     /* which is in a 3430 */ #defineCONFIG_OMAP3_EVM        1     /* working with EVM*/
这个头文件最前面的宏定义讲明了DM3730所属的ARM架构,T也属于TI 公司 OMAP系列当中的OMAP34XX家族的芯片,OMAP3430-à3530--à3630-àDM3730是软件硬件架构一脉相承的芯片系列。我们选择TI EVM板子模式。
/* * select serial console configuration */ #if 1 #defineCONFIG_CONS_INDEX             3 #defineCONFIG_SYS_NS16550_COM3        OMAP34XX_UART3 #defineCONFIG_SERIAL3                3     /* UART3 on TY OMAP3 EVM */ #else #defineCONFIG_CONS_INDEX             2 #defineCONFIG_SYS_NS16550_COM2        OMAP34XX_UART2 #defineCONFIG_SERIAL2                2     /* UART2 on TY OMAP3 EVM TEST */ #endif TI EVM定义的LINUX调试串口指定是UART1DM3730DM6446一样一共有3UART,都可以用来做LINUX软件调试的串口,我们的板子也和其他公司一样使用UART3做为调试串口,而不是TIEVM指定的UART1,因为上篇文章《DAVINCIDM3730开发攻略——xload-1.51移植》提到过DM3730BOOT MODE,有种BOOT模式使用了SD-àNAND-àUART3,所以我们这里使用UART3。而往下看找到有关UBOOT串口调试的BOOTDELAY
/* Environmentinformation */ #defineCONFIG_BOOTDELAY 1 这个UBOOTdelay等待用户按键调试时间太长了,把10秒改成1秒,有些产品为了加快BOOT 时间,卖出去的产品不需要调试,也可以直接改为0
继续往下看, /* commands toinclude */ #include
这里边定义了很多CONFIG_CMD_XXX的功能,如果让UBOOT编译出来的文件比较小,可以使用#undef把某些不常用的功能屏蔽掉。
#defineCONFIG_CMD_EXT2           /* EXT2 Support               */ #defineCONFIG_CMD_FAT              /* FAT support                  */ #defineCONFIG_CMD_JFFS2    /* JFFS2 Support              */ #define CONFIG_CMD_MTDPARTS    /* Enable MTD parts commands */ #define CONFIG_MTD_DEVICE    /* needed for mtdparts commands */ #define MTDIDS_DEFAULT                   "nand0=nand" #define MTDPARTS_DEFAULT             "mtdparts=nand:256k(x-loader),"                                   "256k(u-boot-env),1280k(u-boot),"                                   "5m(kernel),-(fs)" 上面红 {MOD}字体是本人添加修改的,使能在UBOOT里边使用MTD分区。 同时我们打算使用256K字节做为u-boot 参数保存空间,偏移地址是x040000的地址,所以omap3_evm.h后面(320行左右的地方)提到的 #defineONENAND_ENV_OFFSET         0x00040000 /*environment starts here */ #defineSMNAND_ENV_OFFSET            0x00040000 /*environment starts here */ 改成上面的0x00040000
这里首先声明桐烨科技的DM3730板子NAND512M BYTEDDR也是512M BYTE,网口使用DM9000,不同公司的开发板估计有不同的配置,这个信息很重要,下面NAND分区定义和程序烧写都需要这了解这方面的信息。
然后到看到#define CONFIG_EXTRA_ENV_SETTINGS 的修改: 定义这个CONFIG_EXTRA_ENV_SETTINGS前,需要补充一些NAND 存放XLAODUBOOTKERNEL等等知识,本人在上篇《DAVINCI DM3730开发攻略——xload-1.51移植》提到UBOOT 编译处理的BIN文件存放在NAND FLASH的地方,这里再更详细描述一下:
//0x000000000000-0x000000040000: "X-Loader"(DM3730 xlaod存放在NAND的位置) //0x000000040000-0x000000080000: "U-Boot Env"(uboot 参数存放在NAND的位置) //0x000000080000-0x000000200000: "U-Boot"(uboot 本身存放在NAND的位置) //0x000000200000-0x000000C00000: "Kernel"(kernel存放在NAND的位置) //0x000000C00000-0x000008400000: "ubifs0"(主要的文件系统UBIFS存放在NAND的位置) //0x000008400000-0x00000FC00000: "ubifs1"(备用的UBIFS存放在NAND的位置,也可以不要) //0x00000FC00000-0x000010000000: "user data"(保存一些用户自己定义的数据) //loadaddr ==0x80300000TFTP 下载XLAOD,UBOOT,KERNELBIN文件到内存的起始偏移地址) //ubifs loadaddr== 0x81000000TFTP 下载比较大的UBIFSBIN文件到内存起始偏移地址) //u-boot codeaddress == 0x80E80000UBOOT本身存放到内存运行的偏移地址)

这是我们修改后的#define CONFIG_EXTRA_ENV_SETTINGS源码: #define CONFIG_EXTRA_ENV_SETTINGS       "loadaddr=0x80300000