陈奇网络工作室

图片识别DM8127开发攻略——UBOOT移植说明

系统运输

图像识别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

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3