正点原子安装buildroot构建根文件系统

news2024/9/20 7:46:57

1:何为 buildroot?

1.1:buildroot 简介

在《第三篇 系统移植篇》我们最后讲解了如何使用 busybox 构建文件系统,busybox 仅仅 只是帮我们构建好了一些常用的命令和文件,像 lib 库、/etc 目录下的一些文件都需要我们自己 手动创建,而且 busybox 构建的根文件系统默认没有用户名和密码设置。在后续的实验中,我 们还要自己去移植一些第三方软件和库,比如 alsa、iperf、mplayer 等等。那么有没有一种傻瓜 式的方法或软件,它不仅包含了 busybox 的功能,而且里面还集成了各种软件,需要什么软件 就选择什么软件,不需要我们去移植。答案肯定是有的,buildroot 就是这样一种工具,buildroot 比 busybox 更上一层楼,buildroot 不仅集成了 busybox,而且还集成了各种常见的第三方库和软 件,需要什么就选择什么,就跟我们去吃自助餐一样,想吃什么就拿什么。buildroot 极大的方 便了我们嵌入式 Linux 开发人员构建实用的根文件系统。 从 busybox 开始一步一步的构建根文件系统适合学习、了解根文件系统的组成,但是不适 合做产品(主要是自己构建的话会有很多不完善、没有注意到的细节)。buildroot 会帮我们处理好 各种细节,根文件系统也会更加的合理、有效。因此在做产品的时候推荐大家使用 buildroot 来 构建自己的根文件系统,当然了,类似 buildroot 的软件还有很多,比如后面要讲的 yocto。 buildroot 和 uboot、Linux Kernel 很类似,我们需要到其官网上下载源码,然后对其进行配 置,比如设置交叉编译器、设置目标 CPU 参数等,最主要的就是选择所需要的第三方库或软件。 一切配置好以后就可以进行编译,编译完成了以后就会在一个文件夹里面存放好编译结果,也 就是根文件系统。

1.2:buildroot 下载

buildroot 源码肯定是要从 buildroot 官网下载,官网地址为 https://buildroot.org/,打开以后 的官网界面如图 A1.1.2.1 所示:

 点击图 A1.1.2.1 中的“DOWNLOAD”按钮即可打开 buildroot 的下载界面,如图 A1.1.2.2 所示:

 可以看出,在写本教程的时候最新的 LTS(长期支持版)版 buildroot 为 2019.02.6,分为.gz 和.bz2 两种压缩格式,这里我就使用右侧的.bz2 压缩格式的源码,选中以后下载即可。我们已 经将其放到了开发板光盘中,路径为:1、例程源码-》8、buildroot 源码-》buildroot-2019.02.6.tar.bz2, 一切准备好以后就可以使用 buildroot 构建根文件系统了。

2:buildroot 构建根文件系统

2.1:配置 buildroot

将 buildroot 源码 buildroot-2019.02.6.tar.bz2 拷贝到 ubuntu 中,也就是我们前面创建的 tool 目录下。拷贝完成以后对其进行解压,命令如下:

tar -vxjf buildroot-2019.02.6.tar.bz2

 解压完成以后就会得到一个名为“buildroot-2019.02.6”的目录,此目录就是我们解压得到 的 buildroot 源码,进入到此目录中,此目录下的文件如图 A1.2.1.1 所示:

 buildroot 和 uboot、Linux kernel 一样也支持图形化配置,输入如下命令即可打开图形化配 置界:

make menuconfig

打开以后的图形化配置界面如图 A1.2.1.2 所示:

接下来我们就依次配置 buildroot,配置完成以后就可以进行编译了。

2.1.1:配置 Target options

首先配置 Target options 选项,需要配置的项目和其对应的内容如下(“=”号后面是配置项 要选择的内容!):

 2.1.2:配置 Toolchain

此配置项用于配置交叉编译工具链,也就是交叉编译器,这里设置为我们自己所使用的交 叉编译器即可。buildroot 其实是可以自动下载交叉编译器的,但是都是从国外服务器下载的, 鉴于国内的网络环境,强烈推荐大家设置成自己所使用的交叉编译器。需要配置的项目和其对 应的内容如下:

Toolchain 下几个比较重要的选项需要说明一下,如下所示:

Toolchain:设置为 Custom toolchain,表示使用用户自己的交叉编译器。

Toolchain origin:设置为 Pre-installed toolchain,表示使用预装的交叉编译器。

Toolchain path:设置自己安装的交叉编译器绝对路径!buildroot 要用到。

Toolchain prefix:设置交叉编译器前缀,要根据自己实际所使用的交叉编译器来设置,比 如我们使用的是 arm-linux-gnueabihf-gcc,因此前缀就是$(ARCH)-linux-gnueabihf,其中 ARCH 我们前面已经设置为了 arm。

2.1.3:配置 System configuration

此选项用于设置一些系统配置,比如开发板名字、欢迎语、用户名、密码等。需要配置的 项目和其对应的内容如下:

在 System configuration 选项中可以配置平台名字,登录密码等信息。

2.1.4:配置 Filesystem images

此选项配置我们最终制作的根文件系统为什么格式的,配置如下:

对于 I.MX6U 来说此选项不用配置,因为我们是通过 Mfgtool 工具将根文件系统烧写到开 发板上的 EMMC/SD 卡中,烧写的时候需要自己对根文件系统进行打包。

2.1.5:禁止编译 Linux 内核和 uboot

buildroot 不仅仅能构建根文件系统,也可以编译 linux 内核和 uboot。当配置 buildroot,使 能 linux 内核和 uboot 以后 buildroot 就会自动下载最新的 linux 内核和 uboot 源码并编译。但是 我们一般都不会使用 buildroot 下载的 linux 内核和 uboot,因为 buildroot 下载的 linux 和 uboot 官方源码,里面会缺少很多驱动文件,而且最新的 linux 内核和 uboot 会对编译器版本号有要 求,可能导致编译失败。因此我们需要配置 buildroot,关闭 linux 内核和 uboot 的编译,只使用 buildroot 来构建根文件系统,首先是禁止 Linux 内核的编译,配置如下:

接着禁止编译 Uboot,配置如下:

2.1.6:配置 Target packages

此选项用于配置要选择的第三方库或软件、比如 alsa-utils、ffmpeg、iperf 等工具,但是现 在我们先不选择第三方库,防止编译不下去!先编译一下最基本的根文件系统,如果没有问题 的话再重新配置选择第三方库和软件。否则一口吃太多会容易撑着的,编译出问题的时候都不 知道怎么找问题

2.2:编译 buildroot

配置完成以后就可以编译 buildroot 了,编译完成以后 buildroot 就会生成编译出来的根文件 系统压缩包,我们可以直接使用。输入如下命令开始编译:

sudo make //注意,一定要加 sudo,而且不能通过-jx 来指定多核编译!!!

buildroot 编译的时候会先从网上下载所需的软件源码,有些软件源码可能下载不下来,这 个时候就需要我们自行处理,这个后面会详细的讲解。 buildroot 编译过程会很耗时,可能需要几个小时,请耐心等待! buildroot 因为要从网上下载源码,因此可能存在有些源码无法下载或下载很慢的情况,比 如如图 A1.2.2.1 所示: 

我是第一个zlib都下载不下来,然后我挂梯子下的。

可以看出图 A1.2.2.1 中正在下载 cmake-3.8.2.tar.gz 这个压缩包,大小是 7.2MB,当前下载 网速是 1.6KB/S , 需 要 用 时 71 分 钟 , 显 然 这 是 无 法 忍 受 的 ! 我 们 可 以 自 行 到 https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz 这个网站上去将 cmake-3.8.2.tar.gz 这个源码下载下 来,然后拷贝到 Ubuntu 中 buildroot 源码目录下的 dl 文件夹中,dl 文件夹专用用于存放下载下 来的源码。 等待编译完成,编译完成以后就会在 buildroot-2019.02.6/output/images 下生成根文件系统, 如图 A1.2.2.2 所示:

从图 A1.2.2.2 可以看出,编译出来了多种格式的 rootfs,比如 ext2、ext4、ubi 等。其中 rootfs.tar 就是打包好的根文件系统,我们就使用 rootfs.tar 进行测试。在 nfs 目录下新建一个名 为 buildrootfs 的文件夹,然后将图 A1.2.2.2 中的 rootfs.tar 拷贝到 buildrootfs 目录下并解压,命 令如下:

图 A1.2.2.3 就是使用 buildroot 编译出来的根文件系统,我们可以通过 nfs 挂载到开发板上, 然后对其进行测试。

2.3:buildroot 根文件系统测试

buildroot 制作出来的根文件系统已经准备好了,接下来就是对其进行测试。测试方法也是 通过 nfs 挂载的方式,启动 uboot,修改 bootargs 环境变量,设置 nfsroot 目录为 Ubuntu 中的 buildrootfs 目录,命令如下:

用第二个,第一个是原来的


setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.31.197:/home/zhulinux/linux/nfs/rootfs,proto=tcp rw ip=192.168.31.190:192.168.31.197:192.168.31.1:255.255.255.0::eth0:off'

setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.31.197:/home/zhulinux/linux/nfs/buildrootfs,proto=tcp rw ip=192.168.31.190:192.168.31.197:192.168.31.1:255.255.255.0::eth0:off'

 设置好以后启动系统,进入根文件系统以后如图 A2.2.3.1 所示:

在图 A2.2.3.1 中,首先要进入到/lib/modules 目录,但是默认没有,因此需要我们自行创建 此目录。buildroot 构建的根文件系统启动以后会输出我们前面设置的欢迎语“Welcome to alpha i.mx6ull”。然后需要输入用户名和密码,用户名是“root”,密码就是我们前面配置 buildroot 的 时候设置的“123456”。输入用户名和密码以后就可以进入系统中,如图 A2.2.3.2 所示:

可以看出的 buildroot 构建的根文件系统运行基本没有问题,但是这个根文件系统是最简单 的,我们并没有在 buildroot 里面配置任何第三方的库和软件,接下来我们就配置 buildroot,使 能一些常见的第三方软件。

3:buildroot 第三方软件和库的配置

我在前面学习的时候需要自行移植一些第三方的库和软件,比如 alsa-lib、alsa-utils 等等, 现在我们不需要自行移植这些第三方软件和库了,可以直接在 buildroot 里面配置使能。比如我 们现在配置使能 alsa-lib、alsa-utils 这两个软件和库。

3.1:使能 alsa-lib

输入 make menuconfig,打开 buildroot 配置界面,配置路径如下:

3.2:使能 alsa-utils

接下来使能 alsa-utils,路径如下:

 等待编译完成就可以使用新的根文件系统进行测试了,将 buildroot/images/rootfs.tar 拷贝到 nfs 目录下的 buildroot 目录中,然后重新解压。注意,以前自己添加的文件并不会被删除掉的, 解压命令如下:

tar -vxf rootfs.tar

解压完成以后就可以使用 alsa-utils 相关的软件了,比如 alsamixer,想想我们曾经在第六十 五章中自行移植 alsa-utils 的时候,那个过程叫一个复杂。通过 buildroot 的话直接一个配置就可 以搞定全部,方便快捷,大家可以自行尝试去配置使能一些其他的第三方库和软件。

4:buildroot 下的 busybox 配置

4.1:busybox 配置

buildroot 在构建根文件系统的时候也是要用到 busybox 的,既然用到了 busybox 那么就涉 及到 busybox 的配置。buildroot 会自动下载 busybox 压缩包,buildroot 下载的源码压缩包都存 放在/dl 目录下,在 dl 目录下就有一个叫做“busybox”的文件夹,此目录下保存着 busybox 压 缩包,如图 A1.4.1.1 所示:

可以看出,buildroot 下载的 busybox 版本为 1.29.3。要想编译 busybox,必须对图 A1.4.1.1 中的压缩包进行解压缩,buildroot 将所有解压缩后的软件保存在/output/build 软件中,我们可以 在找到/output/build/busybox-1.29.3 这个文件夹,此文件夹就是解压后的 busybox 源码,文件内 容如图 A1.4.1.2 所示:

如果大家想要修改 busybox 源码的话就直接在图 A1.4.1.2 中找到相应的文件,然后修改即 可。我们现在是要配置 buildroot 下的 busybox,因此肯定要打开 busybox 的配置界面,在 buildroot 下打开 busybox 的配置界面输入如下命令:

sudo make busybox-menuconfig

输入以后就会打开 buildroot 下的 busybox 配置界面,如图 A1.4.1.3 所示:

