嵌入式ARM-Linux平台上的编译、配置和运行使用

发布者:灵感发电站最新更新时间:2016-07-14 来源: eefocus关键字:ARM-Linux平台  编译  配置  运行使用 手机看文章 扫描二维码
随时随地手机看文章
本文介绍了嵌入式ARM-Linux上的常用应用程序wpa_supplicant(以及wpa_supplicant依赖的libnl和openssl)的编译、配置和运行使用,iw、hostapd等应用的编译和使用。

wpa_supplicant 编译和配置运行

https://w1.fi/wpa_supplicant/ (git地址git://w1.fi/hostap.git)下载最新的wpa_supplicant源码压缩包,目前最新的为版本2.5. wpa_supplicant的编译依赖于openssl和libnl库(Netlink Protocol Library Suite (libnl)),openssl是ssl协议的开源库(OpenSSL , Secure Sockets Layer (SSL v2/v3) Transport Layer Security (TLS v1)).(压缩包地址:http://www.openssl.org/source/ ,Git地址:https://github.com/openssl/openssl ),libnl是网络相关的库(压缩包地址:http://www.infradead.org/~tgr/libnl/ , Git地址 : http://git.infradead.org/users/tgr/libnl.git)。

编译libnl

解压源代码包。进入libnl目录,执行 ./configure 配置编译环境;执行make进行编译

export ARCH=arm

export CROSS_COMPILE=arm-linux-gnueabi-

./configure --prefix=/usr     \

            --sysconfdir=/etc \

            --disable-static  &&

make

然后执行sudo make install,libnl.so会被安装至/usr/local/lib/目录下,相应的头文件也会被copy到/usr/local/include/netlink下。

如果报出编译错误:“../include/netlink_local.h:218:error 'ULONG_MAX' undeclared",我们在对应文件添加一个头文件 #include即可解决问题;

编译openssl

进入openssl目录, ./config shared # 一定要加shared, 否则编译出来的是静态库。执行make进行编译,完成后执行make install,编译好的openssl库和头文件等被安装在目录/usr/local/ssl下

export ARCH=arm

export CROSS_COMPILE=arm-linux-gnueabi-

./config --prefix=/usr         \

         --openssldir=/etc/ssl \

         --libdir=lib          \

         shared                \

         zlib-dynamic &&

make

If you want to disable installing the static libraries, use this sed:

sed -i 's# libcrypto.a##;s# libssl.a##' Makefile

Now, as the root user:

make MANDIR=/usr/share/man MANSUFFIX=ssl install &&

install -dv -m755 /usr/share/doc/openssl-1.0.2e  &&

