Station P2(ROC-RK3568-PC) 裸机开发5_RKUBoot TPL

article/2025/10/10 22:30:45

完整编译 u-boot-next-dev:
./make.sh rk3568 2>&1 >log.txt

生成两个主要的文件是:

RKLoader:rk356x_spl_loader_v1.08.111.bin

Uoot FIT Image:uboot.img

两个都是有特定格式的混合文件。

RKLoader 的生成,是下面的指令:

E:\Dev\EE\Rockchip\u-boot-next-dev\make.sh:

function pack_loader_image()

{...

    scripts/loader.sh    rkbin\RKBOOT\RK3568MINIALL.ini

....}

E:\Dev\EE\Rockchip\u-boot-next-dev\scripts\loader.sh:

...

    ./tools/boot_merger    ${INI}
...

E:\Dev\EE\Rockchip\rkbin\RKBOOT\RK3568MINIALL.ini:

综上,最小版 RKLoader 的生成, 至少依赖如下三个文件:

rkbin/bin/rk35/rk3568_ddr_1560MHz_v1.08.bin

rkbin/bin/rk35/rk356x_usbplug_v1.08.bin

rkbin/bin/rk35/rk356x_spl_v1.11.bin

这三个文件是 github 上的 rkbin 项目里面的, 不开源。

但是 Rockchip_Developer_Guide_UBoot_Nextdev_CN.pdf 文档中说:

RK平台根据前级Loader代码是否开源,目前有两套启动方式:
// 前级loader闭源
BOOTROM => ddr bin => Miniloader => TRUST => U-BOOT => KERNEL


// 前级loader开源
BOOTROM => TPL     => SPL            => TRUST => U-BOOT => KERNEL


TPL 相当于 ddr bin,SPL 相当于 miniloader。TPL+SPL 的组合实现了跟 RK 闭源 ddr.bin+miniloader 一致的功能,可相互替换。

TPL是比U-Boot更早阶段的Loader,TPL运行在SRAM中,
其作用是代替ddr bin负责完成DRAM的初始化工作。
TPL是代码开源的版本,ddr bin是代码闭源的版本。

既然说可以替换,那:

完整编译是这样:
make rk3568_defconfig
./make.sh rk3568 2>&1 >log.txt

pack loader okay! Input: /mnt/e/Dev/EE/Rockchip/rkbin/RKBOOT/RK3568MINIALL.ini

完整编译过一次后,可以使用 tpl + spl 重新生成 loader.bin :
./make.sh --tpl --spl 2>&1 >>log.txt

pack loader(TPL+SPL) okay! Input: /mnt/e/Dev/EE/Rockchip/rkbin/RKBOOT/RK3568MINIALL.ini
 

综上可得:

闭源RKLoader = ddr bin      + usbplug + Miniloader
开源RKLoader = uboot TPL + usbplug + uboot SPL

uboot TPL 应该是做了跟 ddr_bin 一样的事(初始化ext_ddr_mem)是否还有其它功能未知。

编译好然后开始测试=>

替换TPL+SPL实测失败!!只打印出下面一这行,就卡住不动了。

U-Boot TPL 2017.09 (Jan 21 2022 - 19:00:12)

然后 XSearch.exe 对 u-boot-next-dev 目录一通搜索 2017.09

再一通搜索 U_BOOT_VERSION

再一通搜索 U_BOOT_DATE 

确认是这个文件的输出。

E:\Dev\EE\Rockchip\u-boot-next-dev\arch\arm\mach-rockchip\tpl.c

    printascii("\nU-Boot TPL " PLAIN_VERSION " (" U_BOOT_DATE " - " \
                U_BOOT_TIME ")\n");

简单说, tpl 只能跑到这个文件官方的tpl也有问题?还是哪里有要设置的?
 

2022.02.12 补充:
        rk3568 DDR初始化代码没有开源
        只能使用 rk3568_ddr_1560MHz_v1.08.bi

想查找问题在哪, 但是每次改完代码,重新编译的时间太久。

于是想把 tpl 相关的源文件扣出来,单独做一个叫 rkubootTPL 的项目单独编译。

于是乎开始分析 tpl 相关的源文件有哪些:

./make.sh
===========================================================
SRCTREE=`pwd`
SCRIPT_SPL="${SRCTREE}/scripts/spl.sh"

function process_args()
{
    ...
            --tpl|tpl)  # use tpl file
                ARG_TPL_BIN="tpl/u-boot-tpl.bin"
    ...
}

