當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件

0 引 言

Bootloader是操作系統(tǒng)運(yùn)行之前執(zhí)行的一小段程序,用來初始化硬件設(shè)備,建立一個(gè)系統(tǒng)空間映射圖和一個(gè)適當(dāng)?shù)南到y(tǒng)軟硬件環(huán)境。最終Bootloader把操作系統(tǒng)內(nèi)核映像加載到RAM中。并將系統(tǒng)控制權(quán)交給內(nèi)核。BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來完成。比如在一個(gè)基于ARM7TDMI core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的BootLoader程序。

U-Boot被認(rèn)為是功能最多,最具彈性以及開發(fā)最積極的開放源碼Bootloader。U-Boot已經(jīng)能夠支持PowerPC,ARM,X86和MIPS體系結(jié)構(gòu)的上百種開發(fā)板,U-Boot還具有通過TFTP,從IDE或SCSI磁盤以及DOc啟動(dòng)的能力,還提供了JFFS2的只讀功能。正是由于U-Boot較高的可靠性和穩(wěn)定性;高度靈活的功能設(shè)置;豐富的設(shè)備驅(qū)動(dòng)程序和豐富的開發(fā)和調(diào)試文檔,因此選擇U-Boot作為目標(biāo)板的Boot-loader。

對(duì)于嵌入式系統(tǒng),Bootloader是基于特定的硬件來實(shí)現(xiàn)的,因此建立一個(gè)通用的。Bootloader是不可能的,要使Bootloader能在目標(biāo)板上運(yùn)行,必須做出相應(yīng)的修改。

l 目標(biāo)板

目標(biāo)板采用Intel PXA255處理器,頻率最高可達(dá)400 MHz,配置了32 MB的FLASH(Intel StrataFLASH)和64MB的SDRAM(Samsung),網(wǎng)卡采用LAN91C96。SDRAM:Synchronous Dynamic Random Access Memory,同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器,RAM(隨機(jī)存取存儲(chǔ)器)RAM -random access memory 隨機(jī)存儲(chǔ)器。存儲(chǔ)單元的內(nèi)容可按需隨意取出或存入,且存取的速度與存儲(chǔ)單元的位置無關(guān)的存儲(chǔ)器。這種存儲(chǔ)器在斷電時(shí)將丟失其存儲(chǔ)內(nèi)容,故主要用于存儲(chǔ)短時(shí)間使用的程序。 按照存儲(chǔ)信息的不同,隨機(jī)存儲(chǔ)器又分為靜態(tài)隨機(jī)存儲(chǔ)器(Static RAM,SRAM)和動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Dynamic RAM,DRAM)。所謂“隨機(jī)存取”,指的是當(dāng)存儲(chǔ)器中的數(shù)據(jù)被讀取或?qū)懭霑r(shí),所需要的時(shí)間與這段信息所在的位置無關(guān)。相對(duì)的,讀取或?qū)懭腠樞蛟L問(Sequential Access)存儲(chǔ)設(shè)備中的信息時(shí),其所需要的時(shí)間與位置就會(huì)有關(guān)系(如磁帶)。同步是指 Memory工作需要同步時(shí)鐘,內(nèi)部的命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準(zhǔn);動(dòng)態(tài)是指存儲(chǔ)陣列需要不斷的刷新來保證數(shù)據(jù)不丟失;隨機(jī)是指數(shù)據(jù)不是線性依次存儲(chǔ),而是自由指定地址進(jìn)行數(shù)據(jù)讀寫。SDRAM從發(fā)展到現(xiàn)在已經(jīng)經(jīng)歷了四代,分別是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM.(顯卡上的DDR已經(jīng)發(fā)展到DDR5) 板上有JTAG口、串口和網(wǎng)口,可分別完成程序的下載和調(diào)試工作。目標(biāo)板的主要硬件資源如圖1所示。

2 U-Boot啟動(dòng)過程分析

充分理解代碼的啟動(dòng)流程,對(duì)于準(zhǔn)確地判斷出移植過程中出錯(cuò)的原因和出錯(cuò)的位置具有重要的作用。

