當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]BusyBox 是很多標(biāo)準(zhǔn) Linux? 工具的一個(gè)單個(gè)可執(zhí)行實(shí)現(xiàn)。BusyBox 包含了一些簡(jiǎn)單的工具,例如 cat 和 echo,還包含了一些更大、更復(fù)雜的工具,例如 grep、find、mount 以及 telnet(不過(guò)它的選項(xiàng)比傳統(tǒng)的版本要少);有些人將 BusyBox 稱(chēng)為 Linux 工具里的瑞士軍刀。本文將探索 BusyBox 的目標(biāo),它是如何工作的,以及為什么它對(duì)于內(nèi)存有限的環(huán)境來(lái)說(shuō)是如此重要。

BusyBox 的誕生

BusyBox 最初是由 Bruce Perens 在 1996 年為 Debian GNU/Linux 安裝盤(pán)編寫(xiě)的。其目標(biāo)是在一張軟盤(pán)上創(chuàng)建一個(gè)可引導(dǎo)的 GNU/Linux 系統(tǒng),這可以用作安裝盤(pán)和急救盤(pán)。一張軟盤(pán)可以保存大約 1.4-1.7MB 的內(nèi)容,因此這里沒(méi)有多少空間留給 Linux 內(nèi)核以及相關(guān)的用戶應(yīng)用程序使用。

BusyBox 許可證
BusyBox 是按照 GNU General Public License(GPL)許可證發(fā)行的。這意味著如果我們?cè)谝粋€(gè)項(xiàng)目中使用 BusyBox,就必須遵守這個(gè)許可證。我們可以在 BusyBox Web 站點(diǎn)(請(qǐng)參看本文后面參考資料一節(jié)的內(nèi)容)上看到這個(gè)許可證的內(nèi)容。BusyBox 團(tuán)隊(duì)似乎正忙于監(jiān)視違反這個(gè)許可證的情況。實(shí)際上,他們維護(hù)了一個(gè) “Hall of Shame” 頁(yè)面來(lái)說(shuō)明違反者的情況。

BusyBox 揭露了這樣一個(gè)事實(shí):很多標(biāo)準(zhǔn) Linux 工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如grepfind)都需要在目錄中搜索文件的代碼。當(dāng)這些工具被合并到一個(gè)可執(zhí)行程序中時(shí),它們就可以共享這些相同的元素,這樣可以產(chǎn)生更小的可執(zhí)行程序。實(shí)際上, BusyBox 可以將大約 3.5MB 的工具包裝成大約 200KB 大小。這就為可引導(dǎo)的磁盤(pán)和使用 Linux 的嵌入式設(shè)備提供了更多功能。我們可以對(duì) 2.4 和 2.6 版本的 Linux 內(nèi)核使用 BusyBox。


BusyBox 是如何工作的?

為了讓一個(gè)可執(zhí)行程序看起來(lái)就像是很多可執(zhí)行程序一樣,BusyBox 為傳遞給 C 的 main 函數(shù)的參數(shù)開(kāi)發(fā)了一個(gè)很少使用的特性?;叵胍幌?C 語(yǔ)言的 main 函數(shù)的定義如下:

POSIX 環(huán)境盡管 BusyBox 的目標(biāo)是提供一個(gè)相當(dāng)完整的 POSIX(可移植操作系統(tǒng)接口)環(huán)境,這是一個(gè)期望,而不是一種需求。這些工具雖然并不完整,但是它們提供了我們期望的主要功能。
清單 1. C 的 main 函數(shù)

int main( int argc, char *argv[] )

在這個(gè)定義中,argc是傳遞進(jìn)來(lái)的參數(shù)的個(gè)數(shù)(參數(shù)數(shù)量),而argv是一個(gè)字符串?dāng)?shù)組,代表從命令行傳遞進(jìn)來(lái)的參數(shù)(參數(shù)向量)。argv的索引 0 是從命令行調(diào)用的程序名。

清單 2 給出的這個(gè)簡(jiǎn)單 C 程序展示了 BusyBox 的調(diào)用。它只簡(jiǎn)單地打印argv向量的內(nèi)容。


清單 2. BusyBox 使用 argv[0] 來(lái)確定調(diào)用哪個(gè)應(yīng)用程序

// test.c#include <stdio.h>int main( int argc, char *argv[] ){int i;for (i = 0 ; i < argc ; i++) {printf("argv[%d] = %sn", i, argv[i]);}return 0;}

