日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年07月28日(星期一)

2021年07月28日 | 23. 基于Cortex-A9 uboot代碼啟動分析

發(fā)布者:chenxiaohong68 來源: eefocus關(guān)鍵字:Cortex-A9  uboot 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

前言

我們在前面的arm系列課程,已經(jīng)講解了arm的架構(gòu)、匯編指令、異常、常用外設(shè)的控制器驅(qū)動,那么我們已經(jīng)具備開發(fā)arm系列產(chǎn)品的基本技能。


本篇給大家介紹一款比較常用的bootloader:uboot,通過uboot的介紹以及源代碼的詳細(xì)分析,讓大家把之前所有ARM相關(guān)的知識點(diǎn)融會貫通起來。


一、uboot

1. 概念

U-Boot 是一個主要用于嵌入式系統(tǒng)的引導(dǎo)加載程序,可以支持多種不同的計算機(jī)系統(tǒng)結(jié)構(gòu),包括PPC、ARM、AVR32、MIPS、x86、68k、Nios與MicroBlaze。這也是一套在GNU通用公共許可證之下發(fā)布的自由軟件。


U-Boot不僅僅支持嵌入式Linux系統(tǒng)的引導(dǎo),它還支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系統(tǒng)。其目前要支持的目標(biāo)操作系統(tǒng)是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS, android。


2. uboot基本功能

U-Boot可支持的主要功能列表:

  • 系統(tǒng)引導(dǎo)支持NFS掛載、RAMDISK(壓縮或非壓縮)形式的根文件系統(tǒng);支持NFS掛載、從FLASH中引導(dǎo)壓縮或非壓縮系統(tǒng)內(nèi)核;

  • 基本輔助功能強(qiáng)大的操作系統(tǒng)接口功能;可靈活設(shè)置、傳遞多個關(guān)鍵參數(shù)給操作系統(tǒng),適合系統(tǒng)在不同開發(fā)階段的調(diào)試要求與產(chǎn)品發(fā)布,尤以Linux支持最為強(qiáng)勁;支持目標(biāo)板環(huán)境參數(shù)多種存儲方式,如FLASH、NVRAM、EEPROM;

  • CRC32校驗(yàn)可校驗(yàn)FLASH中內(nèi)核、RAMDISK鏡像文件是否完好;

  • 設(shè)備驅(qū)動串口、SDRAM、FLASH、以太網(wǎng)、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等驅(qū)動支持;

  • 上電自檢功能SDRAM、FLASH大小自動檢測;SDRAM故障檢測;CPU型號。

3. 常用命令

uboot命令比較多,下面只列舉網(wǎng)絡(luò)啟動要用到的命令:

命令含義
bootdelay執(zhí)行自動啟動(bootcmd中的命令)的等候秒數(shù)
baudrate串口控制臺的波特率
netmask以太網(wǎng)的網(wǎng)絡(luò)掩碼
ethaddr以太網(wǎng)的MAC地址
bootfile默認(rèn)的下載文件名
printenv打印Uboot環(huán)境變量
setenv設(shè)置Uboot環(huán)境變量
ipaddr本地的IP地址
serveripTFTP服務(wù)器端的IP地址
gateway以太網(wǎng)的網(wǎng)關(guān)
bootcmd自動啟動時執(zhí)行命令
bootargs傳遞給Linux內(nèi)核的啟動參數(shù)
bootm引導(dǎo)啟動存儲在內(nèi)存中的程序映像。這些內(nèi)存包括RAM和可以永久保存的Flash。

4. 配置參數(shù)舉例

以下以網(wǎng)絡(luò)下載內(nèi)核、網(wǎng)絡(luò)掛載nfs為例。


1)ubuntu環(huán)境

ubuntu ip:192.168.6.186

nfs配置:

配置文件如下:

/etc/exports


配置信息如下:

nfs


2)開發(fā)板設(shè)置

開發(fā)板ip:192.168.6.187

配置命令:


setenv ipaddr 192.168.6.187      ;板子的ip

setenv serverip 192.168.6.186    ;虛擬機(jī)的ip