图A1.4.1.3就是我们最熟悉的busybox配置界面了,大家想要配置什么就直接操作就行了, 或者参考第三十八章即可。

4.2:busybox 中文字符的支持

4.2.1:修改 Makefile,添加编译器

同 Uboot 和 Linux 移植一样,打开 busybox 的顶层 Makefile,添加 ARCH 和 CROSS_COMPILE 的值,如下所示:

在示例代码 38.2.2.1 中 CORSS_COMPILE 使用了绝对路径!主要是为了防止编译出错。

4.2.2:busybox 中文字符支持

如果默认直接编译 busybox 的话,在使用 SecureCRT 的时候中文字符是显示不正常的,中文字 符会显示为“?”,比如你的中文目录,中文文件都显示为“?”。不知道从哪个版本开始 busybox 中的 shell 命令对中文输入即显示做了限制,即使内核支持中文但在 shell 下也依然无法正确显 示。 所以我们需要修改 busybox 源码,取消 busybox 对中文显示的限制,打开文件 busybox-1.29.0/libbb/printable_string.c,找到函数 printable_string,缩减后的函数内容如下:

12 const char* FAST_FUNC printable_string(uni_stat_t *stats, const char
*str)
13 {
14 char *dst;
15 const char *s;
16
17 s = str;
18 while (1) {
19 unsigned char c = *s;
20 if (c == '\0') {
......
28 }
29 if (c < ' ')
30 break;
31 if (c >= 0x7f)
32 break;
33 s++;
34 }
35
36 #if ENABLE_UNICODE_SUPPORT
37 dst = unicode_conv_to_printable(stats, str);
38 #else
39 {
40 char *d = dst = xstrdup(str);
41 while (1) {
42 unsigned char c = *d;
43 if (c == '\0')
44 break;
45 if (c < ' ' || c >= 0x7f)
46 *d = '?';
47 d++;
48 }
......
55 #endif

第 31 和 32 行,当字符大于 0X7F 以后就跳出去了。 第 45 和 46 行,如果支持 UNICODE 码的话,当字符大于 0X7F 就直接输出‘?’。 所以我们需要对这 4 行代码进行修改,修改以后如下所示:

示例代码 38.2.2.3 中红色部分的代码就是被修改以后的,主要就是禁止字符大于 0X7F 以 后 break 和输出‘?’。 接着打开文件 busybox-1.29.0/libbb/unicode.c,找到如下内容:

1003 static char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t 
*stats, const char *src, unsigned width, int flags)
1004 {
1005 char *dst;
1006 unsigned dst_len;
1007 unsigned uni_count;
1008 unsigned uni_width;
1009
1010 if (unicode_status != UNICODE_ON) {
1011 char *d;
1012 if (flags & UNI_FLAG_PAD) {
1013 d = dst = xmalloc(width + 1);
......
1022 *d++ = (c >= ' ' && c < 0x7f) ? c : '?';
1023 src++;
1024 }
1025 *d = '\0';
1026 } else {
1027 d = dst = xstrndup(src, width);
1028 while (*d) {
1029 unsigned char c = *d;
1030 if (c < ' ' || c >= 0x7f)
1031 *d = '?';
1032 d++;
1033 }
1034 }
......
1040 return dst;
1041 }
......
1130
1131 return dst;
1132 }

第 1022 行,当字符大于 0X7F 以后,*d++就为‘?’。 第 1030 和 1031 行,当字符大于 0X7F 以后,*d 也为‘?’。 修改示例代码 38.2.2.4,修改后内容如下所示: 

示例代码 38.2.2.5 中红色部分的代码就是被修改以后的,同样主要是禁止字符大于 0X7F 的 时候设置为‘?’。busybox 中文字符支持跟代码修改有关的就改好了,最后还需要配置 busybox 来使能 unicode 码,这个稍后我们配置 busybox 的时候在设置。

4.2.3:配置 busybox

根我们编译 Uboot、Linux kernel 一样,我们要先对 busybox 进行默认的配置,有以下几种 配置选项:

①、defconfig,缺省配置,也就是默认配置选项。

②、allyesconfig,全选配置,也就是选中 busybox 的所有功能。

③、allnoconfig,最小配置。 我们一般使用默认配置即可,因此使用如下命令先使用默认配置来配置一下 busybox:

选项“Build static binary (no shared libs)”用来决定是静态编译 busybox 还是动态编译,静 态编译的话就不需要库文件,但是编译出来的库会很大。动态编译的话要求根文件系统中有库 文件,但是编译出来的 busybox 会小很多。这里我们不能采用静态编译!因为采用静态编译的 话 DNS 会出问题!无法进行域名解析,配置如图 38.2.2.3 所示:

默认会选中“Simplified modutils”,这里我们要取消勾选!!结果如图 38.2.2.5 所示:

 

4.3:编译 busybox

配置好以后就可以重新编译 buildroot 下的 busybox,进入到 buildroot 源码目录下,输入如 下命令查看当前 buildroot 所有配置了的目标软件包,也就是 packages:

sudo make show-targets

结果如图 A1.4.3.1 所示:

我们现在就来设置,实现图 A1.5.2 中所示的效果。我们要先了解一下“PS1”这个环境变 量,PS1 用于设置命令提示符格式,格式如下:

PS1 = ‘命令列表’

命令列表中可选的参数如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初识Spring、SpringIOC

Spring 一、什么是Spring框架&#xff1f;(重要) ---对Spring的理解 记忆关键字&#xff1a;1.核心思想&#xff08;IOC、AOP&#xff09; 2.作用&#xff08;解耦、简化&#xff09; 3.简单描述框架组成 答&#xff1a;定义&#xff1a;Spring是一个轻量级的控制反转(IoC)和…

SpringBoot中解决文件application.properties中文注释乱码的问题

如图看到中文注释乱码 很影响代码的阅读 原因是字符编码使用了ISO-8859-1 这里演示如何在idea里面把ISO-8859-1改为UTF-8 点击右上角设置 搜索框输入UTF-8 把默认的改成UTF-8就行了 可以看到中文注释正常显示 希望能够点点赞和收藏&#xff01;&#xff01;

猫咪浮毛大作战!希喂、安德迈宠物空气净化器PK,实测数据大公开

宠物空气净化器作为宠物领域的新产品&#xff0c;凭借自身独特的功能受到铲屎官们的喜爱&#xff0c;越来越多的商家关注到这个市场。然而&#xff0c;市面上品牌逐渐增多&#xff0c;质量却参差不齐&#xff0c;一些不良商家以次充好&#xff0c;容易让消费者陷入消费陷阱。因…

PHYS_OPT_MODIFIED

当对原始单元执行物理优化时&#xff0c;PHYS_OPT_MODIFIED 更新单元的属性以反映对单元执行的优化。什么时候&#xff1f; 对同一单元格执行多次优化&#xff0c;PHYS_OPT_MODIFIED值 包含按发生顺序排列的优化列表。 架构支持 所有架构。 适用对象 PHYS_OPT_MODIFIED属性放置…

Linux嵌入式学习——C++学习(2)

一、标识符的作用域和可见性 &#xff08;一&#xff09;作用域 1、全局作用域 在函数外部声明的变量和函数具有全局作用域。这些变量和函数在程序的任何地方都可以被访问。 2.局部作用域 在函数内部、循环体内部或条件语句内部声明的变量具有局部作用域。这些变量只能在其…

<数据集>航拍屋顶识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3516张 标注数量(xml文件个数)&#xff1a;3516 标注数量(txt文件个数)&#xff1a;3516 标注类别数&#xff1a;1 标注类别名称&#xff1a;[roof] 序号类别名称图片数框数1roof351643938 使用标注工具&#xf…

模具3D打印:成本缩减与产能提升的新引擎

近年来&#xff0c;3D打印技术&#xff0c;特别是在航空航天、汽车制造、生物医疗等前沿领域&#xff0c;已成为复杂结构件研发与生产的关键技术。针对广大制造企业而言&#xff0c;评估金属3D打印技术的经济效能&#xff0c;即其能否有效助力企业成本控制与产能提升&#xff0…

魔众文库系统v7.0.0版本推荐店铺功能,管理菜单逻辑优化

推荐店铺功能&#xff0c;管理菜单逻辑优化 [新功能] RandomImageProvider 逻辑升级重构&#xff0c;支持更丰富的随机图片生成 [新功能] 资源篮订单参数字段 [新功能] 首页推荐店铺功能&#xff0c;需要在后台 文库系统 → 文库店铺 开启推荐 [系统优化] Grid 快捷编辑请求…