調(diào)用這個(gè)程序會(huì)顯示所調(diào)用的第一個(gè)參數(shù)是該程序的名字。我們可以對(duì)這個(gè)可執(zhí)行程序重新進(jìn)行命名,此時(shí)再調(diào)用就會(huì)得到該程序的新名字。另外,我們可以創(chuàng)建一個(gè)到可執(zhí)行程序的符號(hào)鏈接,在執(zhí)行這個(gè)符號(hào)鏈接時(shí),就可以看到這個(gè)符號(hào)鏈接的名字。


清單 3. 在使用新命令更新 BusyBox 之后的命令測(cè)試

$ gcc -Wall -o test test.c$ ./test arg1 arg2argv[0] = ./testargv[1] = arg1argv[2] = arg2$ mv test newtest$ ./newtest arg1argv[0] = ./newtestargv[1] = arg1$ ln -s newtest linktest$ ./linktest argargv[0] = ./linktestargv[1] = arg

BusyBox 使用了符號(hào)鏈接以便使一個(gè)可執(zhí)行程序看起來(lái)像很多程序一樣。對(duì)于 BusyBox 中包含的每個(gè)工具來(lái)說(shuō),都會(huì)這樣創(chuàng)建一個(gè)符號(hào)鏈接,這樣就可以使用這些符號(hào)鏈接來(lái)調(diào)用 BusyBox 了。BusyBox 然后可以通過(guò)argv[0]來(lái)調(diào)用內(nèi)部工具。


配置并編譯 BusyBox

我們可以從 BusyBox 的 Web 站點(diǎn)上下載最新版本的 BusyBox(請(qǐng)參看參考資料一節(jié)的內(nèi)容)。與大部分開(kāi)放源碼程序一樣,它是以一個(gè)壓縮的 tarball 形式發(fā)布的,我們可以使用清單 4 給出的命令將其轉(zhuǎn)換成源代碼樹(shù)。(如果我們下載的版本不是 1.1.1,那就請(qǐng)?jiān)谶@個(gè)命令中使用適當(dāng)?shù)陌姹咎?hào)以及特定于這個(gè)版本號(hào)的命令。)


清單 4. 展開(kāi) BusyBox

$ tar xvfz busybox-1.1.1.tar.gz$

結(jié)果會(huì)生成一個(gè)目錄,名為 busybox-1.1.1,其中包含了 BusyBox 的源代碼。要編譯默認(rèn)的配置(其中包含了幾乎所有的內(nèi)容,并禁用了調(diào)試功能),請(qǐng)使用defconfigmake 目標(biāo):


清單 5. 編譯默認(rèn)的 BusyBox 配置

$ cd busybox-1.1.1$ make defconfig$ make$

結(jié)果是一個(gè)相當(dāng)大的 BusyBox 映像,不過(guò)這只是開(kāi)始使用它的最簡(jiǎn)單的方法。我們可以直接調(diào)用這個(gè)新映像,這會(huì)產(chǎn)生一個(gè)簡(jiǎn)單的 Help 頁(yè)面,里面包括當(dāng)前配置的命令。要對(duì)這個(gè)映像進(jìn)行測(cè)試,我們也可以對(duì)一個(gè)命令調(diào)用 BusyBox 來(lái)執(zhí)行,如清單 6 所示。


清單 6. 展示 BusyBox 命令的執(zhí)行和 BusyBox 中的 ash shell

$ ./busybox pwd/usr/local/src/busybox-1.1.1$ ./busybox ash/usr/local/src/busybox-1.1.1 $ pwd/usr/local/src/busybox-1.1.1/usr/local/src/busybox-1.1.1 $ exit$

在這個(gè)例子中,我們調(diào)用了pwd(打印工作目錄)命令,使用 BusyBox 進(jìn)入了ashshell,并在ash中調(diào)用了pwd。


手工配置

如果您正在構(gòu)建一個(gè)具有特殊需求的嵌入式設(shè)備,那就可以手工使用menuconfigmake 目標(biāo)來(lái)配置 BusyBox 的內(nèi)容。如果您熟悉 Linux 內(nèi)核的編譯過(guò)程,就會(huì)注意到menuconfig與配置 Linux 內(nèi)核的內(nèi)容所使用的目標(biāo)相同。實(shí)際上,它們都采用了相同的基于 ncurses 的應(yīng)用程序。

使用手工配置,我們可以指定在最終的 BusyBox 映像中包含的命令。我們也可以對(duì) BusyBox 環(huán)境進(jìn)行配置,例如包括對(duì) NSA(美國(guó)國(guó)家安全代理)的安全增強(qiáng) Linux(SELinux),指定要使用的編譯器(用來(lái)在嵌入式環(huán)境中進(jìn)行交叉編譯)以及 BusyBox 應(yīng)該靜態(tài)編譯還是動(dòng)態(tài)編譯。圖 1 給出了menuconfig的主界面。在這里我們應(yīng)該可以看到可以為 BusyBox 配置的不同類(lèi)型的應(yīng)用程序(applet)。


圖 1. 使用 menuconfig 配置 BusyBox
多體系結(jié)構(gòu)支持
8f"`~.S‘q ^0可以簡(jiǎn)單地為 BusyBox 指定交叉編譯器意味著我們可以為很多體系結(jié)構(gòu)編譯 BusyBox。要為您的目標(biāo)體系結(jié)構(gòu)編譯 BusyBox,我們需要一個(gè)交叉編譯器和一個(gè)已經(jīng)為特定目標(biāo)體系結(jié)構(gòu)編譯好的 C 庫(kù)(uClibc 或 glibc)。

要手工配置 BusyBox,請(qǐng)使用下面的命令:


清單 7. 手工配置 BusyBox

$ make menuconfig$ make$

這為我們提供了可以調(diào)用的 BusyBox 的二進(jìn)制文件。下一個(gè)步驟是圍繞 BusyBox 構(gòu)建一個(gè)環(huán)境,包括將標(biāo)準(zhǔn) Linux 命令重定向到 BusyBox 二進(jìn)制文件的符號(hào)鏈接。我們可以使用下面的命令簡(jiǎn)單地完成這個(gè)過(guò)程:


清單 8. 構(gòu)建 BusyBox 環(huán)境

$ make install$

默認(rèn)情況下,這會(huì)創(chuàng)建一個(gè)新的本地子目錄 _install,其中包含了基本的 Linux 環(huán)境。在這個(gè)根目錄中,您會(huì)找到一個(gè)鏈接到 BusyBox 的linuxrc程序。這個(gè)linuxrc程序在構(gòu)建安裝盤(pán)或急救盤(pán)(允許提前進(jìn)行模塊化的引導(dǎo))時(shí)非常有用。同樣是在這個(gè)根目錄中,還有一個(gè)包含操作系統(tǒng)二進(jìn)制文件的 /sbin 子目錄。還有一個(gè)包含用戶二進(jìn)制文件的 /bin 目錄。在構(gòu)建軟盤(pán)發(fā)行版或嵌入式初始 RAM 磁盤(pán)時(shí),我們可以將這個(gè) _install 目錄遷移到目標(biāo)環(huán)境中。我們還可以使用 make 程序的PREFIX選項(xiàng)將安裝目錄重定向到其他位置。例如,下面的代碼就使用 /tmp/newtarget 根目錄來(lái)安裝這些符號(hào)鏈接,而不是使用 ./_install 目錄:


清單 9. 將符號(hào)鏈接安裝到另外一個(gè)目錄中

$ make PREFIX=/tmp/newtarget install$

使用installmake 目標(biāo)創(chuàng)建的符號(hào)鏈接都來(lái)自于 busybox.links 文件。這個(gè)文件是在編譯 BusyBox 時(shí)創(chuàng)建的,它包含了已經(jīng)配置的命令清單。在執(zhí)行install時(shí),就會(huì)檢查 busybox.links 文件確定要?jiǎng)?chuàng)建的符號(hào)鏈接。

到 BusyBox 的命令行鏈接也可以使用 BusyBox 在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建。CONFIG_FEATURE_INSTALLER選項(xiàng)就可以啟用這個(gè)特性,在運(yùn)行時(shí)可以這樣執(zhí)行:


清單 10. 在運(yùn)行時(shí)創(chuàng)建命令鏈接

$ ./busybox --install -s$

-s選項(xiàng)強(qiáng)制創(chuàng)建這些符號(hào)鏈接(否則就創(chuàng)建硬鏈接)。這個(gè)選項(xiàng)要求系統(tǒng)中存在 /proc 文件系統(tǒng)。


BusyBox 編譯選項(xiàng)

BusyBox 包括了幾個(gè)編譯選項(xiàng),可以幫助為我們編譯和調(diào)試正確的 BusyBox。


表 1. 為 BusyBox 提供的幾個(gè) make 選項(xiàng)
make 目標(biāo)說(shuō)明help顯示 make 選項(xiàng)的完整列表defconfig啟用默認(rèn)的(通用)配置allnoconfig禁用所有的應(yīng)用程序(空配置)allyesconfig啟用所有的應(yīng)用程序(完整配置)allbareconfig啟用所有的應(yīng)用程序,但是不包括子特性config基于文本的配置工具menuconfigN-curses(基于菜單的)配置工具all編譯 BusyBox 二進(jìn)制文件和文檔(./docs)busybox編譯 BusyBox 二進(jìn)制文件clean清除源代碼樹(shù)distclean徹底清除源代碼樹(shù)sizes顯示所啟用的應(yīng)用程序的文本/數(shù)據(jù)大小

在定義配置時(shí),我們只需要輸入make就可以真正編譯 BusyBox 二進(jìn)制文件。例如,要為所有的應(yīng)用程序編譯 BusyBox,我們可以執(zhí)行下面的命令:


清單 11. 編譯 BusyBox 二進(jìn)制程序

$ make allyesconfig$ make$


壓縮 BusyBox

如果您非常關(guān)心對(duì) BusyBox 映像的壓縮,就需要記住兩件事情:

永遠(yuǎn)不要編譯為靜態(tài)二進(jìn)制文件(這會(huì)將所有需要的庫(kù)都包含到映像文件中)。相反,如果我們是編譯為一個(gè)共享映像,那么它會(huì)使用其他應(yīng)用程序使用的庫(kù)(例如/lib/libc.so.X)。使用 uClibc 進(jìn)行編譯,這是一個(gè)對(duì)大小進(jìn)行過(guò)優(yōu)化的 C 庫(kù),它是為嵌入式系統(tǒng)開(kāi)發(fā)的;而不要使用標(biāo)準(zhǔn)的 glibc (GNU C 庫(kù))來(lái)編譯。


BusyBox 命令中支持的選項(xiàng)

BusyBox 中的命令并不支持所有可用選項(xiàng),不過(guò)這些命令都包含了常用的選項(xiàng)。如果我們需要知道一個(gè)命令可以支持哪些選項(xiàng),可以使用--help選項(xiàng)來(lái)調(diào)用這個(gè)命令,如清單 12 所示。


清單 12. 使用 --help 選項(xiàng)調(diào)用命令

$ ./busybox wc --helpBusyBox v1.1.1 (2006.04.09-15:27+0000) multi-call binaryUsage: wc [OPTION]... [FILE]...Print line, word, and byte counts for each FILE, and a total line ifmore than one FILE is specified. With no FILE, read standard input.Options:-cprint the byte counts-lprint the newline counts-Lprint the length of the longest line-wprint the word counts$

這些特定的數(shù)據(jù)只有在啟用了CONFIG_FEATURE_VERBOSE_USAGE選項(xiàng)時(shí)才可以使用。如果沒(méi)有這個(gè)選項(xiàng),我們就無(wú)法獲得這些詳細(xì)數(shù)據(jù),但是這樣可以節(jié)省大約 13 KB 的空間。

向 BusyBox 中添加新命令

向 BusyBox 添加一個(gè)新命令非常簡(jiǎn)單,這是因?yàn)樗哂辛己枚x的體系結(jié)構(gòu)。第一個(gè)步驟是為新命令的源代碼選擇一個(gè)位置。我們要根據(jù)命令的類(lèi)型(網(wǎng)絡(luò),shell 等)來(lái)選擇位置,并與其他命令保持一致。這一點(diǎn)非常重要,因?yàn)檫@個(gè)新命令最終會(huì)在 menuconfig 的配置菜單中出現(xiàn)(在下面的例子中,是 Miscellaneous Utilities 菜單)。

對(duì)于這個(gè)例子來(lái)說(shuō),我將這個(gè)新命令稱(chēng)為newcmd,并將它放到了 ./miscutils 目錄中。這個(gè)新命令的源代碼如清單 13 所示。


清單 13. 集成到 BusyBox 中的新命令的源代碼

#include "busybox.h"int newcmd_main( int argc, char *argv[] ){int i;printf("newcmd called:n");for (i = 0 ; i < argc ; i++) {printf("arg[%d] = %sn", i, argv[i]);}return 0;}

