页面加载中,请稍候
来源:strongerHuang发布时间:2023-01-06802浏览
询问 AI
作者 | ZhengN
微信公众号 | 嵌入式大杂烩
今天为大家分享一下在开发板中搭建了一下网络环境、远程登录环境过程中遇到坑。

把驱动文件夹放到Linux-4.9.88/drivers/net/wireless中。WiFi驱动可以在网上找得到(以RTL8723为例)。
修改Linux-4.9.88/drivers/net/wireless文件夹下的Kconfig及Makefile文件。
在Kconfig文件中添加如下内容:
source"drivers/net/wireless/rtl8723BU/Kconfig"

在Makefile文件中添加如下内容:
obj-$(CONFIG_RTL8723BU)+=rtl8723BU/

我们需要加载rtl8723BU驱动、配置内核,如配置内核支持USB设备、WiFi设备等。
在内核路径输入命令make menuconfig进入内核配置界面。
(1)选中rtl8723BU模块






配置好之后,可以把rtl8723BU驱动编译进内核,也可以编译成内核模块,然后再动态加载。
有了上一步的基础之后,我们就需要对无线网络进行配置,需要借助一些配置工具,wpa_supplicant就是用来配置无线网络的工具。下面我们来把wpa_supplicant移植到板子上。
交叉编译wpa_supplicant需要依赖于libnl及openssl库,所以我们需要先交叉编译好这两个库。这些库都有很多个版本,可能会遇到版本不匹配的问题,这里我使用的版本如下:
./configno-asm-shared--prefix=/home/LinuxZn/git_clone/openssl-1.0.2/openssl_build_armos/compiler:/home/LinuxZn/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
make
makeinstall
需要执行config脚本生成Makefile文件,这里加了一些配置参数,配置编译安装的位置为openssl_build_arm文件夹,配置交叉编译器为arm-linux-gnueabihf-gcc。
make编译不通过的话,注意Makefile里交叉编译器配置有没有配置正确,正确的配置如:
CROSS_COMPILE=arm-linux-gnueabihf-
CC=/home/LinuxZn/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/$(CROSS_COMPILE)gcc
编译得到:

我们有必要检查一下生成的可执行程序、库是不是arm版本的,否则后面交叉编译wpa_supplicant就会有问题。如:

./configure--prefix=/home/LinuxZn/git_clone/libnl-3.2.23/libnl_build_arm--host=arm-linux-gnueabihf
make
makeinstall
交叉编译得到:

将wpa_supplicant源码拷贝到linux主机并解压,然后进入wpa_supplicant目录下。将wpa_supplicant目录下的defconfig拷贝一份并重命名为.config,然后打开.config文件:
cpdefconfig.config
vim.config
在.config文件中增加如下内容,其中openssl和libnl库的路径就是刚刚openssl和libnl安装的位置:
#交叉编译器
CC=arm-linux-gnueabihf-gcc
#openssl库和头文件路径
CFLAGS+=-I/home/LinuxZn/git_clone/openssl-1.0.2/openssl_build_arm/include
LIBS+=-L/home/LinuxZn/git_clone/openssl-1.0.2/openssl_build_arm/lib
#libnl库和头文件路径
CFLAGS+=-I/home/LinuxZn/git_clone/libnl-3.2.23/libnl_build_arm/include/libnl3
LIBS+=-L/home/LinuxZn/git_clone/libnl-3.2.23/libnl_build_arm/lib
接着还需要指定 libnl 库的 pkgconfig 路径,环境变量 PKG_CONFIG_PATH 保存着 pkgconfig 包路径:
exportPKG_CONFIG_PATH=/home/LinuxZn/git_clone/libnl-3.2.23/libnl_build_arm/lib/pkgconfig:$PKG_CONFIG_PATH
编译:
make
编译可能会报如下错误。这时候把.config里的下面两句屏蔽掉即可:
#CONFIG_CTRL_IFACE_DBUS_NEW=y
#CONFIG_CTRL_IFACE_DBUS_INTRO=y
编译结束后会在当前目录下生成wpa_supplicant和wpa_cli两个工具。将这两个文件拷贝到开发板/usr/bin目录下。
首先,在开发板/etc目录下新建一个wpa_supplicant.conf文件,文件内容如下:
ctrl_interface=/var/run/wpa_supplicant
update_config=1
ctrl_interface_group=root
ap_scan=1
network={
ssid="ChinaNet-9ee9"
psk="s6iyvweq"
key_mgmt=WPA-PSK
}
接着需要新建/var/run/wpa_supplicant目录:
mkdir-p/var/run/wpa_supplicant
最后使用下面的命令连接wifi:
wpa_supplicant-Dwext-c/etc/wpa_supplicant.conf-iwlan1
输出如下信息(wlan1: CTRL-EVENT-CONNECTED)则表明已经连接成功
[root@imx6ull:/etc]#[968.615223]------------[cuthere]------------
[968.622210]WARNING:CPU:0PID:127atnet/wireless/sme.c:733__cfg80211_connect_result+0x2e4/0x404
[968.635489]---[endtracec94b130fc23cc767]---
wlan1:Associatedwith28:bf:89:7b:a1:23
wlan1:WPA:Keynegotiationcompl[968.655338]IPv6:ADDRCONF(NETDEV_CHANGE):wlan1:linkbecomesready
etedwith28:bf:89:7b:a1:23[PTK=CCMPGTK=CCMP]
wlan1:CTRL-EVENT-CONNECTED-Connectionto28:bf:89:7b:a1:23completed[id=0id_str=]
这样就是连接成功,再动态获取下ip即可
udhcpc-iwlan1//-i指定网卡
接着执行ifconfig就可以看到已经分配ip地址的无线网卡了。这里若wlan1还是没有ip地址,可能是获取的ip地址还没有被写入网卡设备。
我们开发板分到的ip如:

这时候如果我们的路由器可以上网的话,就可以ping得通外网,如果路由器没网的话,可以ping我们的Ubuntu主机进行测试。这里我们ping百度测试如下则表明我们的开发板已经搭建好网络环境了:

这时候就可以愉快地玩耍啦!
上面两步已经让我们的开发板具有无线网络环境了。有必要搭建一个实用的环境:ssh环境。
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。
它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。我们工作中经常使用ssh,Ubuntu主机可以很方便地与开发板进行交互。
交叉编译openssh需要依赖于zlib及openssl库,所以我们需要先交叉编译好这两个库。这些库都有很多个版本,可能会遇到版本不匹配的问题,这里我使用的版本如下:
交叉编译openssl-1.0.2在上面编译wpa_supplicant-2.9已经演示过了,这里不再演示。
./configure--prefix=/home/LinuxZn/git_clone/zlib-1.2.3/zlib_build_arm
得到Makefile,修改里面的CC为交叉编译器:
CC=arm-linux-gnueabihf-gcc
CFLAGS=-O3-DUSE_MMAP
#CFLAGS=-O-DMAX_WBITS=14-DMAX_MEM_LEVEL=7
#CFLAGS=-g-DDEBUG
#CFLAGS=-O3-Wall-Wwrite-strings-Wpointer-arith-Wconversion\
#-Wstrict-prototypes-Wmissing-prototypes
LDFLAGS=-L.libz.a
LDSHARED=arm-linux-gnueabihf-gcc
CPP=arm-linux-gnueabihf-gcc-E
然后执行:
make
makeinstall
编译得到:

./configure--host=arm-linux-gnueabihf--with-libs--with-zlib=/home/LinuxZn/git_clone/zlib-1.2.3/zlib_build_arm--with-ssl-dir=/home/LinuxZn/git_clone/openssl-1.0.2/openssl_build_arm--disable-etc-default-loginCC=/home/LinuxZn/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gccAR=/home/LinuxZn/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar
make
其中,各参数含义如下:
--host 表示运行的平台。
--with-libs 表示需要的库文件。
--with-zlib 表示库文件 zlib 的安装路径。
--with-ssl-dir 表示 openssl 文件的安装路径。
--disable-etc-default-login 表示不使用当前环境变量的编译器,所以后面配置参数时,最后直接配置 CC 和 AR 这两个编译器。
CC 表示设置使用的编译器。
AR 表示设置使用的编译器的路径。
编译:
make
这时候在openssh-4.6p1目录下会生成scp 、sftp、ssh、sshd、ssh-add、ssh-agent等工具:

在板子上新建“/usr/libexec“、“/usr/local/etc ”、“/usr/local/bin ”三个目录:
mkdir-p/usr/libexec/usr/local/etc/usr/local/bin
下面把相关工具传到开发板上备用:
① 将 openssh-6.6p1 下的生成“scp 、sftp、ssh、sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”等可执行文件拷贝到开发板的/usr/local/bin目录下,命令
mvscpsftpsshsshdssh-addssh-agentssh-keygenssh-keyscan/usr/local/bin/
② 将“moduli、ssh_config、sshd_config”拷贝到开发板的/usr/local/etc目录下。
mvmodulissh_configsshd_config/usr/local/etc
③ 将“sftp-server、ssh-keysign”拷贝到开发板的/usr/libexec目录下。
mvsftp-serverssh-keysign/usr/libexec
④ 使用“ssh-keygen”生成个四个 key 文件“ssh_host_rsa_key”“ssh_host_dsa_key”“ssh_host_ecdsa_key”和“ssh_host_ed25519_key”。在openssh-4.6p1目录下,输入命令:
ssh-keygen-trsa-fssh_host_rsa_key-N""
ssh-keygen-tdsa-fssh_host_dsa_key-N""
ssh-keygen-tecdsa-fssh_host_ecdsa_key-N""
ssh-keygen-tdsa-fssh_host_ed25519_key-N""
执行完成之后,将生成的如下几个文件拷贝到开发板的/usr/local/etc/目录下:
ssh_host_rsa_key
ssh_host_dsa_key
ssh_host_ecdsa_key”
ssh_host_ed25519_key
然后将它们的权限修改为 600。
mvssh_host_rsa_keyssh_host_dsa_keyssh_host_ecdsa_keyssh_host_ed25519_key/usr/local/etc/
chmod600ssh_host_rsa_keyssh_host_dsa_keyssh_host_ecdsa_keyssh_host_ed25519_key
在开发板终端中,使用命令vi /etc/passwd,打开 ssh 密钥文件,在 /etc/passwd文件底行添加以下内容:
sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin
接着在开发板上新建 root 账户,使用命令:
passwdroot
然后在开发板上运行 sshd 二进制文件,命令
/usr/local/bin/sshd
可能会报错:
/usr/local/bin/sshd:errorwhileloadingsharedlibraries:libnsl.so.1:cannotopensharedobjectfile:Nosuchfileordirectory
拷贝交叉编译器下的相关库至板子中。再次运行,可能会报错:
Couldnotloadhostkey:/usr/local/etc/ssh_host_key
Disablingprotocolversion1.Couldnotloadhostkey
但是不影响使用。
最后,在我们的Ubuntu主机中使用ssh登录我们的开发板。首先,需要确认我们的Ubuntu主机的ip与开发板的ip是在同一网段内,如:
Ubuntu IP:192.168.1.9
开发板IP:192.168.1.10
在我们的Ubuntu中使用如下命令登录开发板:

到了这一步,我们的ssh环境就已经搭建成功了。之后就可以愉快地玩耍了!


新闻来源:strongerHuang,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!
2026-07-09

2026-07-09
2026-06-10