Yolo-World初步使用

Yolo v8目前已经支持Yolo-World&#xff0c;整理一下初步使用步骤。 使用步骤 1 先下载Yolo-World的pt文件&#xff0c;下载地址&#xff1a;GitHub - AILab-CVC/YOLO-World: [CVPR 2024] Real-Time Open-Vocabulary Object Detection 官网应该是点这里&#xff08;有个笑脸…

C++入门:C语言到C++的过渡

前言&#xff1a;C——为弥补C缺陷而生的语言 C起源于 1979 年&#xff0c;当时 Bjarne Stroustrup 在贝尔实验室工作&#xff0c;面对复杂软件开发任务&#xff0c;他感到 C 语言在表达能力、可维护性和可扩展性方面存在不足。 1983 年&#xff0c;Bjarne Stroustrup 在 C 语言…

大数据应用型产品设计方法及行业案例介绍(可编辑110页PPT)

引言&#xff1a;随着信息技术的飞速发展&#xff0c;大数据已成为推动各行各业创新与变革的重要力量。大数据应用型产品&#xff0c;作为连接海量数据与实际应用需求的桥梁&#xff0c;其设计方法不仅要求深入理解数据特性&#xff0c;还需精准把握用户需求&#xff0c;以实现…

git:安装 / 设置环境变量 / 使用

一、下载 https://github.com/git-for-windows/git/releases/download/v2.45.1.windows.1/Git-2.45.1-64-bit.exe 下载成功-双击打开 下一步-Next 二、添加环境变量 1、找到git安装地址 win r cmd 回车 where git 设置环境变量 C:\Program Files\Git\cmd\git.exe 此电…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 最大括号深度(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是 春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

分布式事务学习整理

一、整体背景 最近在分布式事务领域这块的了解比较少&#xff0c;对自己来说是一个业务盲点&#xff0c;所以想抽空学习以及整理下关于分布式事务的相关知识。 1、分布式事务的发展 总所周知&#xff0c;我们为什么要考虑分布式事务&#xff0c;从一开始发展来说&#xff0c…

vscode源代码管理的传入传出更改视图如何关闭

传入传出更改视图关闭&#xff1a; vscode源代码管理中下面显示的大量传入传出记录&#xff0c;不想显示的话 在设置里搜索 scm.showHistoryGraph 可以关闭。

[Meachines] [Easy] valentine SSL心脏滴血+SSH-RSA解密+trp00f自动化权限提升+Tmux进程劫持权限提升

信息收集 IP AddressOpening Ports10.10.10.79TCP:22,80,443 $ nmap 10.10.10.79 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 1024 96:4c:51:42:…

以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展

在科技日新月异的今天&#xff0c;AI技术如同一股不可阻挡的潮流&#xff0c;正深刻改变着我们的世界&#xff0c;尤其是数字媒体产业发展。作为数字产业生态链的杰出建设者&#xff0c;树莓集团始终站在时代前沿&#xff0c;积极探索AI技术如何为数字媒体产业注入新活力。 在树…

(ICCV-2023)使用 Transformer 的可扩展扩散模型

使用 Transformer 的可扩展扩散模型 Paper Title:Scalable Diffusion Models with Transformers Paper是UC Berkeley发表在ICCV 2023的工作 paper地址 code地址 图 1&#xff1a;具有 transformer 主干的扩散模型实现了最先进的图像质量。我们展示了在 ImageNet 上以 512$\time…

初学51单片机1602液晶时序图实例分析

上篇博文笔者分享了关于液晶1602基本的工作流程&#xff0c;本篇主要是通过逻辑分析仪来看一下程序使能的电平时序&#xff0c;是否符合产品文档给出 的时序逻辑。 先看一下1602的时序图 认识下时序图中各个标识的含义&#xff1a; Tc信号周期&#xff08;E Cycle Time&#x…

WEB应用(十六)---反序列化

反序列化的概念 在面向对象编程语言中&#xff0c;就是将对象转化为字节流&#xff0c;这一步是序列化&#xff0c;字节流中包括这个对象的数据和信息&#xff0c;便于传输和存储&#xff0c;是可以在网络中传输的。需要时&#xff0c;通过反序列化从字节流中恢复对象。 类似于…