setenv gatewayip 192.168.1.1     ;網(wǎng)關(guān)

saveenv                          ;保存配置


  • 加載內(nèi)核和設(shè)備樹

setenv bootcmd tftp 41000000 uImage;tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000 - 42000000


bootcmd:uboot2啟動之后,首先先執(zhí)行找到這個參數(shù),執(zhí)行后面的命令。
從tftp服務(wù)器下載內(nèi)核鏡像uImage到地址41000000,設(shè)備樹文件exynos4412-fs4412.dtb到42000000,并通過命令bootm加載啟動內(nèi)核。

  • 掛載nfs

setenv bootargs root=/dev/nfs nfsroot=192.168.6.186:/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.6.187


掛載nfs文件系統(tǒng),

  • root=/dev/nfs

  • nfsroot=192.168.6.186:/rootfs nfs服務(wù)器地址192.168.6.186,目錄為/rootfs,

  • rw 文件系統(tǒng)操作權(quán)限為可續(xù)寫

  • console=ttySAC2,115200 串口名稱和波特率

  • init=/linuxrc 內(nèi)核啟動后運(yùn)行的進(jìn)程為linuxrc

  • ip=192.168.6.187 開發(fā)板地址

二、exynos-4412 Soc 啟動順序

要想了解exynos-4412的啟動順序,我們首先需要了解該soc的內(nèi)存布局。

1. exynos-4412內(nèi)存布局

通常一款soc的內(nèi)存在廠家設(shè)計的時候就已經(jīng)規(guī)定死了,對于使用者來說,我們無法改變。

memery map我們只關(guān)心和啟動相關(guān)的一個地址,

  1. iROM 在soc內(nèi)部,出廠時廠家固化了特定的程序,iROM中程序?qū)?yīng)用戶來說不可改變

  1. iRAM 在soc內(nèi)部,速度較快,但空間不大

  1. DMC RAM控制器,位于SOC內(nèi)部,用于驅(qū)動RAM,大容量的RAM都需要連接到該控制器

2. Booting Sequence

不同的廠家的啟動順序是不太一樣的,本篇主要以三星的exynos-4412 soc為基礎(chǔ),講解該基于該板子的uboot啟動順序。


根據(jù)上圖,系統(tǒng)啟動的大概順序:

  • iROM在SOC內(nèi)部,是一個64KB的ROM,他樹池化一些系統(tǒng)啟動必須的功能。比如:時鐘、棧。

  • iROM負(fù)責(zé)從特殊的啟動外設(shè)加載BL1的image到soc內(nèi)部的256KB的SRAM中。啟動的外設(shè)由操作按鈕來決定的。根據(jù)不同按鍵的值,iROM將會對bl1 的image做不同的校驗(yàn)。

  • BL1初始化系統(tǒng)時鐘和DRAM控制器,然后從啟動外設(shè)加載OS image到DRAM中。根據(jù)啟動按鈕的值的不同,BL1會對OS做不同的校驗(yàn)。

  • 啟動完成之后,BL1跳轉(zhuǎn)到操作系統(tǒng)(kernel)。

iROM會根據(jù)OM 引腳的不同選擇不同的啟動設(shè)備,對應(yīng)的OM寄存器需要提供對應(yīng)的啟動信息。


三、內(nèi)核啟動流程概述

1. 內(nèi)核啟動流程 概述

uboot啟動流程
如上圖所示:

  1. 設(shè)備上電之后,先執(zhí)行iROM中的出廠代碼,先進(jìn)行必要硬件的初始化
    去執(zhí)行uboot,

  2. 通常把kernel、設(shè)備樹文件放到flash中

  3. 程序啟動之后,往往先從flash啟動,運(yùn)行uboot

  4. 第一步:先進(jìn)行硬件的初始化(svc模式棧、clock、內(nèi)存、串口)
    第二步:自搬移:把uboot從flash中拷貝到RAM中,跳轉(zhuǎn)到RAM中執(zhí)行剩下的uboot代碼
    第三步:把內(nèi)核拷貝到RAM中,執(zhí)行內(nèi)核,把控制權(quán)交給內(nèi)核。