接下來(lái),我們要將這個(gè)新命令的源代碼添加到所選子目錄中的Makefile.in中。在本例中,我更新了./miscutils/Makefile.in文件。請(qǐng)按照字母順序來(lái)添加新命令,以便維持與現(xiàn)有命令的一致性:

清單 14. 將命令添加到 Makefile.in 中

MISCUTILS-$(CONFIG_MT)+= mt.oMISCUTILS-$(CONFIG_NEWCMD)+= newcmd.oMISCUTILS-$(CONFIG_RUNLEVEL)+= runlevel.o

接下來(lái)再次更新 ./miscutils 目錄中的配置文件,以便讓新命令在配置過(guò)程中是可見(jiàn)的。這個(gè)文件名為 Config.in,新命令是按照字母順序添加的:


清單 15. 將命令添加到 Config.in 中

config CONFIG_NEWCMDbool "newcmd"default nhelpnewcmd is a new test command.

這個(gè)結(jié)構(gòu)定義了一個(gè)新配置項(xiàng)(通過(guò)config關(guān)鍵字)以及一個(gè)配置選項(xiàng)(CONFIG_NEWCMD)。新命令可以啟用,也可以禁用,因此我們對(duì)配置的菜單屬性使用了bool(Boolean)值。這個(gè)命令默認(rèn)是禁用的(n表示 No),我們可以最后放上一個(gè)簡(jiǎn)短的 Help 描述。在源代碼樹(shù)的 ./scripts/config/Kconfig-language.txt 文件中,我們可以看到配置語(yǔ)法的完整文法。

接下來(lái)需要更新 ./include/applets.h 文件,使其包含這個(gè)新命令。將下面這行內(nèi)容添加到這個(gè)文件中,記住要按照字母順序。維護(hù)這個(gè)次序非常重要,否則我們的命令就會(huì)找不到。


清單 16. 將命令添加到 applets.h 中

USE_NEWCMD(APPLET(newcmd, newcmd_main, _BB_DIR_USER_BIN, _BB_SUID_NEVER))

這定義了命令名(newcmd),它在 Busybox 源代碼中的函數(shù)名(newcmd_main),應(yīng)該在哪里會(huì)為這個(gè)新命令創(chuàng)建鏈接(在這種情況中,它在 /usr/bin 目錄中),最后這個(gè)命令是否有權(quán)設(shè)置用戶 id(在本例中是 no)。

倒數(shù)第二個(gè)步驟是向 ./include/usage.h 文件中添加詳細(xì)的幫助信息。正如您可以從這個(gè)文件的例子中看到的一樣,使用信息可能非常詳細(xì)。在本例中,我只添加了一點(diǎn)信息,這樣就可以編譯這個(gè)新命令了:


清單 17. 向 usage.h 添加幫助信息

#define newcmd_trivial_usage"None"#define newcmd_full_usage"None"

最后一個(gè)步驟是啟用新命令(通過(guò)make menuconfig,然后在 Miscellaneous Utilities 菜單中啟用這個(gè)選項(xiàng))然后使用make來(lái)編譯 BusyBox。

使用新的 BusyBox,我們可以對(duì)這個(gè)新命令進(jìn)行測(cè)試,如清單 18 所示。


清單 18. 測(cè)試新命令

$ ./busybox newcmd arg1newcmd called:arg[0] = newcmdarg[1] = arg1$ ./busybox newcmd --helpBusyBox v1.1.1 (2006.04.12-13:47+0000) multi-call binaryUsage: newcmd NoneNone

就是這樣!BusyBox 開(kāi)發(fā)人員開(kāi)發(fā)了一個(gè)優(yōu)秀但非常容易擴(kuò)展的工具。

結(jié)束語(yǔ)

BusyBox 是為構(gòu)建內(nèi)存有限的嵌入式系統(tǒng)和基于軟盤(pán)系統(tǒng)的一個(gè)優(yōu)秀工具。BusyBox 通過(guò)將很多必需的工具放入一個(gè)可執(zhí)行程序,并讓它們可以共享代碼中相同的部分,從而對(duì)它們的大小進(jìn)行了很大程度的縮減,BusyBox 對(duì)于嵌入式系統(tǒng)來(lái)說(shuō)是一個(gè)非常有用的工具,因此值得我們花一些時(shí)間進(jìn)行探索。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