2.1 U-Boot啟動(dòng)的入口點(diǎn)

一個(gè)可執(zhí)行的Image必須有一個(gè)入口點(diǎn),并且只能有一個(gè)全局入口。可執(zhí)行Image的入口一般通過鏈接腳本文件來實(shí)現(xiàn),腳本簡(jiǎn)單地說就是一條條的文字命令,這些文字命令是可以看到的(如可以用記事本打開查看、編輯),腳本程序在執(zhí)行時(shí),是由系統(tǒng)的一個(gè)解釋器,將其一條條的翻譯成機(jī)器可識(shí)別的指令,并按程序順序執(zhí)行。因?yàn)槟_本在執(zhí)行時(shí)多了一道翻譯的過程,所以它比二進(jìn)制程序執(zhí)行效率要稍低一些。本通??梢杂蓱?yīng)用程序臨時(shí)調(diào)用并執(zhí)行。各類腳本被廣泛地應(yīng)用于網(wǎng)頁設(shè)計(jì)中,因?yàn)槟_本不僅可以減小網(wǎng)頁的規(guī)模和提高網(wǎng)頁瀏覽速度,而且可以豐富網(wǎng)頁的表現(xiàn),如動(dòng)畫、聲音等。鏈接腳本主要用于規(guī)定如何把文件內(nèi)的section放入輸出映像文件內(nèi),并控制輸出文件內(nèi)各個(gè)部分在程序地址空間內(nèi)的分布。

以U-Boot支持的開發(fā)板1ubbock為例,查看鏈接腳本board/lubbock/u-boot.lds,就可以知道各個(gè)部分的鏈接順序。這個(gè)連接腳本決定了U-Boot的第一階段的代碼是從0xO開始的,入口由_start符號(hào)指定(ENTRY(_start)),第一個(gè)鏈接的文件是cup/pxa/start.o,那么U-Boot的入口指令一定位于這個(gè)程序中。

2.2 U-Boot的啟動(dòng)步驟

U—Boot的啟動(dòng)一般分為stagel和stage2兩個(gè)部分。依賴于CPU體系結(jié)構(gòu)的代碼,通常用匯編語言實(shí)現(xiàn),放在stagel;而stage2則通常用C語言來實(shí)現(xiàn),這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且有更好的可讀性和移植性。

根據(jù)對(duì)鏈接腳本文件和源代碼的分析,U-Boot的啟動(dòng)過程中函數(shù)調(diào)用的順序如圖2所示。

2.2.1 stagel部分

U-Boot的stagel代碼從人口函數(shù)start.S開始,它用匯編語言寫成,主要完成的工作為:設(shè)置異常向量;設(shè)置CPu的速度、時(shí)鐘頻率及中斷控制寄存器;初始化內(nèi)存控制器;將ROM中的程序復(fù)制到RAM中;初始化堆棧;轉(zhuǎn)到RAM中執(zhí)行。RAM(隨機(jī)存取存儲(chǔ)器)RAM -random access memory 隨機(jī)存儲(chǔ)器。存儲(chǔ)單元的內(nèi)容可按需隨意取出或存入,且存取的速度與存儲(chǔ)單元的位置無關(guān)的存儲(chǔ)器。這種存儲(chǔ)器在斷電時(shí)將丟失其存儲(chǔ)內(nèi)容,故主要用于存儲(chǔ)短時(shí)間使用的程序。 按照存儲(chǔ)信息的不同,隨機(jī)存儲(chǔ)器又分為靜態(tài)隨機(jī)存儲(chǔ)器(Static RAM,SRAM)和動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Dynamic RAM,DRAM)。

stage1代碼執(zhí)行完以后,就為stage2的運(yùn)行建立起了基本的硬件環(huán)境,此時(shí)的U-Boot的存儲(chǔ)器SDRAM映射圖如圖3所示。

2.2.2 stage2部分

