简介
最近心血来潮,顺便拿起放置很久的开发板来玩玩。(主要原因还是看公司产品研发使用的远程连接功能telnet比较好玩,一根网线就可以操作设备,免去了使用串口的“痛苦”,而且真实产品中也不会把串口引出来),由此花了两天时间研究了一下通过telnet远程登陆设备,并且将其实现。
注:第一次写博客,欢迎指出错误!
期间思考了两种方案,最终以第二个方案完成目的:
(1)、当时没注意到制作根文件系统的时候,busybox中已经集成了telnet功能,分为客户端和服务器,在设备上其实只需要服务器即可,不需要客户端。第一个想法就是交叉编译telnet源码,移植一个telnet的服务端程序到arm平台上。
(2)、重新配置编译busybox,制作带有telnet功能的根文件系统,这样做的好处就是集成到当前的rootfs中,不需要额外添加库的支持。坏处就是需要做的事情比较多,比较复杂。但这个方法确实让我学到了非常非常多的东西。
话不多说,开始上菜:
方案一:
(1)、源码包下载:http://ftp.gnu.org/gnu/inetutils/inetutils-2.4.tar.gz
(2)、拷贝到自己的虚拟机中,找个文件夹存放该文件
(3)、解压到当前目录:tar -zxvf inetutils-2.4.tar.gz -C ./
(4)、进入到解压出的目录:cd inetutils-2.4
(5)、进行项目配置:./configure --host=arm --disable-clients --disable-ipv6 --disable-ncurses --prefix=/usr/local/arm_telnet/ CC=arm-linux-gcc
注:配置参数含义
--host=arm:目标平台
--disable-clients:不编译客户端
--disable-ipv6:不支持IPV6
--disable-ncurses:关闭字符终端处理库编译
--prefix=/usr/local/arm_telnet/:make install时的安装目录,编译好的bin程序就在这个目录下,**注意字节安装的目录**
CC=arm-linux-gcc:指定交叉编译工具链
(6)、完成配置后开始编译:make -j4
(7)、接下来就是安装了:make install
(8)、等待安装完成,进到第(5)步中指定的--prefix目录下,会出现如下三个目录
![安装完成后的目录](https://img-blog.csdnimg.cn/5ac9f2966f49461fb3506fff7cb80f7c.png)
(9)、进入libexec目录中,其中存放的就是经过交叉编译后可移植到arm平台的可执行程序
![可执行程序](https://img-blog.csdnimg.cn/0dbc801d13204b738e4f7d79b7facd33.png)
(10)、拷贝需要的程序到开发板根文件系统/user/sbin/目录下,只需要**telnetd和inetd**两个程序即可,注意添加权限
(11)、目前为止开发板已经具备了telnet必须的程序,这两个程序默认应该是静态编译连接的,故此不需要拷贝动态库。(这里我也不太确定),看实际情况,如果缺啥就补啥
方案二:
(1)、进入busybox源码目录(我用的busybox版本是1.23.0)
(2)、配置busybox:make menuconfig
(3)、进入Networking Utilities下,往下找,找到telnet和telnetd,把这两项对应的配置项都勾上(使用y键即可),如下图:
![telnet编译配置项](https://img-blog.csdnimg.cn/d12c75e5c59d487eb9395b30e9d27fd9.png)
(4)、使用telnet功能,必不可少的就是mdev服务,所以,完成telnet配置后,还需要完成mdev的配置
(5)、返回上一层,找到Linux System Utilities下的mdev,将其对应的所有配置项都勾选上,如下图:
![mdev配置项](https://img-blog.csdnimg.cn/746b8db6594b46339eedd62b3883e33b.png)
(6)、保存退出
(7)、开始make,等待编译完成
**(8)、注:make完成后,一定要更改make install的位置,千万千万不要直接make install**
(9)、更改根文件系统的安装目录,流程如下:
A.make menuconfig
B.进入BusyBox Settings下,找到Installation Options项
![Installation Options](https://img-blog.csdnimg.cn/4898788c6bed4c13ba8d79db8b1bd2ce.png)
C.进入该选项,选中BusyBox Installation prefix,输入自己需要安装busybox的目录
![路径选项](https://img-blog.csdnimg.cn/2be7dc4e497447cc963f5b4e6d5c8b9c.png)
D.保存退出,重新make
(10)、安装:make install
(11)、进入安装busybox的目录下,具备了linux操作系统的几个必要文件,比如etc、usr、linuxrc、bin......我们需要的inetd和telnetd两个可执行程序已存在于usr/sbin目录下
(12)、到这一步我们还缺少许多基础配置文件,目前已有的只是类似ls、mv、ifconfig等可执行程序的一个根文件系统
注:具体需要什么配置文件,上网搜索BusyBox移植到arm平台相关的博客参考,这里就不多做介绍
完成两个方案描述之后,其后的内容都是两个方案都需要做的事情,如下:
(1)、进入到busybox安装目录下
(2)、进入etc目录下并touch inetd.conftouch文件
(3)、vi打开该文件,输入:telnet stream tcp nowait root /usr/sbin/telnetd后保存退出,详细意义不做介绍
(4)、etc目录下打开fstab(linux下挂载文件系统列表),在其后添加,如图所示:
(5)、确保根目录下存在/dev目录
(6)、进入init.d目录,vi打开rcS文件,添加如下图所示内容(已有的可跳过):
(7)、打开etc目录下的securetty文件(管理端口文件),若该文件不存在,则新建一个,添加pts/0、pts/1。。。几个用户登陆就添加几个,如果只有一个,则只需要添加一个即可,如下图
(8)、到此,配置文件相关的大功告成,接下来就是享受的“美食”的时刻。
(9)、打开SecureCRT软件
(10)、新建连接、输入配置如下图所示:
(11)、connect即可,输入用户名,以及密码登陆即可
(12)、如果现象和我的不一致,也有可能是mdev文件系统没挂载上,又或是kernel配置有问题,可参考
https://blog.csdn.net/weixin_43782998/article/details/121285466
中的kernel配置部分,我移植的时候也配置了kernel,至于影不影响后续操作,也不确定。
总结:
到此大功告成,总得来说这篇博客写的比较简单,方案二中间有许多小细节没补充补充上,大致流程有了,巩固了软件移植的同时,也巩固了根文件系统移植的过程,对根文件系统中的配置文件,流程有了更为深刻的了解。
比较恶心:继续阅读有时候会跳转到开会员页面
参考文档:https://wenku.baidu.com/view/5116f650ad02de80d4d84059.html?fr=sogou&wkts=1676805214411