如何远程登录开发板?

嵌入式资讯精选 2021-07-28 10:53

在公司里,一些开发环境(网络环境、远程登录环境等)都是由系统工程师搭建好的,我们只管用就可以。但是自己业余玩玩还是得自己动手折腾折腾,这两天我也为自己的板子搭建了一下网络环境、远程登录环境等,整个过程中遇到很多坑。

从驱动移植、内核编译,再到上层软件库的交叉编译都遇到了很多坑。下面简单记录一下整个过程,方便自己之后再次使用的时候做参看,也给有需要的朋友小伙伴做个参考。

WiFi网卡(RTL8723)驱动移植

1、把WiFi驱动文件夹放到内核文件夹中

把RTL8723驱动文件夹放到Linux-4.9.88/drivers/net/wireless中。WiFi驱动可以在网上找得到。

2、修改Kconfig及Makefile文件

修改Linux-4.9.88/drivers/net/wireless文件夹下的Kconfig及Makefile文件。

在Kconfig文件中添加如下内容:

source "drivers/net/wireless/rtl8723BU/Kconfig"

在Makefile文件中添加如下内容:

obj-$(CONFIG_RTL8723BU) += rtl8723BU/

3、make menuconfig配置内核

我们需要加载rtl8723BU驱动、配置内核,如配置内核支持USB设备、WiFi设备等。

在内核路径输入命令make menuconfig进入内核配置界面。

(1)选中rtl8723BU模块

(2)支持USB设备

(3)支持wifi设备

(4)支持无线网络IEEE 802.11


配置好之后,可以把rtl8723BU驱动编译进内核,也可以编译成内核模块,然后再动态加载。关于内核模块相关之前分享相关基础驱动的学习的时候也有分享,如:

【Linux笔记】LED驱动实验(总线设备驱动模型)

【Linux笔记】设备树实例分析

基于Linux的AP3216三合一整合型光感测器实验分享

这里我们直接把rtl8723BU驱动编译进内核。

wpa_supplicant移植

有了上一步的基础之后,我们就需要对无线网络进行配置,需要借助一些配置工具,wpa_supplicant就是用来配置无线网络的工具。下面我们来把wpa_supplicant移植到板子上。

交叉编译wpa_supplicant需要依赖于libnl及openssl库,所以我们需要先交叉编译好这两个库。这些库都有很多个版本,可能会遇到版本不匹配的问题,这里我使用的版本如下:

  • openssl-1.0.2
  • libnl-3.2.23
  • wpa_supplicant-2.9

(1)交叉编译openssl-1.0.2

./config no-asm -shared --prefix=/home/LinuxZn/git_clone/openssl-1.0.2/openssl_build_arm os/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
make install

需要执行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就会有问题。如:

(2)交叉编译libnl-3.2.23

./configure --prefix=/home/LinuxZn/git_clone/libnl-3.2.23/libnl_build_arm --host=arm-linux-gnueabihf
make
make install

交叉编译得到:

(3)交叉编译wpa_supplicant-2.9

将wpa_supplicant源码拷贝到linux主机并解压,然后进入wpa_supplicant目录下。将wpa_supplicant目录下的defconfig拷贝一份并重命名为.config,然后打开.config文件:

cp defconfig .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 包路径:

export PKG_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 -i wlan1&

输出如下信息(wlan1: CTRL-EVENT-CONNECTED)则表明已经连接成功

[root@imx6ull:/etc]# [  968.615223] ------------[ cut here ]------------
[  968.622210] WARNING: CPU: 0 PID: 127 at net/wireless/sme.c:733 __cfg80211_connect_result+0x2e4/0x404
[  968.635489] ---[ end trace c94b130fc23cc767 ]---
wlan1: Associated with 28:bf:89:7b:a1:23
wlan1: WPA: Key negotiation compl[  968.655338] IPv6: ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready
eted with 28:bf:89:7b:a1:23 [PTK=CCMP GTK=CCMP]
wlan1: CTRL-EVENT-CONNECTED - Connection to 28:bf:89:7b:a1:23 completed [id=0 id_str=]

这样就是连接成功,再动态获取下ip即可

udhcpc -i wlan1 //-i指定网卡

接着执行ifconfig就可以看到已经分配ip地址的无线网卡了。这里若wlan1还是没有ip地址,可能是获取的ip地址还没有被写入网卡设备。

我们开发板分到的ip如:

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

这时候就可以愉快地玩耍啦!

SSH移植

上面两步已经让我们的开发板具有无线网络环境了。有必要搭建一个实用的环境:ssh环境。

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。

它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。我们工作中经常使用ssh,Ubuntu主机可以很方便地与开发板进行交互。

交叉编译openssh需要依赖于zlib及openssl库,所以我们需要先交叉编译好这两个库。这些库都有很多个版本,可能会遇到版本不匹配的问题,这里我使用的版本如下:

  • openssl-1.0.2
  • zlib-1.2.3
  • openssh-4.6p1

(1)交叉编译openssl-1.0.2

交叉编译openssl-1.0.2在上面编译wpa_supplicant-2.9已经演示过了,这里不再演示。

(2)交叉编译zlib-1.2.3

./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
make install

编译得到:

(3)交叉编译openssh-4.6p1

./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-login CC=/home/LinuxZn/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc AR=/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目录下,命令

mv scp sftp ssh sshd ssh-add ssh-agent ssh-keygen ssh-keyscan /usr/local/bin/

② 将“moduli、ssh_config、sshd_config”拷贝到开发板的/usr/local/etc目录下。

mv moduli ssh_config sshd_config /usr/local/etc

③ 将“sftp-server、ssh-keysign”拷贝到开发板的/usr/libexec目录下。

mv sftp-server ssh-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 -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
ssh-keygen -t dsa -f ssh_host_ed25519_key -N ""

执行完成之后,将生成的如下几个文件拷贝到开发板的/usr/local/etc/目录下:

  • ssh_host_rsa_key

  • ssh_host_dsa_key

  • ssh_host_ecdsa_key”

  • ssh_host_ed25519_key

然后将它们的权限修改为 600。

mv ssh_host_rsa_key ssh_host_dsa_key ssh_host_ecdsa_key ssh_host_ed25519_key /usr/local/etc/
chmod 600 ssh_host_rsa_key ssh_host_dsa_key ssh_host_ecdsa_key ssh_host_ed25519_key

在开发板终端中,使用命令vi /etc/passwd,打开 ssh 密钥文件,在 /etc/passwd文件底行添加以下内容:

sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin

接着在开发板上新建 root 账户,使用命令:

passwd root

然后在开发板上运行 sshd 二进制文件,命令

/usr/local/bin/sshd

可能会报错:

/usr/local/bin/sshd: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory

拷贝交叉编译器下的相关库至板子中。再次运行,可能会报错:

Could not load host key: /usr/local/etc/ssh_host_key
Disabling protocol version 1. Could not load host key

但是不影响使用。

最后,在我们的Ubuntu主机中使用ssh登录我们的开发板。首先,需要确认我们的Ubuntu主机的ip与开发板的ip是在同一网段内,如:

Ubuntu IP:192.168.1.9
开发板IP:192.168.1.10

在我们的Ubuntu中使用如下命令登录开发板:

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

以上就是本次的分享,整个过程要操作的步骤还是比较多的,遇到很多问题,我也参考了很多网上的博文,按照相关步骤来也还是会遇到很多问题,前前后后花了几天的业余时间才搞通的。

搞Linux就是这样,会遇到很多问题。大家如果按照这篇文章操作如果遇到与本文的结果不一致的话,也是需要具体问题具体分析,可以结合多篇文章对比对比。

巨人肩膀:

1、http://bbs.100ask.net/article/41

2、https://blog.csdn.net/qq_24835087/article/details/104783990

3、https://blog.csdn.net/Chihiro_S/article/details/109160899

4、https://blog.csdn.net/qq_22902919/article

1.华为HarmonyOS鸿蒙职业认证公布:三大级别

2.嵌入式开发中C语言编程要点简述!

3.热议过后,咱们来客观分析鸿蒙的未来!

4.ARM与RISC-V的恩爱情仇~

5.代码是如何控制硬件的?

6.清风徐来——新型物联网操作系统Zephyr介绍

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

评论 (0)
热门推荐
X
广告
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