接下來進(jìn)入到U-Boot stage2,即C語言代碼部分,入口是start_arml300t,位于lib_arm/board.c中。startarmboot是C語言開始的函數(shù),也是整個(gè)啟動(dòng)代碼中C語言的主函數(shù),同時(shí)還是整個(gè)U-Boot的主函數(shù),該函數(shù)主要完成的操作為:初始化本階段要使用到的硬件設(shè)備;檢測(cè)系統(tǒng)內(nèi)存映射;將內(nèi)核映像和根文件系統(tǒng)映像從FLASH拷貝到SDRAM中;為內(nèi)核設(shè)置啟動(dòng)參數(shù);調(diào)用內(nèi)核。

在stage2部分,首先初始化全局?jǐn)?shù)據(jù)表;然后順序執(zhí)行函數(shù)指針數(shù)組init_sequence中的初始化函數(shù);接下來調(diào)用FLAsH_init()函數(shù)初始化CFI FLAsH(針對(duì)NOR FLASH);接著調(diào)用env_relocate()函數(shù)初始化環(huán)境變量;然后獲取目標(biāo)板的網(wǎng)絡(luò)地址,包括IP地址和MAC地址;接著調(diào)用commend/console.c中定義的函數(shù)console_init_r()初始化串口控制臺(tái);最后進(jìn)入main_loop循環(huán),以接收用戶命令。

3 U-Boot的移植

3.1 移植的目標(biāo)與主要工作

在移植之前,需要清楚移植的目標(biāo)是什么。為了達(dá)到這個(gè)目標(biāo),需要做哪些工作。一般的開發(fā)板上U-Boot所需的最小功能,包括:串口、FLASH和網(wǎng)卡,由此可得移植目標(biāo)是:

(1)將U-Boot移植到目標(biāo)板FLASH上;

(2)U-Boot能夠在目標(biāo)板上運(yùn)行起來;

(3)U-Boot能夠讀寫目標(biāo)板上FLAsH等存儲(chǔ)設(shè)備;

(4)U-Boot能夠使網(wǎng)卡正常工作,能通過網(wǎng)卡下載數(shù)據(jù)。

根據(jù)以上的移植目標(biāo),所做的主要工作應(yīng)該包括:

移植U-Boot與目標(biāo)CPU相應(yīng)的代碼;移植U-Boot的FLASH驅(qū)動(dòng);移植U-Boot,的網(wǎng)卡驅(qū)動(dòng)。

3.2 參考板的選取

U-Boot本身已經(jīng)支持多種開發(fā)板,所以在移植的過程中一般不需要從零開始,可以選擇一個(gè)與自己目標(biāo)板最接近的參考板,在參考板的基礎(chǔ)上進(jìn)行修改。所以選擇適當(dāng)?shù)膮⒖及迨鞘种匾模x擇參考板的原則是參考板和目標(biāo)板具有相同的處理器,至少類似的處理器;參考板和開發(fā)板具有相同的外圍接口電路,至少基本接口相同。

這里目標(biāo)板的CPU為PXA255,在board目錄里選擇lubbock開發(fā)板作為參考板。對(duì)于相應(yīng)的FLASH設(shè)備由于Intel FLAsH支持CFI(Common FLAsHInterface),選擇drivers/cfi_FLAsH.c作為FLASH設(shè)備驅(qū)動(dòng)。由于目標(biāo)板使用LAN91C96網(wǎng)卡,所以選擇drivers/lan91c96.c作為網(wǎng)卡驅(qū)動(dòng)。

3.3 建立目標(biāo)板支持文件

選擇好參考板后,就可以依據(jù)參考板按照下面的步驟建立起目標(biāo)板的支持文件:

在board目錄下,通過“cp-rlubbock xsbase255”建立起目標(biāo)板的支持目錄,將lubbock.c改名為xsbase255.c,在Makefile里把lubbock.o改名為xsbase255.o。

在inclLlde/configs目錄里。通過“cp 1ubbock.h xs-base255.h”命令建立起目標(biāo)板的配置文件,這個(gè)文件需要經(jīng)常修改。

在U-Boot根目錄里的MakefiIe中加入如下的命令以創(chuàng)建目標(biāo)板的編譯環(huán)境:

xsbase2 5 5 config:unconfig

@$(MKCONFIG)$(@:_config=)arm pxa xsbase255

注意在@$(MKCONFIG)$(@:_config=)arm

pxa xsbase255前面的空白處是由Tab鍵生成的,千萬不能以空格代替。

3.4 修改相關(guān)代碼

從移植U-Boot最小要求U-Boot能正常啟動(dòng)的角度出發(fā),主要修改如下文件:

incIude/configs/xsbase255.h文件,大多數(shù)的寄存器參數(shù)都是在這一文件中設(shè)置完成的。

board/xsbase255/xsbase255.c文件,只需進(jìn)行基本的配置,包括設(shè)置math-type,啟動(dòng)參數(shù)首地址,獲取系統(tǒng)的RAM信息等。

board/xsbase255/config.mk文件,設(shè)置TEXT-BASE,即設(shè)置U-Boot:自己?jiǎn)?dòng)時(shí)將自己復(fù)制到RAM中的起始地址。

驅(qū)動(dòng)程序文件,主要包括網(wǎng)卡驅(qū)動(dòng)和FLASH驅(qū)動(dòng)程序。

3.4.1 目標(biāo)板配置文件的修改

目標(biāo)板配置文件inclLlde/configs/xsbase255.h,是移植過程中最重要的文件。

#define CONFIG_PXA255 1

#define CFG_SDRAMBASE O xa0000000

在這個(gè)頭文件中,配置相當(dāng)?shù)闹匾?,里面配置著主要硬件的參?shù),配置時(shí)必須結(jié)合相應(yīng)的硬件手冊(cè)才能正確的完成。主要的配置參數(shù)如表1所示。

除了上述表格列舉的以外,還有一些其他的參數(shù)需要修改,例如控制臺(tái)串口缺省的通信波特率,缺省的環(huán)境變量設(shè)置(包括本地IP地址、以太網(wǎng)接口的掩碼和MAC地址、服務(wù)器IP地址、傳遞給內(nèi)核的命令行參數(shù)等),啟動(dòng)參數(shù)列表配置等。

3.4.2 目標(biāo)板支持文件的修改

目標(biāo)板支持文件board/xsbase255/xsbase255.c也需要修改,此文件中的重點(diǎn)是board_init()函數(shù),這個(gè)函數(shù)里包含與開發(fā)板密切相關(guān)的設(shè)備的初始化。bi_arch_number為系統(tǒng)啟動(dòng)時(shí)傳遞給內(nèi)核的MACH號(hào),如果這個(gè)參數(shù)與內(nèi)核配置的不相同,則內(nèi)核啟動(dòng)解壓縮完成后將出現(xiàn)“Error:a”錯(cuò)誤,提示用戶這個(gè)是體系結(jié)構(gòu)參數(shù)傳遞不正確。bi_boot_params為啟動(dòng)參數(shù)的地址,一般放在RAM起始的16 Kb處,在此設(shè)置為Oxa0000100。

3.4.3 驅(qū)動(dòng)的移植

在這一部分主要包括閃存和網(wǎng)卡驅(qū)動(dòng)程序的移植。

(1)FLASH驅(qū)動(dòng)。這里所使用的目標(biāo)板采用2片NOR型閃存,閃存(Flash Memory)是一種長(zhǎng)壽命的非易失性(在斷電情況下仍能保持所存儲(chǔ)的數(shù)據(jù)信息)的存儲(chǔ)器,數(shù)據(jù)刪除不是以單個(gè)的字節(jié)為單位而是以固定的區(qū)塊為單位(注意:NOR Flash 為字節(jié)存儲(chǔ)。),區(qū)塊大小一般為256KB到20MB。閃存是電子可擦除只讀存儲(chǔ)器(EEPROM)的變種,EEPROM與閃存不同的是,它能在字節(jié)水平上進(jìn)行刪除和重寫而不是整個(gè)芯片擦寫,這樣閃存就比EEPROM的更新速度快。由于其斷電時(shí)仍能保存數(shù)據(jù),閃存通常被用來保存設(shè)置信息,如在電腦的BIOS(基本輸入輸出程序)、PDA(個(gè)人數(shù)字助理)、數(shù)碼相機(jī)中保存資料等。單片容量16 MB,數(shù)據(jù)線寬度為16 b,2片并作1個(gè)32 MB的數(shù)據(jù)寬度為32b的。BANK。U-Boot本身支持CFI接口規(guī)范的閃存,涉及到的文件主要包括drivers/cfi-FLASH.c,comrhand/cmd_FLASH.c。

#define CFG_FLASH_CFI

#defineCFG_FLASH_CFl_DRIVER 1

(2)網(wǎng)卡驅(qū)動(dòng)。這里使用的目標(biāo)板上采用的網(wǎng)卡是LAN91C96,U-Boot自帶的驅(qū)動(dòng)程序drivers/lan91c96.c恰好支持這個(gè)網(wǎng)卡,因此只需在include/Configs/xsbase255.h中添加相應(yīng)的配置即可:

#define CONFIG_DRIVER_IAN91C96

#define CONFIG_LAN91C96_BASE 0x0C000300

CONFIG_LAN91C96_BASE定義的值,應(yīng)當(dāng)由網(wǎng)卡的片選地址和I/O基址決定。如果U-Boot固有的驅(qū)動(dòng)程序沒有對(duì)目標(biāo)板的支持,就需要自行在board/xsbase255目錄下添加驅(qū)動(dòng)程序,然后將其添加到本目錄的Makefile中進(jìn)行編譯和鏈接。Makefile文件 Makefile 一個(gè)工程中的源文件不計(jì)數(shù),其按類型、功能、模塊分別放在若干個(gè)目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作,因?yàn)?makefile就像一個(gè)Shell腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。

4 U-Boot的編譯和下載調(diào)試

在U-Boot根目錄里輸入命令:

make xsbase255_config

該命令通過。/mkconfig腳本生成include/config.mk的配置文件,然后運(yùn)行make命令,完成編譯。如果在編譯過程中出現(xiàn)錯(cuò)誤,可根據(jù)錯(cuò)誤的提示逐一排查。完成了錯(cuò)誤的修改,在重新編譯前,先運(yùn)行make distclean命令,對(duì)先前編譯生成的文件進(jìn)行徹底的清除。

成功編譯后,會(huì)生成3種不同的映像格式,分別是:u-boot:。bin(二進(jìn)制格式),u-boot(ELF格式)和u-boot.srec(S—Record格式),根據(jù)加載器的不同,選擇合適的格式燒寫到FLASH中進(jìn)行運(yùn)行調(diào)試。在此選擇u-boot.bin,直接按照二進(jìn)制格式下載。

最有效的調(diào)試方法是下載映像到FLASH,使用硬件仿真器進(jìn)行跟蹤調(diào)試。但是由于硬件仿真器價(jià)格高等客觀因素,采用軟件跟蹤的方法,利用目標(biāo)板上的LED燈做出判斷。一旦可以打印串口信息,就可以利用串口,將調(diào)試信息輸出到屏幕上。

5 結(jié) 語

U-Boot是一個(gè)功能強(qiáng)大的:Bootloader開發(fā)軟件,對(duì)多種開發(fā)板的支持使得它可以方便地移植到目標(biāo)板上。首先詳細(xì)分析U-Boot啟動(dòng)流程,然后詳細(xì)介紹U-Boot在PXA255目標(biāo)板上移植的全過程。目前U-Boot已經(jīng)在目標(biāo)板上穩(wěn)定的運(yùn)行,為L(zhǎng)inux內(nèi)核的移植打下了堅(jiān)實(shí)的基礎(chǔ)。



admin

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

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

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

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

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

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(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ì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

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

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(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)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

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