function pack_idblock()
{
    if [ ! -z "${ARG_TPL_BIN}" ]; then
        TPL_BIN=${ARG_TPL_BIN}
    fi
}

function pack_spl_loader_image()
{
    rm *_loader_*.bin -f
    cd ${RKBIN}
    if [ ! -z "${ARG_SPL_BIN}" -a ! -z "${ARG_TPL_BIN}" ]; then
        ${SCRIPT_SPL} --ini ${INI_LOADER} --tpl ${SRCTREE}/${ARG_TPL_BIN} --spl ${SRCTREE}/${ARG_SPL_BIN}
    elif [ ! -z "${ARG_TPL_BIN}" ]; then
        ${SCRIPT_SPL} --ini ${INI_LOADER} --tpl ${SRCTREE}/${ARG_TPL_BIN}  #!!!!!!<----------------
    else
        ${SCRIPT_SPL} --ini ${INI_LOADER} --spl ${SRCTREE}/${ARG_SPL_BIN}
    fi
    cd -
    if [ -f ${RKBIN}/*_loader_*.bin ]; then
        mv ${RKBIN}/*_loader_*.bin ./
    fi
}

./scripts/spl.sh --ini /mnt/e/Dev/EE/Rockchip/rkbin/RKBOOT/RK3568MINIALL.ini  --tpl ${SRCTREE}/tpl/u-boot-tpl.bin

./scripts/spl.sh ==> 其实应该叫 makeRKLoader_With_Tpl.sh
===========================================================
INI="/mnt/e/Dev/EE/Rockchip/rkbin/RKBOOT/RK3568MINIALL.ini"
TPL_BIN="/mnt/e/Dev/EE/Rockchip/u-boot-next-dev/tpl/u-boot-tpl.bin"

rm tmp -rf && mkdir tmp -p
TMP_INI="tmp/MINIALL.ini"
cp ${INI} ${TMP_INI}

cp ${TPL_BIN} tmp/tpl.bin
sed -i "s/FlashData=.*$/FlashData=.\/tmp\/tpl.bin/"        ${TMP_INI}
sed -i "0,/Path1=.*/s/Path1=.*$/Path1=.\/tmp\/tpl.bin/"    ${TMP_INI}
rm *_loader_*.bin -f
./tools/boot_merger ${TMP_INI}


其中 u-boot-tpl.bin 来自:cp tpl/u-boot-tpl-nodtb.bin tpl/u-boot-tpl.bin  
#在  E:\Dev\EE\Rockchip\u-boot-next-dev\tpl\.u-boot-tpl.bin.cmd

u-boot-tpl-nodtb.bin来自:aarch64-linux-gnu-objcopy  -j .text \
                                                     -j .secure_text\
                                                     -j .secure_data\
                                                     -j .rodata\
                                                     -j .data\
                                                     -j .u_boot_list\
                                                     -j .rela.dyn\
                                                     -j .got\
                                                     -j .got.plt\
                                                     -j .dtb.init.rodata\
                                                     -O binary\
                                                        tpl/u-boot-tpl\
                                                        tpl/u-boot-tpl-nodtb.bin
#在 E:\Dev\EE\Rockchip\u-boot-next-dev\tpl\.u-boot-tpl-nodtb.bin.cmd

也就是从 tpl/u-boot-tpl 文件导出来的,只是去除了一些无关的数据段

tpl/u-boot-tpl  来自:E:\Dev\EE\Rockchip\u-boot-next-dev\tpl\.u-boot-tpl.cmd
cmd_tpl/u-boot-tpl := (cd tpl && 
/mnt/e/Dev/EE/Rockchip/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld.bfd
-T u-boot-spl.lds  --gc-sections -Bstatic --gc-sections
--no-dynamic-linker
-Ttext 0xfdcc1000 
arch/arm/cpu/armv8/start.o
--start-group
arch/arm/mach-rockchip/built-in.o 
arch/arm/cpu/armv8/built-in.o 
arch/arm/cpu/built-in.o 
arch/arm/lib/built-in.o 
board/rockchip/evb_rk3568/built-in.o 
common/init/built-in.o 
disk/built-in.o 
drivers/built-in.o 
dts/built-in.o 
fs/built-in.o  
--end-group 
-L /mnt/e/Dev/EE/Rockchip/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1
-lgcc
-Map u-boot-tpl.map
-o u-boot-tpl
&& /mnt/e/Dev/EE/Rockchip/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-objdump -t u-boot-tpl > u-boot-tpl.sym
)

上面就是 tpl 编译流程,但范围还是太大,
还是得结合源码阅读 + u-boot-tpl.map + u-boot-tpl.sym分析的方式来扣出 tpl 相关的源文件。
待续。

2022.02.12 补充:
        rk3568 DDR初始化代码没有开源
        只能使用 rk3568_ddr_1560MHz_v1.08.bin

其它内容:

E:\Dev\EE\Rockchip\u-boot-next-dev\.config

CONFIG_TPL_LDSCRIPT="arch/arm/mach-rockchip/u-boot-tpl-v8.lds"
CONFIG_TPL_TEXT_BASE=0xfdcc1000
CONFIG_TPL_MAX_SIZE=61440

CONFIG_TPL_ROCKCHIP_BACK_TO_BROM=y
CONFIG_TPL_SYS_MALLOC_F_LEN=0x80000
CONFIG_SUPPORT_TPL=y
CONFIG_TPL=y
CONFIG_TPL_TINY_FRAMEWORK=y
CONFIG_TPL_SERIAL_SUPPORT=y
CONFIG_TPL_RAM=y
CONFIG_ROCKCHIP_TPL_INIT_DRAM_TYPE=0
CONFIG_TPL_DM_SERIAL=y
 

... 过滤文件中所有带 TPL 的行
0xfdcc1000, 是上电时SYSTEM_SRAM的空间(总共64kb, 0xfdcc0000 - 0xfdccffff)

aarch64-linux-gnu-objdump -h ./tpl/elfBinFile    #查看数据段

aarch64-linux-gnu-objdump -S ./tpl/elfBinFile    #反汇编

TPL和SPL都使用arch/arm/cpu/armv8/start.S做为入口,只是两者编译时下的参数不一样。

E:\Dev\EE\Rockchip\u-boot-next-dev\tpl\arch\arm\cpu\armv8\.start.o.cmd
/mnt/e/Dev/EE/Rockchip/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc -Wp,-MD,tpl/arch/arm/cpu/armv8/.start.o.d  -nostdinc -isystem /mnt/e/Dev/EE/Rockchip/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/include -Iinclude   -I./arch/arm/include -include ./include/linux/kconfig.h -D__KERNEL__ -D__UBOOT__ -DCONFIG_SPL_BUILD -DCONFIG_TPL_BUILD -D__ASSEMBLY__ -g -D__ARM__ -mstrict-align -ffunction-sections -fdata-sections -fno-common -ffixed-r9 -fno-common -ffixed-x18 -pipe -march=armv8-a+nosimd -D__LINUX_ARM_ARCH__=8 -I./arch/arm/mach-rockchip/include   -c -o tpl/arch/arm/cpu/armv8/start.o arch/arm/cpu/armv8/start.S


E:\Dev\EE\Rockchip\u-boot-next-dev\spl\arch\arm\cpu\armv8\.start.o.cmd
/mnt/e/Dev/EE/Rockchip/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc -Wp,-MD,spl/arch/arm/cpu/armv8/.start.o.d  -nostdinc -isystem /mnt/e/Dev/EE/Rockchip/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/6.3.1/include -Iinclude   -I./arch/arm/include -include ./include/linux/kconfig.h -D__KERNEL__ -D__UBOOT__ -DCONFIG_SPL_BUILD -D__ASSEMBLY__ -g -D__ARM__ -mstrict-align -ffunction-sections -fdata-sections -fno-common -ffixed-r9 -fno-common -ffixed-x18 -pipe -march=armv8-a+nosimd -D__LINUX_ARM_ARCH__=8 -I./arch/arm/mach-rockchip/include   -c -o spl/arch/arm/cpu/armv8/start.o arch/arm/cpu/armv8/start.S

对比可以看到, SPL 编译时比 TPL 编译是少定义一个宏:  -DCONFIG_TPL_BUILD 
 

1.9 TPL/SPL/U-Boot-proper
U-Boot 通过使用不同的编译条件可以用同一套代码获取三种不同功能的Loader:TPL/SPL/U-Bootproper。
TPL:运行在 sram 中,负责完成 ddr 初始化;
SPL:运行在 ddr 中,负责完成系统的 lowlevel 初始化、后级固件加载(trust.img 和 uboot.img);
U-Boot proper:运行在ddr中,即我们通常所说的"U-Boot",它负责引导kernel;
U-Boot proper:翻译过来是“真正的U-Boot”的意思。
 

简单说是代码利用,定义不同的宏,可以编译出不同的代码(TPL/SPL/UBoot proper)

完整编译过一次 u-boot-next-dev 后,目录里面会 tpl 和 spl 两个文件夹。
tpl 文件夹里面有什么 .o 结尾的文件,说明 tpl 使用了对应的 .c .s 结尾的源文件。
.cmd 是对应的编译指令。


查看 E:\Dev\EE\Rockchip\u-boot-next-dev\tpl\u-boot-tpl.sym, 可得如下文件列表:
0000000000000000 l    df *ABS*    0000000000000000 arch/arm/cpu/armv8/start.o
0000000000000000 l    df *ABS*    0000000000000000 param.c
0000000000000000 l    df *ABS*    0000000000000000 sdram.c
0000000000000000 l    df *ABS*    0000000000000000 rk3568.c
0000000000000000 l    df *ABS*    0000000000000000 clk_rk3568.c
0000000000000000 l    df *ABS*    0000000000000000 bootrom.c
00000000fdcc1458 l     O .data    0000000000000068 brom_ctx
0000000000000000 l    df *ABS*    0000000000000000 tpl.c
0000000000000000 l    df *ABS*    0000000000000000 rk_atags.c
0000000000000000 l    df *ABS*    0000000000000000 cpu.c
0000000000000000 l    df *ABS*    0000000000000000 generic_timer.c
0000000000000000 l    df *ABS*    0000000000000000 cache_v8.c
0000000000000000 l    df *ABS*    0000000000000000 tpl/arch/arm/cpu/armv8/exceptions.o
0000000000000000 l    df *ABS*    0000000000000000 tpl/arch/arm/cpu/armv8/cache.o
0000000000000000 l    df *ABS*    0000000000000000 tpl/arch/arm/cpu/armv8/tlb.o
0000000000000000 l    df *ABS*    0000000000000000 tpl/arch/arm/cpu/armv8/transition.o
0000000000000000 l    df *ABS*    0000000000000000 fwcall.c
0000000000000000 l    df *ABS*    0000000000000000 cpu-dt.c
0000000000000000 l    df *ABS*    0000000000000000 tpl/arch/arm/cpu/armv8/smccc-call.o
0000000000000000 l    df *ABS*    0000000000000000 tpl/arch/arm/lib/crt0_64.o
0000000000000000 l    df *ABS*    0000000000000000 tpl/arch/arm/lib/setjmp_aarch64.o
0000000000000000 l    df *ABS*    0000000000000000 spl.c
0000000000000000 l    df *ABS*    0000000000000000 zimage.c
0000000000000000 l    df *ABS*    0000000000000000 bootm-fdt.c
0000000000000000 l    df *ABS*    0000000000000000 sections.c
0000000000000000 l    df *ABS*    0000000000000000 stack.c
0000000000000000 l    df *ABS*    0000000000000000 tpl/arch/arm/lib/gic_64.o
0000000000000000 l    df *ABS*    0000000000000000 interrupts_64.c
0000000000000000 l    df *ABS*    0000000000000000 stacktrace_64.c
0000000000000000 l    df *ABS*    0000000000000000 cache.c
0000000000000000 l    df *ABS*    0000000000000000 psci-dt.c
0000000000000000 l    df *ABS*    0000000000000000 board_init.c
0000000000000000 l    df *ABS*    0000000000000000 sdram_common.c
0000000000000000 l    df *ABS*    0000000000000000 sdram_rk3568.c
0000000000000000 l    df *ABS*    0000000000000000 serial-uclass.c
0000000000000000 l    df *ABS*    0000000000000000 ns16550.c
0000000000000000 l    df *ABS*    0000000000000000 part.c
 

SoC Boot Stage(sram 阶段):
===================================================================
stage1:
    代码:Soc rom with system_sram
    作用:search TPL -> copy TPL into system_sram -> jumpto TPL
stage2:
    代码:TPL with system_sram => SPL with ddr_mem
    作用:init ext_ddr_ram -> copy SPL_in_sytem_ram into ext_ddr_ram
               -> jumpto SPL_in_ext_ddr_ram
        => SPL 加载 u-boot FIT Image,解包,jumpto bl31

stage3:
    代码:u-boot-proper、bl31、bl32、op-tee、OSKernel
    作用:开始区分安全和非安全环境,并初始化之,
              让安全环境运行 op-tee, 
              让非安全环境运行 u-boot-proper, 继续后面的启动流程(比如加载 OSKernel 等)
 

这部分可能理解得有错。

参考:

EL0、EL1、EL2、EL3:RK3399——裸机大全 | hceng blog
百度 arm trustzone

注意:
        u-boot-next-dev 编译要求系统里面必须必须得有 python2(可以从python3链接过来用)
        如果没有 python2 ,编译出错信息只会一闪而过,make 流程不会停,
        并且最后还是会生成 uboot.img,但运行不了。。。


http://chatgpt.dhexx.cn/article/dSFMFXo3.shtml

相关文章

tpl怎么搞_emlog后台模板设置功能插件tpl_options

到目前为止emlog都没有集成模板后台设置功能&#xff0c;可能是和emlog一直走轻量级路径有关。但是集成模板后台配置功能&#xff0c;无论是对emlog模板开发者还是用户来说&#xff0c;其作用都非常大&#xff0c;可以使一些模板功能不需要修改模板文件就可以改变设置&#xff…

tpl.js的使用

tpl.js的使用 tpl.js简介1.如何写模板2.如何引用模板tpl.js的下载地址 tpl.js简介 tpl.js是用于和require.js相结合的html模板,和template.js的用法非常相似&#xff0c;我们可以从以下几点来学习它&#xff0c;我们先来看一下小案例中的目录结构&#xff1a; 1.如何写模板 …

vscode配置tpl文件关联html语言

使用beego框架的时候&#xff0c;有个操作&#xff0c;需要将tpl文件修改vscode识别成html&#xff1b; 有两种方法&#xff1a; 方法一&#xff1a;页面配置 ctrl shift p 选择打开工作区设置 找到Files:Associations文件关联 添加项&#xff1a;*.tpl html 方法二&…

基于JAVA的TPL解释器

基于JAVA的TPL解释器 编写一个Java程序&#xff0c;该程序读取一个文件中的TPL指令&#xff08;见下文&#xff09;&#xff0c;并执行这些指令。该语言编写的程序每一行都必须以这些单词中的一个开头&#xff0c;不区分大小写。具体代码可参考链接 https://download.csdn.net…

U-Boot 之零 源码文件、启动阶段(TPL、SPL)、FALCON、设备树

最近&#xff0c;工作重心要从裸机开发转移到嵌入式 Linux 系统开发&#xff0c;在之前的博文 Linux 之八 完整嵌入式 Linux 环境、&#xff08;交叉&#xff09;编译工具链、CPU 体系架构、嵌入式系统构建工具 中详细介绍了嵌入式 Linux 环境&#xff0c;接下来就是重点学习一…

java .tpl是什么模版_tpl标签定义

canonical 阅读(996) 评论(0) 编辑 收藏 所属分类: Witrix开发平台 tpl自定义标签的设计目标之一是尽量减少配置说明项. 在tpl标签库中, 标签定义格式如下 importVars"varA, varB" otherArgs"optionalArgA, optionalArgB" localScope"trueOrFalse&q…

创建TPL自定义模板

文件布局 <!--1d7c7a527b6335cc7a623305ca940e1findex.tpl.html--><!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999…

php tpl模板文件,php自己创建TPL模板引擎之初学习

一&#xff0c;创建初始化模板所需的文件和文件夹。 1&#xff0c;index.php主文件&#xff0c;用于编写业务逻辑。 2&#xff0c;template.inc.php模板初始化文件&#xff0c;用于初始化模板信息。 3&#xff0c;templates目录存放所有的模板文件。 4&#xff0c;templates_c目…

观远数据苏春园:五年AI+BI路,数智化破局中的变与不变|数据猿采访

““2021年终大型金猿主题策划活动”已正式开启&#xff0c;欢迎报名参与&#xff1a;榜单奖项产业图谱行业报告线下论坛&#xff5c;或点击文末“阅读原文”链接后提交活动意向报名表&#xff0c;并进一步与数据猿工作人员沟通后&#xff0c;可获取相关申报资料与模板。 数据智…

大咖 | 王汉生:从数据到价值的转化,回归分析的“道”与“术”

摘自《数据思维》 作者&#xff1a;王汉生 学过统计学的同学们都知道一件事情&#xff0c;回归分析师数据分析的一个非常重要的模型方法。而且这些模型很可能是线性的、非线性的,也可能是参数的、非参数的,甚至是一元的、多元的,低维的、高维的,不尽相同。所以&#xff0c;把数…

李宏毅深度学习--《Backpropagation》

李宏毅深度学习 Gradient Descent of neural network&#xff1a; n e u r a l n e t w o r k neural\ \ network neural network的参数&#xff1a; θ { w 1 , w 2 , ⋯ , b 1 , b 2 , ⋯ } θ\{w_1,w_2,\cdots,b_1,b_2,\cdots \} θ{w1​,w2​,⋯,b1​,b2​,⋯}计算参数 θ…

郑宇:多源数据融合与时空数据挖掘(转载)

来自&#xff1a; https://mp.weixin.qq.com/s?__bizMzAwMTA3MzM4Nw&mid2649440531&idx1&snd9c92b1f157ee37c7c6e185919a3ffbb&chksm82c0a897b5b721810f4d795cc144d309086274a9071515e727f9f420d7ffb7f06c9b376557ee&scene21#wechat_redirect 和https:/…

近10年数据智能团队建设,联想总结了由内而外的发展经验 | 专访联想集团副总裁田日辉...

来源&#xff1a;大数据文摘 本文约3300字&#xff0c;建议阅读5分钟。 本文为清华大学大数据研究中心联合大数据文摘发起的年度白皮书《顶级数据团队建设全景报告》系列专访的第四篇内容。《报告》囊括专家访谈、问卷、网络数据分析&#xff0c;力求为行业内数据团队的组建和高…

谷俊丽:基于大数据的深度学习

嘉宾介绍&#xff1a;谷俊丽&#xff0c;博士学历&#xff0c;毕业于清华大学-美国University of Illinois Urbana-champaign大学&#xff0c;在清华期间作为核心人员研发过超长指令字数字信号处理器&#xff0c;在美期间曾参与UIUC超级计算机上的研究工作&#xff0c;并工作实…

MyBatis从入门到精通(1):MyBatis入门

作为一个自学Java的自动化专业211大学本科生&#xff0c;在学习和实践过程中”趟了不少雷“&#xff0c;所以有志于建立一个适合同样有热情学习Java技术的参考“排雷手册”。 最近在读刘增辉老师所著的《MyBatis从入门到精通》一书&#xff0c;很有收获&#xff0c;于是将自己学…

给力!低代码开发平台广州流辰信息科技助您增辉创价值!

低代码平台开发公司流辰信息深耕行业多年&#xff0c;一直以市场为导向&#xff0c;凭借敏锐的市场洞察力砥砺前行、拼搏进取&#xff0c;提升研发创新能力&#xff0c;广州流辰信息科技与各新老客户朋友风雨同舟&#xff0c;携手共创宏伟新蓝图&#xff01; 一、熔铸前沿科技 …

汇聚数据库创新力量,加速企业数字化转型

2022年12月29日&#xff0c;以“汇聚数据库创新力量&#xff0c;加速企业数字化转型”为主题的openGauss Summit 2022在线上举行。会上&#xff0c;openGauss社区理事会理事长江大勇对外公布了最近社区及生态进展&#xff0c;并宣布推出资源池化架构&#xff0c;实现软硬融合&a…

【金猿人物展】龙盈智达首席数据科学家王彦博:量子科技为AI大数据创新发展注入新动能...

‍ 王彦博 本文由龙盈智达首席数据科学家王彦博撰写并投递参与“数据猿年度金猿策划活动——2022大数据产业趋势人物榜单及奖项”评选。 ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 回顾2022年大数据行业发展&#xff0c;令人感触最深的是数字经济时代对“数据安全”和…

MyBatis从入门到精通(一):MyBatis入门

最近在读刘增辉老师所著的《MyBatis从入门到精通》一书&#xff0c;很有收获&#xff0c;于是将自己学习的过程以博客形式输出&#xff0c;如有错误&#xff0c;欢迎指正&#xff0c;如帮助到你&#xff0c;不胜荣幸&#xff01; 1. MyBatis简介 ​ 2001年&#xff0c;Clinton …

沈定刚,雷柏英,李超 | Cell Press Live:人工智能在医学影像中的应用

交叉学科 Interdisciplinary 医学影像是临床医疗诊断的重要依据之一。近些年来&#xff0c;随着信息技术的飞速发展&#xff0c;人工智能即AI也更加广泛地应用于医学影像的处理分析中&#xff0c;包括对图像的分割分类及预测等。AI提高了诊断的精准程度和效率&#xff0c;同时也…