系统运输
图像识别DM8127开发攻略——UBOOT移植说明
根据上一篇文章的介绍,大家对DM8127软件体系结构有着全局的认识吧。 以下,我们从开发的角度裁剪并移植最基本的BOOT软件包。 嵌入式开发者得到了新的板子,板子如何能跑自己编译移植的程序,这才是有价值的。 否则,直接把别人的BIN文件烧在板子上写就没意思了。
一. DM8127 UBOOT编译说明
DM8127的UBOOT版本为u-boot-2010.06,UBOOT代码与以前的DM6446-DM368-DM3730平台略有不同,以前的DM6446-DM368有UBL和ubot两种软件DM3730将XLOADR与UBOOT分开。当前的DM8127是一个包含UBOOTMIN和UBOOT的UBOOT软件包,通过宏进行编译以获得不同的BIN文件。 这里有三个大宏,用于区分不同的编译模式。 要编译UBOOTMIN、UBOOT命令和脚本,请参见对应于《图像识别DM8127开发攻略——RDK软件架构浅析及编译》中的Makefile和U-BOOT文件夹总数的u-boot\\\\Makefile文件的第3320行
a,# define config _ ti 814 x _ min _ config
编译得到ubootmin(u-boot.min.NAND或MLO );
与RDK总makefile相对应的编译脚本:
ubootmin :
$$make(ubootclean
$(make ) ubootbuildmake _ target=$ ( platform CFG ) $(SYSTEM_CFG ) min$ ) binary_mode ) ) ) ) )
$ $ make ( ubootbuildmake _ target=u-boot.ti
IFEQ($(binary_mode ),sd ) ) ) ) ) ) ) )。
CP$(ubootdir )/u-boot.min.$ ) binary_mode ) $(TFTP_HOME )/MLO
CP$($(UBOOTDIR )/u-boot.min.$ ) binary_mode ) $ ) ubootdir )/MLO
else
CP-f$(Ubootdir )/u-boot.min.$ ) binary_mode ) $(TFTP_HOME )/u-boot.min.$ ) binary_mode )
CP-f$($(UBOOTDIR )/u-boot.min.$(binary_mode ) $ ) ubootdir )/u-boot.min.$ ) binary _ mode.bk
CP-f$(ubootdir )/u-boot.min.$ ) binary_mode )/tftpboot/dm8127_min.bin
endif
我们的build_1_uboot-min-nand.sh通过调用上面的脚本来执行else,从而获得u-boot.min.NAND(DM8127_min.bin ) 这是nand FLASH的情况,目的是将其烧成板子
我们的build_1_uboot-min-sd.sh也调用上面的脚本执行ifeq($(binary_mode ),得到MLO、工厂生产、软件调试,在此刚做好的板子NAND没有程序,所以把这个
b,# define config _ ti 814 x _ opti _ config
编译得到u-boot.opti.nand也是类似于UBOOTMIN的宏编译,但编译后的BIN文件通过串行端口下载到板上启动。
与RDK总makefile相对应的编译脚本:
ubootopti :
$$make(ubootclean
$(make ) ubootbuildmake _ target=$ ( platform _ CFG ) _ipnc_opti_nand
$ $ make ( ubootbuildmake _ target=u-boot.ti
CP$(Ubootdir )/u-boot.opti.nand ) TFTP_home )/u-boot.opti.nand
我们的build_1_uboot-min-opt.sh调用并执行该脚本以获得u-boot.opti.nand。 这个通过PC端的串口软件下载到板子上。 部分产品设计时,由于特殊原因没有SD卡,可以使用该模式进行软件调试新生产的电路板。 要编译此模式,请注意修改名为u-boot/include/configs/ti 8148 _ ipnc.h的文件以阻止许多不必要的功能。 例如:
#undef CONFIG_CMD_BDI
#undef CONFIG_GZIP
#undef CONFIG_ZLIB
#undef CONFIG_CMD_LOADB
#undef CONFIG_CMD_LOADS
#undef CONFIG_CMD_NFS
#undef CONFIG_CMD_SETGETDCR
#undef CONFIG_CMD_XIMG
#undef CONFIG_CMD_MISC
#undef CONFIG_CMD_ITEST
#undef CONFIG_CMD_FPGA
#undef CONFIG_CMD_EDITENV
#undef CONFIG_BOOTM_NETBSD
#undef CONFIG_BOOTM_RTEMS
#undef CONFIG_CMD_MISC
#undef CONFIG_CMD_IMI
#undef CONFIG_CMD_ITEST
#undef CONFIG_CMD_SOURCE
#undef CONFIG_CMD_IMLS
#undef CONFIG_CMD_ECHO
用#undef修剪u-boot的功能,保留网络功能和NAND功能。 如果不修剪,得到的u-boot.opti.nand太大,无法在DM8127片内的RAM上工作。 u-boot.opti.nand和上述MLO都位于DM81227片内
那么,在调试新生产的板卡时,在板卡上选择串口BOOT模式( NAND缺省为其他BOOT模式),接通电源,如下图所示,使用串口工具,例如选择编译得到的u-boot.opti.nand,如果串口稳定,一般下载100%%u6B63,回车
在上图中,可能无法使用x调制解调器传输文件。 此外,Ymodem模式、波特率可以使用115200。
c、如果未选择CONFIG_TI814X_MIN_CONFIG和CONFIG_TI814X_OPTI_CONFIG,则编译正常的UBOOT并输入u-boot.bin ( DM 8127 )
与RDK总makefile相对应的编译脚本:
ubootbin :
$$make(ubootclean
$(make ) ubootbuildmake _ target=$ ( platform CFG ) $(SYSTEM_CFG ) config$ ) binary_mode ) ) ) ) )
$ $ make ( ubootbuildmake _ target=u-boot.ti
CP-f$(Ubootdir )/u-boot.bin ) TFTP_home )/u-boot.bin
CP-f$(Ubootdir )/u-boot.bin $ ( uboot dir )/dm8127_uboot.bin.bk
CP-f$(ubootdir )/u-boot.bin/tftpboot/DM 8127 _ uboot.bin
我们的build_2_UBOOT-all.sh通过调用上面的脚本,需要使用ubootclean来首先编译成功的uboot。 此外,我们的build_2_uboot-tmp.sh在上面的脚本中使用$(MAKE ) ubootclean
提示:请务必结合RDK总makefile和对应于U-BOOT文件夹的u-boot\\\\Makefile文件第3320行的内容来理解以上三种宏的编译模式。
二. UBOOT裁剪和移植
1、修改u-boot\\\\Makefile
在以前写的其他DAVINCI平台开发攻略中,我说过第一步是删除无关的文件。 这样,您就可以一目了然地看到此DM8127平台上有哪些相关文件和文件夹,以及没有哪些相关文件。
SUBDIRS=tools \\\\&; quot;
#examples/standalone \\\\( (不需要口罩) ) ) ) ) ) ) ) )。
#examples/api (不需要口罩) )
……
#LIBS=api/libapi.a (掩码) ) ) ) ) ) ) ) ) ) )。
2 .返回u-boot目录,删除nand_spl和onenand_ipl文件夹。
3、只保留include/configs/ti8148_ipnc.h,其他全部删除。
4、arch只保存arm文件
arm/cpu文件中仅保留arm_cortexa8
只是保留在arm_cortexa8文件中
arch/arm/Include/asm裁剪的屏幕截图如下图所示。
5、board文件夹只保留ti文件夹,ti下只保留ti8148_ipnc
经过以上几个步骤的暴力删除,DM8127平台的UBOOT变得非常简洁,保存备份非常方便。
6、u-boot/include/configs/ti 8148 _ ipnc.h重点修改
初学者为了玩一个DEMO棋盘,棋盘必须离开程序,但实际上大部分移植工作都在这个文件中进行了修改,其他外围设备驱动初始化并不那么着急。 请等待DEMO板成熟,例如使用新的DDR3、NAND FLASH、网格芯片等,然后开发自己设计的板。
以下,直接加载本公司的控制板u-boot源代码对的/include/configs/ti8148_ipnc.h进行阶段性分析。
#ifndef __CONFIG_TI8148_IPNC_H
#define __CONFIG_TI8148_IPNC_H
/
# define config _ ti 814 x _ no _ runtime _ pg _ detect
/
/Display CPU info /
#define CONFIG_DISPLAY_CPUINFO 1(允许串行端口打印CPU信息) ) ) ) ) ) ) ) ) ) ) )。
/In the 1st stage we have just 110K,so cut down wherever possible */
#ifdef CONFIG_TI814X_MIN_CONFIG ( )使用make ubootmin编译其中的定义) )。
/enable d-cache only on 2nd stage /
#define CONFIG_SYS_DCACHE_OFF
# define config _ cmd _ memory/form test /
# define config _ cmd _ misc/miscfunctionslikesleepetc/( (支持类似sleep 1的脚本命令) )
#undefconfig_gzip(ubootmin不需要过多的其他功能,由#undef处理) ) )。
#undef CONFIG_ZLIB
#undef CONFIG_SYS_HUSH_PARSER
#define CONFIG_CMD_LOADB/loadb /
#define CONFIG_CMD_LOADY/loady /
#define CONFIG_SETUP_PLL
# define config _ ti 814 x _ config _ DDR (只有在uboot min中初始化DDR3才能运行uboot ) ) ) ) ) ) ) ) ) ) )。
#define CONFIG_TI814X_EVM_DDR3
# define config _ env _ size0x 400 ( uboot min也有自己的boot参数(字节数较少) ) ) ) ) ) ) ) ) ) ) ) )。
# define config _ sys _ malloc _ len ( config _ env _ size (8* 1024 ) )
#defineconfig_sys_prompt&; #039; ti-min#&; #039; ( ubootmin命令行,但通常仅用于开发调试)
/settonegativevaluefornoautoboot /
# define config _ boot delay0( ubootmin为开发调试1,uboot min稳定后产品化为0 ) ) )。
#ifdefined(config_SPI_boot )/Autoload the 2nd stage from SPI /
# error1(如果uboot min不需要SPI BOOT,则不在其中编译) ) )。
#define CONFIG_SPI 1
# if defined ( config _ ti81 xx _ pcie _ boot ) )。
# define config _ cmdline _ tag1/enablepassingofatags /
# define config _ setup _ memory _ tags 1
# define config _ initrd _ tag1/requiredforramdisksupport /
#define CONFIG_CMD_SOURCE
# define config _ extra _ env _ settings\\ & amp; quot;
&; #039; verify=yes\\\\0&; #039; \\\\&; quot;
&; #039; boot cmd=source0x 80400000\\\& amp; quot; 0&; #039; \\\\&; quot;
&; #039; &; #039;
/usercanoverridedefaultsizeconfigurationhere。
itwillonlycomeineffectifti 81xx _ no _ pin _ gpmc
isdefinedininclude/ASM/arch/pcie.h
*/
# define config _ bar1_ 32 (0x 1000000 ull ) )。
# define config _ bar2_ 32 (0x 800000 ull ) )。
#defineconfig_bar3_32(0xffull ) )。
# define config _ bar4_ 32 (0x 1001 ull ) )。
# define config _ reg2_ 64 (0x 1000000 ull ) )。
# define config _ reg4_ 64 (0x 2000000 ull ) )。
# else//( config _ ti81 xx _ pcie _ boot ) (如果ubootmin不需要PCIE BOOT,则不在其中编译) ) )。
# define config _ extra _ env _ settings\\ & amp; quot;
&; #039; verify=yes\\\\0&; #039; \\\\&; quot;
&; #039; bootcmd=sf probe 0; sf read0x810000000x200000x40000; go0x81000000\\\\0&; #039; \\\\&; quot;
# endif//( config _ ti81xx _ pcie _ boot ) ) )。
#elifdefined(config_NAND_boot )/Autoload the 2nd stage from NAND /
//error2//built:build _1_ uboot-min-NAND.sh sleep1( uboot min需要NAND BOOT )。 请务必编译) )。
#define CONFIG_NAND 1
# define config _ extra _ env _ settings\\ & amp; quot;
&; #039; verify=yes\\\\0&; #039; \\\\&; quot;
&; #039; boot cmd=MW.b0x 810000000 x 00x 20000; NAND read0x 81000000 x 200000 x 40000; go0x81000000\\\\0&; #039; \\\\&; quot;
( uBOOTmin存储在0x0—0x20000空间中,uboot存储在0x20000—0x180000中。 其中,ubootmin跳过uboot,读取NAND闪存的uboot并放在DDR3地址0x81000000,用go命令进行boot )
#elifdefined(config_SD_boot )/Autoload the 2nd stage from SD /
//error3//built:build _1_ uboot-min-SD (如果uboot min需要SD BOOT,则为调试模式和生产模式,进行编译) )
#define CONFIG_MMC 1
# define config _ extra _ env _ settings\\ & amp; quot;
&; #039; verify=yes\\\\0&; #039; \\\\&; quot;
&; #039; bootcmd=mmc rescan 0; fat load MMC00x 80800000 u-boot.bin; go0x80800000\\\\0&; #039; \\\\&; quot;
( ubootmin从SD卡中读取u-boot.bin后开始跑) )。
#elifdefined(config_uart_boot )/stop in the min prompt /
# define config _ extra _ env _ settings\\ & amp; quot;
&; #039; verify=yes\\\\0&; #039; \\\\&; quot;
&; #039; bootcmd=\\\&; quot; 0&; #039; \\&; quot;
#elifdefined(config_eth_boot )/Auto load 2nd stage from server /
# define config _ extra _ env _ settings\\ & amp; quot;
&; #039; verify=yes\\\\0&; #039; \\\\&; quot;
&; #039; bootcmd=setenv autoload no; HCP; tftp0x81000000 u-boot.bin; go0x81000000\\\\0&; #039;
# endif//defined ( config _ SPI _ boot ) ) ) ) ) ) )。
# elif defined ( config _ ti 814 x _ opti _ config )/Optimized code /)需要此编译宏才能适应本文前面介绍的opti串行下载模式
#include config_cmd_default.h ( )此. h中包含的某些宏定义可以屏蔽) )。
# define config _ zero _ boot delay _ check
#define CONFIG_ENV_SIZE0x2000
# define config _ sys _ malloc _ len ( config _ env _ size ( 321024 ) ) ) ) ) ) ) ) ) ) ) ) )。
#define CONFIG_ENV_OVERWRITE
#define CONFIG_SYS_LONGHELP
#defineconfig_sys_prompt&; #039; ti8127_opti#&; #039;
# define config _ cmdline _ tag1/enablepassingofatags /
# define config _ setup _ memory _ tags 1
# define config _ initrd _ tag1/requiredforramdisksupport /
# define config _ boot delay3/settonegativevaluefornoautoboot * /
#define CONFIG_NAND 1
#define CONFIG_SETUP_PLL
# define config _ ti 814 x _ config _ DDR
#define CONFIG_TI814X_EVM_DDR3
#define CONFIG_SYS_DCACHE_OFF
#define CONFIG_SYS_ICACHE_OFF
#define CONFIG_CMD_BDI/bdinfo /
#define CONFIG_CMD_BOOTD/bootd /
# define config _ cmd _ console/con info /
# define config _ cmd _ echo/echo arguments /
# define config _ cmd _ editenv/editenv /
# define config _ cmd _ FPGA/fpgaconfigurationsupport /
#define CONFIG_CMD_IMI/iminfo /
# define config _ cmd _ itest/integer ( and string ) test/
#ifndef CONFIG_SYS_NO_FLASH
#define CONFIG_CMD_FLASH/flinfo、erase、protect /
# define config _ cmd _ imls/listallfoundimages /
#endif
#define CONFIG_CMD_LOADB/loadb /
#define CONFIG_CMD_LOADS/loads /
# define config _ cmd _ memory/mdmmnmwcpcmpcrcbaseloopmtest /
# define config _ cmd _ misc/miscfunctionslikesleepetc /
#define CONFIG_CMD_NET/bootp、tftpboot、rarpboot /
# define config _ cmd _ NFS/NFS support /
# define config _ cmd _ run/runcommandinenvvariable /
# define config _ cmd _ saveenv/saveenv /
# define config _ cmd _ setgetdcr/dcrsupporton 4xx /
#defineconfig_cmd_source/&; #039; 源& amp; #039; 命令支持/
# define config _ cmd _ ximg/loadpartofmultiimage /
#undef CONFIG_CMD_BDI
#undef CONFIG_GZIP
#undef CONFIG_ZLIB
#undef CONFIG_CMD_LOADB
#undef CONFIG_CMD_LOADS
#undef CONFIG_CMD_NFS
#undef CONFIG_CMD_SETGETDCR
#undef CONFIG_CMD_XIMG
#undef CONFIG_CMD_MISC
#undef CONFIG_CMD_ITEST
#undef CONFIG_CMD_FPGA
#undef CONFIG_CMD_EDITENV
#undef CONFIG_BOOTM_NETBSD
#undef CONFIG_BOOTM_RTEMS
#undef CONFIG_CMD_MISC
#undef CONFIG_CMD_IMI
#undef CONFIG_CMD_ITEST
#undef CONFIG_CMD_SOURCE
#undef CONFIG_CMD_IMLS
#undef CONFIG_CMD_ECHO
(其实上面的代码中有多余的东西。 因为后面的#undef取消了前面定义的宏,所以本人不想在这里破坏TI RDK的体系结构,所以请让他们理解这个过程。 在OPTI模式下编译的BIN也在内部RAM中工作,所以必须修整不需要的UBOOT功能,如果TFTP网络只保留烧毁NAND FLASH的功能就OK了)
# define config _ extra _ env _ settings\\ & amp; quot;
&; #039; verify=no\\\\&; quot; 0&; #039; \\&; quot;
&; #039; bootdelay=0\\\\0&; #039; \\\\&; quot;
&; #039; bootfile=uImage\\\\0&; #039; \\\\&; quot;
&; #039; loadaddr=0x81000000\\\\\&; quot; 0&; #039; \\\&; quot;
&; #039; bootargs=console=ttyo 0,15200 n8mem=256 mnotifyk.vpssm3_ sva=0xbf 900000 VRAM=50m ubi.MTD=4root=u bi0:rootfssrem
&; #039; eraseall=nand erase\\\\0&; #039; \\\\&; quot;
&; #039; uboot _ TFTP=TFTP0x 81000000 DM 8127 _ uboot.bin; go0x81000000 \\\\0&; #039; \\\\&; quot;
# define config _ boot command\\\& amp; quot;
&; #039; nboot 80007FC0 00x280000; bootm 80007FC0&; #039;
(本人并不使用该OPTI模式的UBOOT,而是使用因特网TFTP下载并执行UBOOT,将写入的任务交给这个新执行的dm8127_uboot.bin )
# else//config _ ti 814 x _ min _ config ( )以下定义是编译普通UBOOT宏,许多工作将通过以下方式完成) )。
#include config_cmd_default.h
#define CONFIG_SERIAL_TAG 1
#define CONFIG_REVISION_TAG 1
# define config _ skip _ low level _ init/1 ststagewouldhavedonethebasicinit /
#defineconfig_env_size0x20000(1 (单个块中的UBOOT参数:保存bootargs ( ) ) )。
# define config _ sys _ malloc _ len ( config _ env _ size ( 321024 ) ) ) ) ) ) ) ) ) ) ) ) )。
#define CONFIG_ENV_OVERWRITE
#define CONFIG_SYS_LONGHELP
#defineconfig_sys_prompt&; #039; ti8127_ipnc#&; #039;
# define config _ sys _ hush _ parser/usehushparsertoallowcommandparsing /
# define config _ sys _ prompt _ hush _ PS2 & amp; #039; &; #039;
# define config _ cmdline _ tag1/enablepassingofatags/( )支持从UBOOT向内核传输参数) ) ) ) ) ) ) ) ) )。
# define config _ setup _ memory _ tags 1
# define config _ initrd _ tag1/requiredforramdisksupport /
# define config _ boot delay1/settonegativevaluefornoautoboot /
# define config _ cmd _ autotest/for autotest /
/By default,2nd stage will have MMC,NAND,SPI and I2C support */
#define CONFIG_MMC 1
#define CONFIG_NAND 1
#define CONFIG_SPI 1
#define CONFIG_I2C 1
# define config _ extra _ env _ settings\\ & amp; quot;
&; #039; verify=yes\\\\0&; #039; \\\\&; quot;
&; #039; bootfile=uImage\\\\0&; #039; \\\\&; quot;
&; #039; ramdisk_file=ramdisk.gz\\\\&; quot; 0&; #039; \\\&; quot;
&; #039; loadaddr=0x81000000\\\\\&; quot; 0&; #039; \\\&; quot;
&; #039; script_addr=0x80900000\\\\\&; quot; 0&; #039; \\\&; quot;
&; #039; loadbootscript=fatloadmmc0$ { script _ addr } boot.SCR\\ & amp; quot; 0&; #039; \\\&; quot;
&; #039; boot script=echorunningbootscriptfrommmc/sdtosettheenv…; &; #039; \\\
&; #039; source ${script_addr}\\\\0&; #039; \\\\&; quot;
&; #039; ubifsargs=setenvbootargsconsole=ttyo 0,115200 n8mem=80 mnotifyk.vpssm3_ sva=0xbfd 0000 VRAM=4m & amp; #039; \\\&; quot;
&; #039; cm emk.phys _ start=0x 85000000 cm emk.phys _ end=0x 890000000 cm emk.allow overlap=1early printk & amp; #039; \\&; quot;
&; #039; ip=${ipaddr} &; #039; \\\\&; quot;
&; #039; rootfs type=ubifsroot=u bi0:rootfs init=/init ubi.MTD=5,2048 & amp; #039; \\\\&; quot;
&; #039; rootwait=1rwlpj=4997120\\\\&; quot; 0&; #039; \\\\&; quot;
&; #039; NFS args=setenvbootargsconsole=ttyo 0,115200 n8mem=80 mnotifyk.vpssm3_ sva=0xbfd 0000 VRAM=4MCM emk.phys _ star rar
&; #039; ip=${ipaddr} &; #039; \\\\&; quot;
&; #039; root=/dev/nfsrwnfsroot=$ { server IP }:/home/da Vinci/DM 8127/v3.8.0/source/ipnc _ rdk/target/file er
&; #039; squashfs args=setenvbootargsconsole=ttyo 0,15200 n8mem=80 mnotifyk.vpssm3_ sva=0xbfd 0000 VRAM=4MCM emk.phys _ sttem
&; #039; ip=${ipaddr} &; #039; \\\\&; quot;
&; #039; noinitrdrootfstype=squashfs root=/dev/MTD block4\\& amp; quot; 0&; #039; \\\&; quot;
&; #039; eraseall=nand erase\\\\0&; #039; \\\\&; quot;
&; #039; erase _ env=NAND erase 18000040000\\\& amp; quot; 0&; #039; \\\&; quot;
&; #039; tftp_boot=ipnc_ff_init 1; tftpboot0x 81000000 DM 8127 _ kernel.bin; bootm\\\\&; quot; 0&; #039; \&; quot;
&; #039; nfsboot=ipnc_ff_init 1; run nfsargs; NAND read $ { load addr } 1c 0000400000; bootm ${loadaddr}\\\\0&; #039; \\\\&; quot;
&; #039; userboot=ipnc_ff_init 1; NAND read $ { load addr } 1c 0000400000; bootm ${loadaddr}\\\\0&; #039; \\\\&; quot;
&; #039; squashfsboot=run squashfsargs; ipnc_ff_init 1; NAND read $ { load addr } 1c 0000400000; bootm ${loadaddr}\\\\0&; #039; \\\\&; quot;
&; #039; ubifsboot=ipnc_ff_init 1; run ubifsargs; NAND read $ { load addr } 1c 0000400000; bootm ${loadaddr}\\\\0&; #039; \\\\&; quot;
&; #039; uboot_tftp=ipnc_ff_init 1; tftp0x81000000 dm8127_uboot.bin; go0x81000000\\\\0&; #039; \\\\&; quot;
&; #039; update min=MW.b0x 81000000 xff0x 20000; tftp0x81000000 dm8127_min.bin; nand erase0x00x20000; NAND write.i0x 810000000 x 020000\\\& amp; quot; 0&; #039; \\\&; quot;
&; #039; update uboot=MW.b0x 810000000 xff0x 40000; tftp0x81000000 dm8127_uboot.bin; nand erase 20000 160000; NAND write.i0x 81000000020000 $ { filesize }\\0& amp; #039; \\\&; quot;
&; #039; update kernel=TFTP0x 81000000 DM 8127 _ kernel.bin; nand erase 1C0000 640000; NAND write.i0x 810000001 c 0000 $ { filesize }\\0& amp; #039; \\\&; quot;
&; #039; updatebasefs=TFTP0x 81000000 DM 8127 _ base fs.bin; nand erase 800000 2300000; NAND write.i0x 81000000800000 $ { filesize }\\0& amp; #039; \\\&; quot;
&; #039; updateubifs=TFTP0x 81000000 DM 8127 _ ubi fs.bin; nand erase 2B00000 6E00000; NAND write.i0x 810000002 b 00000 $ { filesize }\\0& amp; #039; \\\\&; quot;
&; #039; &; #039;
#defineconfig_bootcommand&; #039; runsquashfsboot&; #039; /orrunubifsboot/
(这里将加电UBOOT定义为使用run ubifsboot或run nfsboot或run userboot,可以在命令行中使用:
setenv bootcmd‘runuserboot’; saveenv选择默认的通电文件系统模式)
#define CONFIG_BOOTARGS \\\\&; quot;
&; #039; console=ttyo 0,115200 n8mem=80 mnotifyk.vpssm3_ sva=0xbf 900000 VRAM=4mubi.MTD=5root=u bi0:rootfsrootfstype
#endif
(
上面的UBOOT参数适用于DDR3为512M的系统。 为了便于NFS调试,定义了nfsargs。 如果要将squashfs文件系统用于主文件系统,请使用squashfsargs。 如果要将ubifs用于主文件系统,请使用ubifsargs。 如果希望自己设置新参数,请使用setenv bootargs XXXXXXXX并使用上面的运行用户引导。
本公司DM8127开发板NAND FLASH分区信息:
0x 000000000000-0x 000000000:& amp; #039; u-boot-min&; #039;
0x 0000000020000-0x 0000000180000:& amp; #039; u-boot&; #039;
0x 0000000180000-0x 0000001 c 0000:& amp; #039; u-bootenv&; #039;
0x 00000001 c 0000-0x 00000008000:& amp; #039; kernel&; #039;
0x 000000080000-0x 000002 b 00000:& amp; #039; squash&; #039;
0x 0000002 b 00000-0x 000000990000:& amp; #039; ubifs&; #039;
0x 000000990000-0x 00000 e 900000:& amp; #039; userapp&; #039;
0x 000000 e 900000-0x 000002000000:& amp; #039; 用户数据& amp; #039;
根据这个信息,看看前面的run updatemin; 运行更新引导; 运行更新密钥; run updateubifs;
这些指令脚本是本公司自己编写的。
run updatemin在TFTPSERVER上下载dm8127_min.bin并将其写入NAND FLASH;
下载runupdateubootDM8127_uboot.bin并烧到NAND;
run updatekernel下载dm8127_kernel.bin烧写NAND;
下载runupdateubifsDM8127_ubifs.bin并写入NAND。
以上参数中有cmem共享内存的定义。 参考APPRO的定义就好了。 DM8127使用全速模式。 既不是低功耗模式,也不是内存DDR3只有256米。
)
# define config _ IPaddr 192.168.1.188 (在此定义开发环境中的IP addr ) ) ) )。
# define config _ serverip 192.168.1.252 (在此定义开发环境中的server IP,例如tftp、NFS的主机IP ) ) ) )。
# define config _ gateway IP 192.168.1.1
# define config _ net mask 255.255.255.0
# define config _ eth addr 00:11:22:33:44:55
(在此定义板的MAC地址。 稍后将代码添加到bootm.c并传递给kernel。 参照:
Arch/arm/lib/Bootm.c
添加到do_bootm_linux ( ) :
#if 1 //added by jingbo
charbuf1=malloc(1024;
charbuf2=malloc(32;
sprintf(buf2,eth=%s,getenv ) ethaddr );
sprintf(buf1,%s %s,getenv(bootargs ),buf2);
setup_commandline_tag(BD,buf1);
#endif
此代码是一种通过bootargs将MAC地址传递给内核的方法。)
# ifndef config _ ti 814 x _ opti _ config
# define config _ auto _ complete (请务必打开uboot命令完成功能。 否则,无法在uboot命令行中用tab键完成命令) ) ) )。
#define CONFIG_CMDLINE_EDITING (这支持通过UBOOT命令行光标键查询历史记录命令,通常与CONFIG_AUTO_COMPLETE结合使用请务必添加。 ) ) ) ) )
#endif
# define config _ sys _ gbl _ data _ size 128/sizeinbytesreservedfor
initial data /
#define CONFIG_MISC_INIT_R 1
# ifndef config _ ti 814 x _ min _ config
# define config _ ti 814 x _ ascii art1/the centaur /
#endif
#define CONFIG_SYS_AUTOLOAD &; #039; 是& amp; #039;
# ifndef config _ ti 814 x _ opti _ config
#define CONFIG_CMD_CACHE
#define CONFIG_CMD_ECHO
#endif
/*
miscellaneousconfigurableoptions
*/
/max number of command args /
#define CONFIG_SYS_MAXARGS 32
/console I/o缓冲器大小/
#define CONFIG_SYS_CBSIZE 512
/打印缓冲器大小/
# define config _ sys _ Pb size ( config _ sys _ cbsize (\\
sizeof(config_sys_prompt ) )。
16)/ Boot Argument Buffer Size /
#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
/ memtest works on 8 MB in DRAM after skipping 32MB from start addr of ram disk/
#define CONFIG_SYS_MEMTEST_START (PHYS_DRAM_1 (64 1024 1024))
#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START \\\\
(8 1024 1024))
#if defined(CONFIG_CMD_AUTOTEST)
#define CONFIG_SYS_MEMTEST_SIZE 0x10000000 / autotest memory size/
#endif
#undef CONFIG_SYS_CLKS_IN_HZ / everything, incl board info, in Hz /
#define CONFIG_SYS_LOAD_ADDR 0x81000000 / Default load address /
#define CONFIG_SYS_HZ 1000 / 1ms clock /
/ Hardware related /
/**
Physical Memory Map(这里定义2组DDR3的片选地址,每组256M,总共512M字节)
/
#define CONFIG_NR_DRAM_BANKS 2 / we have 2 banks of DRAM /
#define PHYS_DRAM_1 0x80000000 / DRAM Bank #1 /
#define PHYS_DRAM_1_SIZE 0x10000000 / 256 MB /
#define PHYS_DRAM_2 0xB0000000 / DRAM Bank #2 /
#define PHYS_DRAM_2_SIZE 0x10000000 / 256 MB */
/**
Platform/Board specific defs
*/
#define CONFIG_SYS_CLK_FREQ 20000000
#define CONFIG_SYS_TIMERBASE 0x4802E000
/*
NS16550 Configuration (定义串口的时钟等等)
/
#define CONFIG_SERIAL_MULTI 1
#define CONFIG_SYS_NS16550
#define CONFIG_SYS_NS16550_SERIAL
#define CONFIG_SYS_NS16550_REG_SIZE (-4)
#define CONFIG_SYS_NS16550_CLK (48000000)
#define CONFIG_SYS_NS16550_COM1 0x48020000 / Base EVM has UART0 */
#define CONFIG_SYS_NS16550_COM2 0x48022000
#define CONFIG_BAUDRATE 115200
#define CONFIG_SYS_BAUDRATE_TABLE { 110, 300, 600, 1200, 2400, \\\\
4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200 }
/*
select serial console configuration
*/
#define CONFIG_SERIAL1 1
#define CONFIG_CONS_INDEX 1
#define CONFIG_SYS_CONSOLE_INFO_QUIET
#if defined(CONFIG_NO_ETH)
#undef CONFIG_CMD_NET
#else
#define CONFIG_CMD_NET
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_PING
#endif
#if defined(CONFIG_CMD_NET)
#define CONFIG_DRIVER_TI_CPSW
#define CONFIG_MII
#define CONFIG_BOOTP_DEFAULT
#define CONFIG_BOOTP_dns
#define CONFIG_BOOTP_DNS2
#define CONFIG_BOOTP_SEND_HOSTNAME
#define CONFIG_BOOTP_GATEWAY
#define CONFIG_BOOTP_SUBNETMASK
#define CONFIG_NET_RETRY_COUNT 10
#define CONFIG_NET_MULTI
#define CONFIG_PHY_GIGE
/ increase network receive packet buffer count for reliable TFTP /
#define CONFIG_SYS_RX_ETH_BUFFER 16
#endif
#if defined(CONFIG_SYS_NO_FLASH)
#define CONFIG_ENV_IS_NOWHERE
#endif
/ NAND support /
#ifdef CONFIG_NAND
#define CONFIG_CMD_NAND
#define CONFIG_NAND_TI81XX
//#define GPMC_NAND_ECC_LP_x16_LAYOUT 1 //Jingbo: for 16BIT NAND
#define GPMC_NAND_ECC_LP_x8_LAYOUT 1 //Jingbo: for 8bit NAND
#define NAND_BASE (0x08000000) (NAND FLASH芯片的片选地址 )
#define CONFIG_SYS_NAND_ADDR NAND_BASE / physical address /
/ to access nand /
#define CONFIG_SYS_NAND_BASE NAND_BASE / physical address /
/ to access nand at /
/ CS0 /
#define CONFIG_SYS_MAX_NAND_DEVICE 1 / Max number of NAND /
#endif / devices /
/ ENV in NAND /
#if defined(CONFIG_NAND_ENV)
#undef CONFIG_ENV_IS_NOWHERE
#define CONFIG_ENV_IS_IN_NAND 1
#ifdef CONFIG_ENV_IS_IN_NAND
#define CONFIG_SYS_MAX_FLASH_SECT 520 / max number of sectors in a chip /
#define CONFIG_SYS_MAX_FLASH_BANKS 2 / max number of flash banks /
#define CONFIG_SYS_MONITOR_LEN (256 << 10) / Reserve 2 sectors /
#define CONFIG_SYS_FLASH_BASE boot_flash_base
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
#define MNAND_ENV_OFFSET 0x180000 / environment starts here /(这里我们定义uboot bootarg参数保存的起始地址)
#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
#define CONFIG_ENV_OFFSET boot_flash_off
#define CONFIG_ENV_ADDR MNAND_ENV_OFFSET
#endif
#ifndef ASSEMBLY
extern unsigned int boot_flash_base;
extern volatile unsigned int boot_flash_env_addr;
extern unsigned int boot_flash_off;
extern unsigned int boot_flash_sec;
extern unsigned int boot_flash_type;
#endif
#endif / NAND support /
#ifndef CONFIG_TI814X_OPTI_CONFIG
/ SPI support /
#ifdef CONFIG_SPI (如果使用SPI接口的FLASH,这个宏一定要编译,我们公司板子没用SPI FLASH)
#define CONFIG_OMAP3_SPI
#define CONFIG_MTD_DEVICE
#define CONFIG_SPI_FLASH
#define CONFIG_SPI_FLASH_WINBOND
#define CONFIG_CMD_SF
#define CONFIG_SF_DEFAULT_SPEED (75000000)
#define CONFIG_CODEC_AIC26 1
#endif
/ ENV in SPI /
#if defined(CONFIG_SPI_ENV)
#undef CONFIG_ENV_SIZE
#undef CONFIG_ENV_IS_NOWHERE
#define CONFIG_ENV_IS_IN_SPI_FLASH 1
#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
#define CONFIG_ENV_SIZE 0x2000 /use a small env /
#define CONFIG_SYS_FLASH_BASE (0)
#define SPI_FLASH_ERASE_SIZE (4 1024) / sector size of SPI flash /
#define CONFIG_SYS_ENV_SECT_SIZE (2 SPI_FLASH_ERASE_SIZE) / env size /
#define CONFIG_ENV_SECT_SIZE (CONFIG_SYS_ENV_SECT_SIZE)
#define CONFIG_ENV_OFFSET (96 SPI_FLASH_ERASE_SIZE)
#define CONFIG_ENV_ADDR (CONFIG_ENV_OFFSET)
#define CONFIG_SYS_MAX_FLASH_SECT (1024) / no of sectors in SPI flash /
#define CONFIG_SYS_MAX_FLASH_BANKS (1)
#endif
#endif / SPI support */
/ ENV in MMC /
#if defined(CONFIG_MMC_ENV)
#undef CONFIG_ENV_IS_NOWHERE
#define CONFIG_ENV_IS_IN_MMC 1
#define CONFIG_SYS_MMC_ENV_DEV 0
#undef CONFIG_ENV_SIZE
#undef CONFIG_ENV_OFFSET
#define CONFIG_ENV_OFFSET (722931024)
#define CONFIG_ENV_SIZE (8 1024)
#endif / MMC support /
/ NOR support / (NOR FLASH芯片的支持,我们公司基本不用NOR FLASH了)
#if defined(CONFIG_NOR)
#undef CONFIG_CMD_NAND / Remove NAND support /
#undef CONFIG_NAND_TI81XX
#undef CONFIG_SKIP_LOWLEVEL_INIT
#define CONFIG_TI814X_CONFIG_DDR
#define CONFIG_SETUP_PLL
#define CONFIG_TI814X_EVM_DDR3
#undef CONFIG_ENV_IS_NOWHERE
#ifdef CONFIG_SYS_MALLOC_LEN
#undef CONFIG_SYS_MALLOC_LEN
#endif
#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1
#define CONFIG_SYS_MALLOC_LEN (0x100000)
#define CONFIG_SYS_FLASH_CFI
#define CONFIG_FLASH_CFI_DRIVER
#define CONFIG_FLASH_CFI_MTD
#define CONFIG_SYS_MAX_FLASH_SECT 512
#define CONFIG_SYS_MAX_FLASH_BANKS 1
#define CONFIG_SYS_FLASH_BASE (0x08000000)
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
#define CONFIG_ENV_IS_IN_FLASH 1
#define NOR_SECT_SIZE (128 1024)
#define CONFIG_SYS_ENV_SECT_SIZE (NOR_SECT_SIZE)
#define CONFIG_ENV_SECT_SIZE (NOR_SECT_SIZE)
#define CONFIG_ENV_OFFSET (2 NOR_SECT_SIZE)
#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE CONFIG_ENV_OFFSET)
#define CONFIG_MTD_DEVICE
#endif / NOR support /
/ No I2C support in 1st stage /
#ifdef CONFIG_I2C
#define CONFIG_CMD_I2C
#define CONFIG_CMD_DATE
#define CONFIG_I2C_MULTI_BUS (注意:DM8127支持I2C0,I2C1,I2C2几个I2C总线)
#define CONFIG_SYS_RTC_BUS_NUM 0
#define CONFIG_TPS65911_I2C 1
#define CONFIG_RTC_TPS65911 1 (比如这里电源管理芯片 使用I2C0总线)
#define CONFIG_CODEC_AIC3104 1
#define CONFIG_SENSOR_MT9J003 1
#define CONFIG_HARD_I2C 1
#define CONFIG_SYS_I2C_SPEED 100000 (I2C总线使用100K速率)
#define CONFIG_SYS_I2C_SLAVE 1
#define CONFIG_SYS_I2C_BUS 0
#define CONFIG_SYS_I2C_BUS_SELECT 1
#define CONFIG_DRIVER_TI81XX_I2C 1
/ EEPROM definitions /
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 3
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50
#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 6
#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 20
#endif
/ HSMMC support / (HSMMC这里我们没有用到)
#ifdef CONFIG_MMC
#define CONFIG_CMD_MMC 1
#define CONFIG_GENERIC_MMC
#define CONFIG_OMAP_HSMMC
#define CONFIG_DOS_PARTITION 1
#define CONFIG_CMD_FAT 1
#endif
#endif / CONFIG_TI814X_OPTI_CONFIG /
/ U-boot Version /
#define CONFIG_VERSION_VARIABLE
#ifdef CONFIG_TI814X_MIN_CONFIG
#define CONFIG_IDENT_STRING " DM8127_IPNC_3.80.00 min"
#else
#define CONFIG_IDENT_STRING " DM8127_IPNC_3.80.00"
#endif
/ Unsupported features /
#undef CONFIG_USE_IRQ
#endif / ! __CONFIG_TI8148_IPNC_H /
好了,u-boot/include/configs/ti8148_ipnc.h这个最重要的平台信息汇总文件修改告一段落。
7、u-boot/arch/arm/lib/board.c和u-boot/board/ti/ti8148_ipnc/evm.c的修改
无论是ubootmin还是uboot,所有的DDR3初始化,NAND初始化,PLL初始化,外设芯片初始化,GPIO管脚复用设置,都在这两个文件去修改。当然修改之前,一定要先了解DM8127的管脚复用,如果嵌入式软件工程师特别是驱动工程师不了解这个管脚复用,根本就玩不转DM8127。我们先看源码:
u-boot/board/ti/ti8148_ipnc/mux.h
还要就是要看DM8127 芯片DATASHEET第153页开始的表格(PINCNTLx Registers MUXMODE Functions),同时结合DM8127用户手册sprugz8g.pdf去分析DM8127功能模块的复用情况。
这里本人举个例子:
/ 256-UART5_RXD 227-UART5_TXD /
/ldz_add (228)GP3_20:rs485_2_en/
/ -228 / BIT(0), BIT(5), BIT(5), BIT(7),
这里是复用寄存器表从225到228对应的地址偏移,上面我们要把GP3_20设置成GPIO模式,使能UART5,那么UART5对应PINCNTLx Registers MUXMODE Functions的管脚和对应的寄存器偏移地址是226和227,BIT(5)表示使用UART5,里面的(5)标示第5种模式就是使用UART5,GP3_20要配置成GPIO模式必须设置228寄存器偏移地址为BIT(7),里面的(7)表示GPIO模式。 (0)表示默认disable模式或者TI对应管脚默认模式。
上面提到的DM8127功能模块初始化,我们需要看看board.c的sequence[]里面的初始化函数和evm.c的board_init()函数。可以从这两个文件去修改添加一些初始化,GPIO默认状态初始化等等,看源代码就清楚了,这里不累赘。
DM8127的UBOOT裁剪和简单移植上面基本介绍结束,本人这里是介绍比较简单,因为人家TI 第3方APPRO RDK软件包做得很好了,比如在UBOOT测试一些外设硬件,可以看看common\\\\ cmd_autotest.c,非常有用,当然你要在UBOOT添加很多功能,可以自己在这个RDK的UBOOT软件包的基础上深入去设计。有关DM8127开发攻略基本写得差不多了,本人总发现时间不够用,公司除了开发完DM8127各种客户定义功能,还得忙开发廉价平台海思平台Hi3516A/D,这个廉价平台1080P方案也基本开发结束。公司现在全力开发支持深度学习算法得一个新的嵌入式平台,国内某个独角兽公司已经推出类似产品了,还有其他大公司也开发出产品了,我们也不能落后太多,到时候再公布,为一些有好算法的公司提供可靠嵌入式平台。本人这里再次强调一下,DM8127适合传统机器视觉算法运行,运行不了深度学习算法。在很多图像分析方面,不一定要使用深度学习算法。还有, TI 的浮点DSP非常适合不同功能的C/C 算法移植,海思平台的算法是固化到芯片,只能做某方面的图像处理,而FPGA对很多只专长C/C 算法的而欠缺硬件知识来说,开发FPGA是一件很痛苦的事情,现在产品生命周期很短,抓紧时间抢占市场才是王道,否则到后期产品打价格战,后来推出没价格优势的平台会输得很惨。
更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码官网:www.chenqinet.cn