cp -vfr doc/*     /usr/share/doc/openssl-1.0.2e

编译wpa_supplicant

添加修改配置文件

进入wpa_supplicant/wpa_supplicant目录,执行cp defconfig .config 拷贝生成编译配置,然后修改配置文件 .config,

#如果选择的不是libnl的1.0版本,需要根据libnl的版本打开下面的选项

CONFIG_LIBNL32=y

CONFIG_LIBNL20=y 选择libnl的版本

#添加openssl和libnl的头文件和库文件目录,更新编译链接环境变量

CFLAGS += -I/usr/local/ssl/include
CFLAGS += -I/usr/local/include/ libnl3
CFLAGS += -I/usr/local/include/netlink
LIBS += -L/usr/local/ssl/lib
LIBS += -L/usr/local/lib
LIBS_p += -L/usr/local/ssl/lib # 不加此行,编wpa_passphrase出错。

cp defconfig .config

make CC=arm-linux-gnueabi-gcc

make install DESTDIR=/home/export/rootfs

执行make进行编译

成功后生成三个目标文件wpa_supplicant, wpa_cli, wpa_passphrase,至此编译完成。

运行wpa_supplicant

需要保证libssl库在我们的搜索路径里,否则不做处理,会出现找不到libnl, ssl 和crypto库的错误。

./wpa_supplicant

./wpa_supplicant: error while loading shared libraries: libssl.so.1.1.0: cannot open shared object file: No such file or directory

将/usr/local/ssl/lib下的libssl.so.x.x.x 和 libcrypto.so.xxx 拷贝到/lib目录下即可,或者:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib,或者在/etc/ld.so.conf 文件中添加库的搜索路径。(或者在/etc/ld.so.conf.d 下新建一个.conf文件,将搜索路径一行一个加入).

cp /usr/arm-linux-gnueabi/lib/libnl.so.1.1.4 /home/export/rootfs/lib/

cp /usr/arm-linux-gnueabi/lib/libcrypto.so.1.0.0 /home/export/rootfs/lib/

cp /usr/arm-linux-gnueabi/lib/libssl.so.1.0.0 /home/export/rootfs/lib/

配置wpa_supplicant

wpa_supplicant runs as a daemon and requires a configuration file. Create a file called /etc/wpa_supplicant.conf with the following contents:

network={

 ssid="MySSID"

 key_mgmt=WPA-PSK

 proto=RSN

 pairwise=CCMP TKIP

 psk="MyPassPhrase"

}

The above file works with both WPA (TKIP) and WPA2 (CCMP/AES). Please insert your access point name at MySSID and your pass phrase at MyPassPhase.

Once configured, wpa_supplicant can be started using:

wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

  
编译错误处理

Error#1

#######################################################################
CC  ../src/drivers/driver_wired.c
../src/drivers/driver_nl80211.c:25:31: fatal error: netlink/genl/genl.h: No such file or directory
compilation terminated.
make: *** [../src/drivers/driver_nl80211.o] Error 1
#######################################################################

Solution #1
sudo apt-get -y install libssl-dev libnl-3-dev
echo CFLAGS +=-I/usr/include/libnl3/ >> .config

make

Error#2
../src/drivers/driver_nl80211.c:95:9: warning: passing argument 1 of ‘genl_ctrl_alloc_cache’ from incompatible pointer type [enabled by default]
/usr/include/libnl3/netlink/genl/ctrl.h:25:14: note: expected ‘struct nl_sock *’ but argument is of type ‘struct nl_handle *’
../src/drivers/driver_nl80211.c:95:9: error: too few arguments to function ‘genl_ctrl_alloc_cache’
/usr/include/libnl3/netlink/genl/ctrl.h:25:14: note: declared here

Solution #2

sudo apt-get install libnl-genl-3-dev
echo CONFIG_LIBNL32=y >> .config


make
Usage

usage:
wpa_supplicant [-BddhKLqqtvW] [-P] [-g] \
[-G] \
-i -c [-C] [-D] [-p] \
[-b] [-e] \
[-o] [-O] \
[-N -i -c [-C] [-D] \
[-p] [-b] [-I] …]


drivers:
nl80211 = Linux nl80211/cfg80211
wext = Linux wireless extensions (generic)
wired = Wired Ethernet driver
options:
-b = optional bridge interface name
-B = run daemon in the background
-c = Configuration file
-C = ctrl_interface parameter (only used if -c is not)
-i = interface name
-I = additional configuration file
-d = increase debugging verbosity (-dd even more)
-D = driver name (can be multiple drivers: nl80211,wext)
-e = entropy file
-g = global ctrl_interface
-G = global ctrl_interface group
-K = include keys (passwords, etc.) in debug output
-t = include timestamp in debug messages
-h = show this help text
-L = show license (BSD)
-o = override driver parameter for new interfaces
-O = override ctrl_interface parameter for new interfaces
-p = driver parameters
-P = PID file
-q = decrease debugging verbosity (-qq even less)
-v = show version
-W = wait for a control interface monitor before starting
-N = start describing new interface
example:
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf

wpa_cli [-pctrl sockets>] [-i] [-hvB] [-a] \
[-P] [-g] [-G]  [command..]
-h = help (show this usage text)
-v = shown version information
-a = run in daemon mode executing the action file based on events from
wpa_supplicant
-B = run a daemon in the background
default path: /var/run/wpa_supplicant
default interface: first interface found in socket path
commands:
status [verbose] = get current WPA/EAPOL/EAP status
ifname = get current interface name
ping = pings wpa_supplicant
relog = re-open log-file (allow rolling logs)
note = add a note to wpa_supplicant debug log
mib = get MIB variables (dot1x, dot11)
help [command] = show usage help
interface [ifname] = show interfaces/select interface
level = change debug level
license = show full wpa_cli license
quit = exit wpa_cli
set = set variables (shows list of variables when run without arguments)
get = get information
logon = IEEE 802.1X EAPOL state machine logon
logoff = IEEE 802.1X EAPOL state machine logoff
pmksa = show PMKSA cache
reassociate = force reassociation
preauthenticate = force preauthentication
identity = configure identity for an SSID
password = configure password for an SSID
new_password = change password for an SSID
pin = configure pin for an SSID
otp = configure one-time-password for an SSID
passphrase = configure private key passphrase
for an SSID
sim = report SIM operation result
bssid = set preferred BSSID for an SSID
blacklist = add a BSSID to the blacklist
blacklist clear = clear the blacklist
blacklist = display the blacklist
log_level [] = update the log level/timestamp
log_level = display the current log level and log options
list_networks = list configured networks
select_network = select a network (disable others)
enable_network = enable a network
disable_network = disable a network
add_network = add a network
remove_network = remove a network
set_network = set network variables (shows
list of variables when run without arguments)
get_network = get network variables
list_creds = list configured credentials
add_cred = add a credential
remove_cred = remove a credential
set_cred = set credential variables
save_config = save the current configuration
disconnect = disconnect and wait for reassociate/reconnect command before
connecting
reconnect = like reassociate, but only takes effect if already disconnected
scan = request new BSS scan
scan_results = get latest scan results
bss < | > = get detailed scan result info
get_capability = get capabilies
reconfigure = force wpa_supplicant to re-read its configuration file
terminate = terminate wpa_supplicant
interface_add
= adds new interface, all parameters but
are optional
interface_remove = removes the interface
interface_list = list available interfaces
ap_scan = set ap_scan parameter
scan_interval = set scan_interval parameter (in seconds)
bss_expire_age = set BSS expiration age parameter
bss_expire_count = set BSS expiration scan count parameter
bss_flush = set BSS flush age (0 by default)
stkstart = request STK negotiation with
ft_ds = request over-the-DS FT with
wps_pbc [BSSID] = start Wi-Fi Protected Setup: Push Button Configuration
wps_pin [PIN] = start WPS PIN method (returns PIN, if not hardcoded)
wps_check_pin = verify PIN checksum
wps_cancel Cancels the pending WPS operation
wps_reg = start WPS Registrar to configure an AP
wps_ap_pin [params..] = enable/disable AP PIN
wps_er_start [IP address] = start Wi-Fi Protected Setup External Registrar
wps_er_stop = stop Wi-Fi Protected Setup External Registrar
wps_er_pin = add an Enrollee PIN to External Registrar
wps_er_pbc = accept an Enrollee PBC using External Registrar
wps_er_learn = learn AP configuration
wps_er_set_config = set AP configuration for enrolling
wps_er_config = configure AP
ibss_rsn = request RSN authentication with in IBSS
sta = get information about an associated station (AP)
all_sta = get information about all associated stations (AP)
deauthenticate = deauthenticate a station
disassociate = disassociate a station
chan_switch [sec_channel_offset=] [center_freq1=] [center_freq2=] [bandwidth=] [blocktx] [ht|vht] = CSA parameters
suspend = notification of suspend/hibernate
resume = notification of resume/thaw
drop_sa = drop SA without deauth/disassoc (test command)
roam = roam to the specified BSS
p2p_find [timeout] [type=*] = find P2P Devices for up-to timeout seconds
p2p_stop_find = stop P2P Devices search
p2p_connect <“pbc”|PIN> [ht40] = connect to a P2P Device
p2p_listen [timeout] = listen for P2P Devices for up-to timeout seconds
p2p_group_remove = remove P2P group interface (terminate group if GO)
p2p_group_add [ht40] = add a new P2P group (local end as GO)
p2p_prov_disc = request provisioning discovery
p2p_get_passphrase = get the passphrase for a group (GO only)
p2p_serv_disc_req = schedule service discovery request
p2p_serv_disc_cancel_req = cancel pending service discovery request
p2p_serv_disc_resp

= service discovery response
p2p_service_update = indicate change in local services
p2p_serv_disc_external = set external processing of service discovery
p2p_service_flush = remove all stored service entries
p2p_service_add = add a local service
p2p_service_del [|service] = remove a local service
p2p_reject = reject connection attempts from a specific peer
p2p_invite [peer=addr] = invite peer
p2p_peers [discovered] = list known (optionally, only fully discovered) P2P peers
p2p_peer
= show information about known P2P peer
p2p_set = set a P2P parameter
p2p_flush = flush P2P state
p2p_cancel = cancel P2P group formation
p2p_unauthorize

= unauthorize a peer


p2p_presence_req [ ] [ ] = request GO presence
p2p_ext_listen [ ] = set extended listen timing
p2p_remove_client = remove a peer from all groups
sta_autoconnect <0/1> = disable/enable automatic reconnection
tdls_discover = request TDLS discovery with
tdls_setup = request TDLS setup with
tdls_teardown = tear down TDLS with
signal_poll = get signal parameters
pktcnt_poll = get TX/RX packet counters
reauthenticate = trigger IEEE 802.1X/EAPOL reauthentication
raw = Sent unprocessed command
flush = flush wpa_supplicant state
radio_work = radio_work
Configuration

Set wpa_supplicant.conf to the following:

You have to change the values according to the response of
# wpa_passphrase
.


For WPA-PSK

  
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
# ap_scan=2 was the one for me you may try 0 or 1 indstead of 2
ap_scan=2
fast_reauth=1

network={
        ssid="my_network"
        proto=WPA
        key_mgmt=WPA-PSK
        pairwise=TKIP
        group=TKIP
        psk="secret_password"
}


For WPA2-Personal

  
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1

network={
        ssid="my_network"
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP TKIP
        group=CCMP TKIP
        psk="secret_password"
}

	

	


Bringing up the network card manually
Bring up the network interface with 
# ifconfig ath0 up
.
NOTE!
At the moment there is a problem within the madwifi driver or wpa_supplicant passing dhcp. That??s why I use a fixed IP.

There are two patches one for wpa_supllicant (http://hostap.epitest.fi/bugz/show_bug.cgi?id=63) and one for madwifi

(http://article.gmane.org/gmane.linux.drivers.madwifi.devel/1275). Each one is supposed to work.
Change the routes and add the default gateway.
Bringing up the device at boottime (for Gentoo users)
Make a symbolic link


# cd /etc/init.d/

# ln -s net.lo net.ath0


Copy wpa_supplicant.conf to /etc/conf.d/wpa_supplicant.
Edit /etc/conf.d/net

 #
 #net
 #
 modules=( "wpa_supplicant" )
 wpa_supplicant_ath0="-Dmadwifi"modules=( "wpa_supplicant" )
 wpa_timeout_ath0=60
 config_ath0=(" netmask 255.255.255.0")
 routes_ath0=("default gw ")


Add net.ath0 to the default runlevel by executing


# rc-update add net.ath0 default


Make sure all needed modules are in /etc/modules.autoload/2.x

iw的编译和配置运行

iw is a new nl80211 (802.11 netlink interface) based CLI configuration utility for wireless devices.

Netlink Protocol Library Suite

iw requires the Netlink Protocol Library Suite (libnl)

Download, cross compile and install the Netlink Protocol libraries:

wget http://www.infradead.org/~tgr/libnl/files/libnl-3.2.24.tar.gz

tar -xzf libnl-3.2.24.tar.gz

cd libnl-3.2.24

./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi

make

make install

cd include

make install

iw

With the Netlink Protocol Library Suite prerequisite installed, download and build the iw nl80211 based CLI configuration utility:

wget https://www.kernel.org/pub/software/network/iw/iw-3.15.tar.gz

tar -xzf iw-3.15.tar.gz

cd iw-3.15/

export PKG_CONFIG_PATH=/usr/arm-linux-gnueabi/lib/pkgconfig

export CC=arm-linux-gnueabi-gcc

make

Manually install iw and required libraries on your target root-fs:

cp iw /home/export/rootfs/sbin/

cp /usr/arm-linux-gnueabi/lib/libnl-genl-3.so.200 /home/export/rootfs/lib/

cp /usr/arm-linux-gnueabi/lib/libnl-3.so.200 /home/export/rootfs/lib/

And update the dynamic linker run-time bindings on your target:

ldconfig -v

hostapd

hostapd is an 802.11 Access Point and IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator daemon.

Download, extract and build hostapd:

wget http://hostap.epitest.fi/releases/hostapd-2.2.tar.gz

tar -xzf hostapd-2.2.tar.gz

cd hostapd-2.2/hostapd

cp defconfig .config

make CC=arm-linux-gnueabi-gcc

make install DESTDIR=/home/export/rootfs

rfkill  http://houh-1984.blog.163.com

rfkill is a userspace tool to query the state of the rfkill switches.

Download, extract and build rfkill:

wget https://www.kernel.org/pub/software/network/rfkill/rfkill-0.5.tar.gz

tar -xzf rfkill-0.5.tar.gz

cd rfkill-0.5/

http://houh-1984.blog.163.com

make CC=arm-linux-gnueabi-gcc

 

关键字:ARM-Linux平台  编译  配置  运行使用 引用地址:嵌入式ARM-Linux平台上的编译、配置和运行使用

上一篇:ARM Thumb Thumb-2指令集
下一篇:ARM平台NEON指令的编译和优化

推荐阅读最新更新时间:2024-03-16 15:00

arm gcc交叉编译工具链建立
1.1. Arm交叉编译工具链 下载地址Gnu.org binutils-2.21.1.tar.bz2 gcc-4.4.4.tar.bz2 glibc-2.11.2.tar.bz2 Glibc-ports-2.11.tar.bz2 Gmp-4.2.tar.bz2 Mpfr-2.4.0.tar.bz2 1.1.1. 建立工作目录 创建工具链文件夹: # mkdirembedded-toolchains 在建立了顶层文件夹embedded-toolchains,下面在此文件夹下建立如下几个目录: setup-dir,存放下载的压缩包; src-dir,存放binutils、gc
[单片机]
后装HUD真的能像原装配置那么美好吗
最近老司机我有位朋友打算要换辆车。这位朋友预算相当充足,并且痴迷于各种高科技配置,因此将目光都放在了中意车型的高配版。 看了配置单,作为老司机的我真是“口水流满地”,各种记忆座椅、二十多个喇叭、高级辅助驾驶等等,真是该有的都有了。而配置单上一项HUD显示功能其实是让我最感兴趣的,在体验过高配车型原装的HUD抬头显示功能之后,我决定给自己的老破车也配一个后装HUD抬头显示器。 HUD抬头显示最初应用在战斗机和飞行器领域,一看就是高大上的配置。现在不仅是各种高配民用车型配备了原装HUD显示功能,老款车车主也只需要花几百元就可以添置一台后装HUD显示器。 后装HUD显示器的原理基本上都是通过高亮度的LED屏幕将现实内容投射到汽车的前档
[汽车电子]
后装HUD真的能像原装<font color='red'>配置</font>那么美好吗
电力系统配置储能分析计算方法
中国储能网讯: 电力系统配置储能分析计算方法 董昱1, 范高锋1, 董存1, 于若英2, 赵俊屹3 (1. 国家电网有限公司, 北京 100031; 2. 中国电力科学研究院有限公司, 江苏 南京 210003; 3. 国网山西省电力公司, 山西 太原 030021) 摘要:现阶段,储能的配置分析计算大多是围绕单一场景开展的,无法充分发挥储能的多重作用。为合理配置储能,提高电力系统综合效益,从系统整体运行需求角度入手,归纳总结电力系统配置储能应统筹考虑源网荷发展情况、细致分析储能对常规机组的替代作用、综合优化储能充放电策略3方面关键因素;提出在功率、能量和充放电时长3个维度均不确定的情况下,电力系统统筹配置储能
[新能源]
STM32 编译指令 #pragma pack 的配对使用
#pragma pack 可以用来指定数据结构的成员变量的内存对齐数值。 可选值为: 1、2、4、8、16。 使用 pack 指令要配对使用,以避免意外影响项目中其他源文件的结构成员的内存对齐。 如果影响了其他源文件的结构成员内存对齐,那么在你按照默认对齐来计算那些结构成员占用内存大小或者使用指针移动计算结构成员偏移位置的时候,就可能会出现意料之外的异常。 主要可能的异常是内存定位错误或非法内存访问,结果可能导致错误的定位或数值,极端的情况下可能导致程序崩溃。 下面的例子用来展示基本的配对使用方式。 1)#pragma pack(n)的配对使用 #pragma pack(1) //内存对齐设置为1个字节
[单片机]
三星将提前发布Galaxy S5 搭载惊人硬件配置
    最新一波有关三星旗舰Galaxy S4的升级版,Galaxy S5的传闻包括了无比强大的硬件配置,柔性材料的使用,此外三星最为疯狂的举动:在上代旗舰Galaxy S4发布后仅10个月后便将发布其继任者. 据韩国本土的业界消息显示,三星或将于1月份便将开始大规模生产Galaxy S5,它将搭载最新的安卓4.4 KitKat操作系统.与此同时,三星还将在3月份之前更新其Galaxy Gear产品线,推出Galaxy Gear 2.若三星将按该计划更新Galaxy S产品线,这意味着Galaxy S4的产品周期仅为10个月,第一批入手Galaxy S4的用户将在入手一周年的2个月前就将发觉自己的手机又落伍了. 有报道表示它将拥
[手机便携]
STM32的启动模式配置与应用
三种BOOT模式 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。 Main Flash memory 是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。 System memory 从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块RO
[单片机]
2017款比亚迪S7配置如何-搭载1.5T、2.0T两款涡轮增压发动机
    根据我们的了解,2017款比亚迪S7车型已经正式上市销售了。据悉,该车在分别搭载1.5T、2.0T涡轮增压发动机基础上,根据配置的差异化共推出6款车型,售价区间为10.99-15.99万元,该车的外观造型究竟是怎样的呢?下面就一起来了解一下2017款比亚迪S7车型的最新消息吧。   与现款车型相比,2017款比亚迪S7在造型方面稍作调整,其中前脸启用全新造型前格栅设计,一根红线上下分割的双层全新“蝴蝶结”格栅,与车尾的鲨鱼鳍天线前后呼应。   而在尾部造型部分,现款车型上连接两侧灯组的红色灯条被取消,新车启用了全新设计的尾灯组,当在夜晚点亮时,辨识度得到了进一步提升。   内饰方面,全体时髦精约,选用大屏液晶显
[汽车电子]
ALTERA FPGA在微处理器系统中的在应用配置
摘要:ALTERA公司SRAM工艺可编程器件应用广泛,专用配置器件比较昂贵。在具有微处理器的系统中,使用微处理器系统的存储器来存储配置数据,并通过微处理器配置FPGA,这种方法几乎不增加成本。微处理器根据不同的程序应用,采用不同的配置数据对FPGA进行配置,使FPGA实现与该应用有关的特定功能。详细介绍了微处理器系统中连接简单的被动串行配置方法和被动并行异步配置方法。 关键词:在应用配置 FPGA配置 被动串行 被动并行异步 可编程逻辑器件(PLD)广泛应用在各种电路设计中。基于查找表技术、SRAM工艺的大规模PLD/FPGA,密度高且触发器多,适用于复杂的时序逻辑,如数字信号处理和各种算法的设计。这类器件使用SRAM单元存
[半导体设计/制造]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved