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

发布时间:2024-01-24 点击:129
系统运维
图像识别dm8127开发攻略——uboot的移植说明根据前几篇文章的介绍,想必大家对dm8127软件架构有了全局的认识,下面我们从开发的角度进行裁剪移植最基本的boot软件包,嵌入式开发人员拿到一个新的板子,就是要如何让板子能跑得起自己编译和移植的程序,这才有价值,否则直接拿别人的bin文件直接烧写到板子上没啥意思。
一、dm8127 uboot编译说明
dm8127 的uboot的版本是u-boot-2010.06, uboot代码 和 以前的dm6446-dm368-dm3730平台稍微不同,以前的dm6446-dm368分离ubl和uboot两个软件包,dm3730 分离出xloadr和uboot两个软件包,而现在的dm8127是一个uboot软件包,里面包含了ubootmin和uboot,通过宏来编译得到不同的bin文件,这里有3个大的宏来区分不同的编译模式。编译ubootmin 和 uboot命令和脚本见《图像识别dm8127开发攻略——rdk软件架构浅析及编译》提到的总makefile和u-boot文件夹对应的u-boot\\\\makefile文件第3320行开始看 ti8148_ipnc_config,同时也要结合看include/configs/ti8148_ipnc.h。
a、#define config_ti814x_min_config
编译得到ubootmin(u-boot.min.nand 或者 mlo);
对应rdk总的makefile编译脚本:
ubootmin:
$(make) ubootclean
$(make) ubootbuild make_target=$(platformcfg)$(system_cfg)min$(binary_mode)
$(make) ubootbuild make_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的情况,是要烧写到板子nand flash上面的。
而我们的build_1_uboot-min-sd.sh也是调用上面的脚本执行ifeq ($(binary_mode),sd),得到mlo,工厂生产,软件调试,最需要这个文件,因为刚做出来的板子nand 是没有程序的,需要把这个mlo文件和后面编译总的u-boot得到的u-boot.bin一起copy到sd卡(tf卡)。
b、#define config_ti814x_opti_config
编译得到u-boot.opti.nand这个也是类似ubootmin的宏编译,只不过编译得到的bin文件是通过串口下载到板子上启动。
对应rdk总的makefile编译脚本:
ubootopti:
$(make) ubootclean
$(make) ubootbuild make_target=$(platform_cfg)_ipnc_opti_nand
$(make) ubootbuild make_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/ti8148_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都是在dm8127片内的ram运行,因为外存ddr3都还没初始化!
那么软件调试新生产出来的板子时,给板子选定串口boot模式(nand没程序就是自动默认其他boot模式),上电,按下图使用串口工具比如securecrt,选择编译得到的u-boot.opti.nand,如果串口稳定,一般下载100%%u6b63常,回车进入熟悉的u-boot命令行模式。
上图有时使用x modem 传输文件不成功,可以再使用ymodem模式,波特率使用115200。
c、如果config_ti814x_min_config和config_ti814x_opti_config都没有选上,那么就是编译正常的uboot,得到u-boot.bin(dm8127_uboot.bin)
对应rdk总的makefile编译脚本:
ubootbin:
$(make) ubootclean
$(make) ubootbuild make_target=$(platformcfg)$(system_cfg)config$(binary_mode)
$(make) ubootbuild make_target=u-boot.ti
cp -f $(ubootdir)/u-boot.bin $(tftp_home)/u-boot.bin
cp -f $(ubootdir)/u-boot.bin $(ubootdir)/dm8127_uboot.bin.bk
cp -f $(ubootdir)/u-boot.bin /tftpboot/dm8127_uboot.bin
我们的build_2_uboot-all.sh就是调用上面的脚本,第一次编译正常的uboot必须使用ubootclean,还有我们的build_2_uboot-tmp.sh是上面的脚本把$(make) ubootclean去掉,在第一次编译build_2_uboot-all.sh后,后面修改源码某个文件,我们不需要每次都调用ubootclean,再重新对所有的文件编译,太浪费时间。
提示:上面3种大的宏编译模式,一定要结合rdk总makefile和u-boot文件夹对应的u-boot\\\\makefile文件第3320行开始的内容来理解。
二、uboot的裁剪和移植
1、 修改u-boot\\\\makefile
以前写过的其他davinci平台开发攻略都说过,第一步就是删除不相关的文件,这样才好理解这个dm8127平台有哪些相关的文件和文件夹,哪些是不相关的,一目了然。
subdirs = tools \\\\
#examples/standalone \\\\ (屏蔽,不要)
#examples/api (屏蔽,不要)
…….
#libs = api/libapi.a (屏蔽)
2、回到u-boot目录下,把nand_spl和onenand_ipl文件夹去掉。
域名隐私保护如何关闭
.vip域名可以备案了吗
瑞数Bot管理入选华为云联营商品,助力云上安全发展
没收到你们的提醒就把我的主机关闭了晕死你们至少要提醒一下啊靠
干货分享!自建站内容排版工具知多少
刚买的云服务器如何用
最新!60个信息流广告平台数据榜单!
小程序云服务器买多大的