2. 內(nèi)核啟動詳細(xì)流程

開發(fā)板從上電到啟動內(nèi)核的過程

四、uboot啟動流程代碼詳解

在三星的SoC中, 啟動流程可以分為三個階段BL0, BL1, BL2, BL3, 三星自己的手冊對BL1的解釋也不盡相同, 一種是將在iRAM中運(yùn)行的程序都?xì)w結(jié)為BL1; 一種是將iRAM中三星加密的代碼bl1.bin作為BL1, iRAM中剩余的部分作為BL2, 本文采用后者, 他們的主要分工如下:

  • BL0: ARM的起始地址都是0地址, 三星的芯片一般將0地址映射到iROM中, BL0就是指iROM中固化的啟動代碼, 主要負(fù)責(zé)加載BL1

  • BL1: 三星對于bootloader的加密代碼bl1.bin, 要放在外設(shè)中uboot.bin的頭上, 和一部分uboot.bin一起加載到iRAM中運(yùn)行.

  • BL2: 從(nand/sd/usb)中拷貝的uboot.bin頭最大14K到iRAM中代碼中除去bl1.bin后剩余的部分, 負(fù)責(zé)設(shè)置CPU為SVC模式, 關(guān)閉MMU, 關(guān)閉中斷, 關(guān)閉iCache, 關(guān)閉看門狗, 初始化DRAM,初始化時鐘, 初始化串口, 設(shè)置棧, 校驗(yàn)BL2并將其搬移到DRAM高位地址, 重定位到DRAM中執(zhí)行BL3

  • BL3:是指在代碼重定向后在內(nèi)存中執(zhí)行的uboot的完整代碼, 負(fù)責(zé)初始化外設(shè),更新向量表, 清BSS, 準(zhǔn)備內(nèi)核啟動參數(shù), 加載并運(yùn)行OS內(nèi)核

可以借助下圖理解這個流程

img

我們常說的uboot是一個兩階段bootloader,就是指上述的BL2和BL3. BL2主要做硬件直接相關(guān)的初始化,使用匯編編寫;BL3主要為操作系統(tǒng)的運(yùn)行準(zhǔn)備環(huán)境,主要用C編寫,這里以ARM平臺為例分析其啟動流程。下面是啟動過程中主要涉及的文件


arch/arm/cpu/armv7/start.S

board/samsung/myboard/lowlevel_init.S

arch/arm/lib/crt0.S

arch/arm/lib/board.c

arch/samsung/myboard/myboard.c


1. BL2

BL2的主要文件和任務(wù)流程如下


arch/arm/cpu/armv7/start.S

1. 設(shè)置CPU為SVC模式

2. 關(guān)閉MMU

3. 關(guān)閉Cache

4. 跳轉(zhuǎn)到lowlevel_init.S low_level_init

board/samsung/origen/lowlevel_init.S

5. 初始化時鐘

6. 初始化內(nèi)存

7. 初始化串口

8. 關(guān)閉看門狗

9. 跳轉(zhuǎn)到crt0.S _main

arch/arm/lib/crt0.S

10. 設(shè)置棧

11. 初始化C運(yùn)行環(huán)境

12. 調(diào)用board_init_f()

arch/arm/lib/board.c

13. board_init_f對全局信息GD結(jié)構(gòu)體進(jìn)行填充

arch/arm/lib/crt0.S

14. 代碼重定位------------BL2的最后的工作, 執(zhí)行完就進(jìn)入DRAM執(zhí)行BL2


2. lds文件

要想了解uboot整個項(xiàng)目的代碼流程,必須首先了解鏈接腳本【鏈接腳本參考《7. 從0開始學(xué)ARM-GNU偽指令,lds使用》】。


該文件決定了uboot最終生成的鏡像文件,各個段的布局。


uboot鏈接腳本如下:


u-boot-2013.01/arch/arm/cpu/u-boot.lds

文件內(nèi)容:


26 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

 27 OUTPUT_ARCH(arm)

 28 ENTRY(_start)

 29 SECTIONS 30 {

 31     . = 0x00000000;

 32 

 33     . = ALIGN(4);

 34     .text :

 35     {

 36         __image_copy_start = .;

 37         CPUDIR/start.o (.text*)

 38         *(.text*)

 39     }

 40 

 41     . = ALIGN(4);

 42     .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

 43 

 44     . = ALIGN(4);

 45     .data : {

 46         *(.data*)

 47     }

 48 

 49     . = ALIGN(4);

 50 

 51     . = .;

 52 

 53     . = ALIGN(4);

 54     .u_boot_list : {

 55     #include

 56     }

 57 

 58     . = ALIGN(4);

 59 

 60     __image_copy_end = .;

 61 

 62     .rel.dyn : {

 63         __rel_dyn_start = .;

 64         *(.rel*)

 65         __rel_dyn_end = .;

 66     }

 67 

 68     .dynsym : {

 69         __dynsym_start = .;

 70         *(.dynsym)

 71     }

 72 

 73     _end = .;

 74 

 75     /*

 76      * Deprecated: this MMU section is used by pxa at present but

 77      * should not be used by new boards/CPUs.

 78      */

 79     . = ALIGN(4096);

 80     .mmutable : {

 81         *(.mmutable)

 82     }

 83 

 84     .bss __rel_dyn_start (OVERLAY) : {

 85         __bss_start = .;

 86         *(.bss*)

 87          . = ALIGN(4);

 88         __bss_end__ = .;

 89     }

 90 

 91     /DISCARD/ : { *(.dynstr*) }

 92     /DISCARD/ : { *(.dynamic*) }

 93     /DISCARD/ : { *(.plt*) }

 94     /DISCARD/ : { *(.interp*) }

 95     /DISCARD/ : { *(.gnu*) }

 96 }

 97


核心內(nèi)容解釋:


 27 OUTPUT_ARCH(arm)       :    該鏡像運(yùn)行在arm架構(gòu)的硬件上 28 ENTRY(_start)          :    程序的入口是 _start 29 SECTIONS 30 {

 31  . = 0x00000000;      :   程序的鏈接地址,不是運(yùn)行地址【uboot一定是位置無關(guān)碼】 34     .text :

 35     {

 36         __image_copy_start = .;    : 宏對應(yīng)整個程序編譯好后首地址,自搬移代碼的初始位置 37         CPUDIR/start.o (.text*)    : 第一個目標(biāo)文件CPUDIR/start.o中的代碼段 38         *(.text*)                  : 剩下的目標(biāo)文件的代碼段 39     }

 60     __image_copy_end = .;          : 自搬移代碼的結(jié)束為止

BSS全局未初始化變量、全局初始化為0的變量所在的段:


 84     .bss __rel_dyn_start (OVERLAY) : {

 85         __bss_start = .;

 88         __bss_end__ = .;

 89     }


3. uboot啟動代碼流程概要

代碼只分析到uboot命令行,函數(shù)main_loop()位置。

4. 啟動代碼詳細(xì)分析

_start入口位于以下文件:


u-boot-2013.01/arch/arm/cpu/armv7/start.S

第一階段:

第二階段

第二階段代碼從_main開始:

以上代碼詳細(xì)解釋,請結(jié)合B站視頻同步學(xué)習(xí)。


五、uboot啟動的幾個關(guān)鍵知識點(diǎn)

如何判斷第一條機(jī)器指令的位置?

鏈接腳本決定了內(nèi)存的布局。


uboot鏈接腳本如下:


u-boot-2013.01/arch/arm/cpu/u-boot.lds

文件內(nèi)容:


 28 ENTRY(_start)

 29 SECTIONS 30 {

 31     . = 0x00000000;

 32

uboot的入口是

鏈接地址是


uboot如何搬運(yùn)代碼?

代碼位于:

u-boot-2013.01/arch/arm/cpu/armv7/start.S

搬移代碼如下:


ENTRY(relocate_code)

mov r4, r0 /* save addr_sp */

mov r5, r1 /* save addr of gd */

mov r6, r2 /* save addr of destination */


adr r0, _start

cmp r0, r6

moveq r9, #0/* no relocation. relocation offset(r9) = 0 */

beq relocate_done /* skip relocation */

mov r1, r6 /* r1 <- scratch for copy_loop */

ldr r3, _image_copy_end_ofs

add r2, r0, r3 /* r2 <- source end address     */copy_loop:

ldmia r0!, {r9-r10}/* copy from source address [r0]    */

stmia r1!, {r9-r10}/* copy to   target address [r1]    */

cmp r0, r2 /* until source end address [r2]    */

blo copy_loop


詳情參考第四章,第3節(jié)。


uboot中,如何判斷此次開機(jī)是從斷電狀態(tài)開機(jī)還是從休眠狀態(tài)啟動的?

board/samsung/fs4412/lowlevel_init.S

代碼如下:


 41   lowlevel_init:

 54     /* AFTR wakeup reset */

 55     ldr r2, =S5P_CHECK_DIDLE 56     cmp r1, r2 57     beq exit_wakeup 58 

 59     /* LPA wakeup reset */

 60     ldr r2, =S5P_CHECK_LPA 61     cmp r1, r2 62     beq exit_wakeup 63 

 64     /* Sleep wakeup reset */

 65     ldr r2, =S5P_CHECK_SLEEP 66     cmp r1, r2 67     beq wakeup_reset 112 wakeup_reset:

 113     bl system_clock_init 114     bl mem_ctrl_asm_init 115     bl tzpc_init 116 

 117 exit_wakeup:

 118     /* Load return address and jump to kernel */

[1] [2]
關(guān)鍵字:Cortex-A9  uboot 引用地址:23. 基于Cortex-A9 uboot代碼啟動分析

上一篇:13. 從0學(xué)ARM-Cortex-A9 RTC裸機(jī)程序編寫
下一篇:15. 從0開始學(xué)ARM-位置無關(guān)碼

推薦閱讀

?7月26日,深圳市人民政府與哈爾濱工程大學(xué)在深圳簽署了戰(zhàn)略合作框架協(xié)議,雙方約定將攜手在深圳共建海洋研究院。根據(jù)協(xié)議,深圳市將支持哈工程在深圳設(shè)立“哈爾濱工程大學(xué)深圳海洋研究院”。該研究院將圍繞“一帶一路”、粵港澳大灣區(qū)、軍民融合發(fā)展等國家重大倡議和戰(zhàn)略,匯聚雙方優(yōu)勢資源,以知識創(chuàng)新為基礎(chǔ),以技術(shù)創(chuàng)新為手段,以科技成果轉(zhuǎn)化為突破...
(記者梁明星)昨天,安徽省能源局和安徽省電力有限公司聯(lián)合發(fā)布全省電力供應(yīng)藍(lán)色預(yù)警,這是今年夏季首次發(fā)出預(yù)警。如高溫大負(fù)荷進(jìn)一步攀升,或?qū)⒊霈F(xiàn)一定的電力供應(yīng)缺口,供電部門倡議市民節(jié)約用電、錯峰用電。 受大范圍持續(xù)高溫影響,7月26日13時05分,合肥電網(wǎng)最大負(fù)荷再創(chuàng)歷史新高,達(dá)到761.6萬千瓦。這是繼7月22日以來,連續(xù)第五天最大負(fù)荷創(chuàng)紀(jì)錄...
作為一座集成電路產(chǎn)業(yè)發(fā)展“后起之秀”,合肥的企業(yè)集聚效應(yīng)正在持續(xù)放大,產(chǎn)業(yè)鏈條也逐步得到完善。截至2019年底,合肥的集成電路產(chǎn)業(yè)相關(guān)企業(yè)已有253家,覆蓋IC設(shè)計、制造、封裝測試及設(shè)備材料全產(chǎn)業(yè)鏈上下游。在合肥這片嶄新的沃土之上,所有集成電路企業(yè)都與這座城市形成了良好的呼應(yīng),集群滋養(yǎng)著個體,個體強(qiáng)大著集群。以晶合集成為例,這家立志成為...
TDK集團(tuán)推出新的愛普科斯 (EPCOS) B82472D6*系列耦合電感器,擴(kuò)展了耦合電感產(chǎn)品組合。新系列包括9個產(chǎn)品,電感范圍為2 x 2.2 μH 至 2 x 47 μH,最大額定電流從1.1 A 至 4.3 A。其中,兼容RoHS指令的扼流圈獲得 AEC-Q200 認(rèn)證,并具有高達(dá)7.95 A的大飽和電流;而磁屏蔽電感器的尺寸僅為 7.3 x 7.3 x 4.8 mm,適用于 -55 °C ...

史海拾趣

問答坊 | AI 解惑

AKA嵌入式應(yīng)用技術(shù)免費(fèi)講座--FPGA專題

AKA嵌入式應(yīng)用技術(shù)免費(fèi)講座--FPGA專題 講座主辦:AKA信息技術(shù)小組 技術(shù)支持:Red Logic工作室 一.講座簡介 近幾年, 隨著FPGA技術(shù)的發(fā)展與成熟, FPGA以其“靈活的可編程技術(shù)”及越來越高的性價比倍受電子產(chǎn)品企業(yè)的關(guān)注,越來越多的嵌入式產(chǎn) ...…

查看全部問答∨

基于51單片機(jī)的數(shù)字信號發(fā)生器

基于51單片機(jī)的數(shù)字信號發(fā)生器,好東西哦 .................…

查看全部問答∨

關(guān)于單片機(jī)主程序中while(1)循環(huán)的作用的驗(yàn)證

起因:最近在學(xué)習(xí)proteus,在最開始編寫仿真實(shí)例的源程序文件時,為了省事,就沒有在主程序中加入while(1)這個無限循環(huán)(或者成為死循環(huán))。但是在進(jìn)行仿真延時的時候,無意間發(fā)現(xiàn)程序走到最后并不會停下來,而是會去干一些別的沒有讓它做的事情。 ...…

查看全部問答∨

請問DCDC中反饋端加入的Cfwd主要起什么作用?

今天在看一個datasheet of DCDC BUCK過程中,看到反饋端到Vout有一個Cfwd,不知道是做什么用的?請教各位 是不常么?…

查看全部問答∨

關(guān)于date time picker控件的問題

我在一個對話框上加上一個Date Time Picker后怎么對話框就不能初始化了,用DialogBox之后每一點(diǎn)反應(yīng),去掉這個控件之后就可以了,請大俠們幫我分析下。小弟在此先謝了?。 ?

查看全部問答∨

編譯truecrypt開源代碼時出錯

其中環(huán)境要求是nasm 0.99 assemble,我在網(wǎng)上沒找到這個版本的程序. 如果用高點(diǎn)的版本的話就出現(xiàn)namke fatal error U1045, no error; 如果用nasm 0.98編譯就出現(xiàn)fatal error u1077:\'nasm.exe\';return code \'0x1\'. 有誰知道嗎? 也可以有相關(guān) ...…

查看全部問答∨

請教各位關(guān)于驅(qū)動中的SLEEP函數(shù)

各位同志:     我的觸摸屏驅(qū)動中有個采電壓的函數(shù),這個函數(shù)通過讀AC97取得電壓量 其中有一段小的延時程序:                 do             &n ...…

查看全部問答∨

我想問一下可以用什么芯片替代TLC14、AD623、ADP1111

我在杭州買不到TLC14、AD623、ADP1111這幾個芯片,所以想問一下各位那些常用的芯片可以替代上面幾個芯片。我初學(xué)電子方面的內(nèi)容,對各個芯片不太熟悉,望各位指點(diǎn),謝謝?。。。 ?

查看全部問答∨

我的IAR MSP430 怎么沒C-SPY

我的是IAR MSP430 最新板,并成功破解,破解之后,發(fā)現(xiàn)我的debug菜單總是灰的,無論你怎么選擇,怎么編譯就是灰色,請路過大俠,高手們支招我怎么才能讓C-Spy好用?!?

查看全部問答∨

求CosmicCxST7license

那個有16K版本的license  發(fā)我份  現(xiàn)在官方那個申請不到了, 或者那個告訴我一個解決方法啊  怎么用Cosmic  啊    4K的太小了…

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved