根文件系统构建后的第三方软件移植


先说好了,本文涉及很多添加用户的行为,实际产品中,只需要一个root用户就够了!!!!!!!!!

一、FTP 服务器移植与搭建

将开发板作为一个小型的 FTP 服务器,这样我们就可以通过 FileZilla 软件直接在开发板和 windows 之间通过网络进行文件互传。

vsftpd 源码下载

我们需要在自己制作的根文件系统中安装 vsftpd,所以就需要我们自己移植 vsfpd。首先需要到 vsftpd 官网下载 vsftpd 源码,网址为 https://security.appspot.com/vsftpd.html。需要翻墙!
在这里插入图片描述
点击图中的 Online source/docs,跳转到 vsftpd 源码下载页面:
在这里插入图片描述

vsftpd 移植

vsftpd 源码获取到以后就是移植工作了,将 vsftpd-3.0.3.tar.gz 发送到 ubuntu 中,然后使用如下命令进行解压:

tar -vxzf vsftpd-3.0.3.tar.gz //解压缩

解压缩完成以后会得到一个名为“vsftpd-3.0.3”的文件夹,输入如下命令进入到此文件夹:

cd cd vsftpd-3.0.3

打开 Makefile,我们需要配置一下,修改 Makefile 中的 CC 变量为我们所使用的交叉编译器:

CC = arm-linux-gnueabihf-gcc //CC 为交叉编译器

Makefile 修改完成以后就可以编译:

make

等待编译完成,会得到两个文件:vsftpd 和 vsftpd.conf,我们需要这两个文件。将 vsftpd 拷贝到开发板根文件系统下的/usr/sbin 目录下,将 vsftpd.conf 拷贝到开发板根文件系统的/etc 目录下,命令如下:

sudo cp vsftpd /home/zuozhongkai/linux/nfs/rootfs/usr/sbin/ //拷贝 vsftpd
sudo cp vsftpd.conf /home/zuozhongkai/linux/nfs/rootfs/etc/ //拷贝 vsftpd.conf

拷贝完成以后给予 vsftpd 可执行权限,并且修改 vsfptd.conf 所属用户为 root,命令如下:

chmod +x /usr/sbin/vsftpd
chown root:root /etc/vsftpd.conf

至此,vsftpd 就已经移植成功了。
嘶!如果每次编译系统都要一个一个添加那就太累了,一般厂商都会给出 SDK ,我们需要的是把源码包放到 package 目录中,然后在 .config 中添加源码包对应的模块名,就可以作为模块编进内核了。

vsftpd 服务器测试

(1)配置 vsftpd
打开 vsftpd.conf,然后将下面两行配置前面的 # 删除掉:

local_enable=YES
write_enable=YES 

(2)添加新用户
如果第一次添加用户的话要先将 ubuntu 下的/etc/passwd 和/etc/group 这两个文件复制到开发板根文件系统的对应目录,命令如下:

sudo cp /etc/passwd /home/zuozhongkai/linux/nfs/rootfs/etc/ -f
sudo cp /etc/group /home/zuozhongkai/linux/nfs/rootfs/etc/ -f

然后修改开发板根文件系统中的/etc/passwd 和/etc/group 这两个文件,只保留“root”这一项。passwd 文件“root”行最后改为 /bin/sh,修改后的 passwd 和 group 文件内容如图所示:
在这里插入图片描述
在这里插入图片描述
vsftpd 默认需要两个用户,这两个用户名分别为:ftp 和 nobody。在创建这两个用户之前先检查一下下面几个文件和目录是否存在,如果不存在的话需要先创建下面这些文件和目录:

/home //目录,不存在的话自行创建
/usr/share/empty //目录,不存在的话自行创建
/var/log //目录,不存在的话自行创建
/var/log/vsftpd.log //文件,不存在的话自行创建

创建命令如下:

mkdir /home
mkdir /usr/share/empty -p
mkdir /var/log -p
touch /var/log/vsftpd.log

准备好以后就可以使用 adduser 命令创建 ftp 和 nobody 这两个用户,命令如下:

adduser ftp 	//创建 ftp 用户
adduser nobody  //创建 nobody 用户

创建过程如图所示:
在这里插入图片描述
最后我们还需要创建一个登录用户,Filezilla 连接 FTP 服务器的时候一般需要输入用户名和密码,当然了,Filezilla 也支持匿名登录。如果要使用用户名加密码登录的话就要创建一个用户,用户名自己定义,这里我创建一个名为“zuozhogkai”的用户,命令如下:

adduser zuozhongkai //创建登录要用户

最终会在/home 目录下存在三个用户目录,分别对应“ftp”、“nobody”和“zuozhongkai”,如图所示:
在这里插入图片描述
(3)Filezilla 连接测试
测试之前确保直接开发板网络连接正常,电脑可以 ping 通开发板!
输入如下命令,启动 vsftpd 服务器:

vsftpd & //启动 vsftpd

vsftpd 启动以后就可以使用 filezilla 进行连接测试了,新建站点,站点设置如图所
示:
在这里插入图片描述
设置好以后就可以连接了,连接成功以后如图所示:
在这里插入图片描述
连接成功以后重新打包根文件系统,然后通过 Mfgtool 将根文件系统烧写到开发板的
EMMC 或者 NAND 中。根文件系统烧写完成以后重启开发板,然后启动 vsftpd 服务,Filezilla 连接到开发板的 FTP 服务器上。连接成功以后我们就可以通过拖拽的方式从 windows 向开发板,或者从开发板向 windows 下传输文件了。
注意,只能向用户目录下传输文件!比如我使用“zuozhongkai”这个用户登录的 FTP 服务器,因此只能与开发板的/home/zuozhongkai 目录进行文件互传。
FTP 的速度与 存储设备速度有关,EMMC 的读写速度就比 NAND 快很多。
设置 vsftpd 开机自启动,在/etc/init.d/rcS 里面启动 vsftpd 服务,在 rcS 文件里面添
加如下内容即可:

vsftpd &

这样我们每次开机以后就会自动启动 vsftpd 了。

二、OpenSSH 移植与使用

远程登录到开发板就要使用到 SSH 服
务。很多网络相关的模块工具也都需要这个库。
SSH 是较可靠、专为远程登录会话和其他网络服务提供安全性的协议,OpenSSH 是 SSH 协
议的免费开源版本。

OpenSSH 简介

SSH 全称为 Secure Shell(安全外壳协议,简称 SSH),是一种加密的网络传输协议,用于在不安全的网络中为网络服务提供安全的传输环境。
OpenSSH 提供了很多程序,常用有以下几个:

  • ssh:ssh 软件用于替换 rlogin 与 Telnet
  • scp 和 sftp:将文件复制到其他主机上,用于替换 rcp
  • sshd:SSH 服务器

OpenSSH 移植

(1) OpenSSH 源码获取
这里我们一共需要移植三个软件包:zlib、openssl 和 openssh,官网如下:
zlib 官网:http://www.zlib.net/
openssl 官网:https://www.openssl.org/source/
openssh 官网:http://www.openssh.com/

先说一个捷径,如果大家使用的是 buildroot 来构建根文件系统,那么直接把这些库的软件包放在 dl/ 目录,编译系统的时候,需要用到该库的软件,它的 makefile 会带有该库的依赖,就会自动先编译该库。

(2)移植 zlib 库
zlib 源码下载地址为:http://zlib.net/
拷贝到 ubuntu 中并解压,命令如下:

tar -vxzf zlib-1.2.11.tar.gz //解压

另外新建一个名为 zlib 的文件夹来保存 zlib 的编译结果。
进入 zlib 源码目录,然后配置并编译,命令如下:

CC=arm-linux-gnueabihf-gcc
LD=arm-linux-gnueabihf-ld
AD=arm-linux-gnueabihfas
./configure --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/zlib //配置
make             //编译
make install

编译完成以后的 zlib 目录内容如图所示:
在这里插入图片描述
将 lib 目录下的 zlib 库文件拷贝到开发板根文件系统的 /lib 目录下,命令为:

sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/lib/ -rfa

(3)移植 openssl 库
软件包下载地址:https://www.openssl.org/source/
下载后创建一个目录,把源码解压过去:

tar -vxzf openssl-1.1.1d.tar.gz

解压完成以后就会生成一个名为 openssl-1.1.1d 的目录,然后在新建一个名为 openssl 的文件夹,用于存放 openssl 的编译结果。进入到解压出来的 openssl-1.1.1d 目录中,然后执行如下命令进行配置:

./Configure linux-armv4 shared no-asm --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/openssl 
CROSS_COMPILE=arm-linux-gnueabihf-

linux-armv4 表示 32 位 ARM 凭条,并没有 linux-armv7 这个选项。
CROSS_COMPILE 用于指定交叉编译器。配置成功以后会生成 Makefile,输入如下命令进行编译:

make 
make install

编译安装完成以后的 openssl 目录内容如图所示:
在这里插入图片描述
图中的 lib 目录是我们需要的,将 lib 目录下的 libcrypto 和 libssl 库拷贝到开发
板根文件系统中的/usr/lib 目录下,命令如下:

sudo cp libcrypto.so* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af
sudo cp libssl.so* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af

(4)移植 openssh 库
① 交叉编译 openssh 库
解压 openssh 源码:

tar -vxzf openssh-8.2p1.tar.gz

解压完成以后就会生成一个名为 openssh-8.2p1 的文件夹,进入此文件夹里面,然后配置并编译 openssh,命令如下:

cd openssh-8.2p1/
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/home/zuozhongkai/linux/IMX6ULL/tool/zlib --with-ssl-dir=/home/zuozhongkai/linux/IMX6ULL/tool/openssl --disable-etc-default-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar //配置
make //编译

在配置 openssh 的过程中,–with-zlib 参数用于指定 zlib 库所在的目录,–with-ssl-dir 参数用于指定 openssl 库所在的目录,编译 openssh 的时候不用 make install。
② 将 openssh 相关文件拷贝到开发板中
openssh 交叉编译完成以后在开发板中创建如下所示目录(如果存在的话就不需要创建):

/usr/local/bin
/usr/local/sbin
/usr/local/libexec
/usr/local/etc
/var/run
/var/empty

创建命令如下:

mkdir /usr/local/bin -p
mkdir /usr/local/sbin -p
mkdir /usr/local/libexec/ -p
mkdir /usr/local/etc -p
mkdir /var/run -p
mkdir /var/empty/ -p

上述目录创建好以后将如下文件拷贝到开发板的/usr/local/bin 目录下:

scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan

将如下文件拷贝到开发板的/usr/local/sbin 目录下:

sshd

将如下文件拷贝到开发板的/usr/local/etc 目录下:

moduli ssh_config sshd_config

将如下文件拷贝到开发板的/usr/local/libexec 目录下:

sftp-server ssh-keysign

创建软连接,进入开发板中的/bin 目录下,输入如下命令创建软连接:

cd /bin/
ln -s /usr/local/bin/scp
ln -s /usr/local/bin/sftp
ln -s /usr/local/bin/ssh
ln -s /usr/local/bin/ssh-add
ln -s /usr/local/bin/ssh-agent
ln -s /usr/local/bin/ssh-keygen
ln -s /usr/local/bin/ssh-keyscan

再进入开发板的/sbin 目录下,输入如下命令创建软连接:

cd /sbin/
ln -s /usr/local/sbin/sshd

软连接创建完成以后就可以直接调用上面 ssh 相关命令了。
打开 /usr/local/etc/sshd_config 文件,找到 #PermitRootLogin 所在行,将其改为 PermitRootLogin yes。

openssh 设置

(1)添加 sshd 用户
首先添加“sshd”用户,在使用 adduser 命令添加 sshd 用户的时候需要检查一些文件或目录是否存在。
在这里插入图片描述
(2)在开发板上生成秘钥文件
一切准备好以后我们还需要在开发板中生成秘钥文件,使用我们上面移植 openssh 所编译出来的 ssh-keygen 软件即可。进入到开发板的/usr/local/etc 目录下,输入如下所示命令生成秘钥文件,由于 6ULL 性能比较差,有些秘钥文件生成过程可以会有点耗时,打开几十秒:

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 ed25519 -f ssh_host_ed25519_key -N ""

完成以后就会在/usr/local/etc 目录下产生 8 个以“ssh_host_”开头的秘钥文件,如图所示:
在这里插入图片描述

openssh 使用

openssh 移植已经移植到了开发板中,我们可以通过 sshd 软件在开发板上搭建 openssh 服务器,然后在其他的主机上通过 ssh 来登录开发板。我们可以同样使用 scp 命令来向开发板传输文件。首先要在开发板上启动 ssh 服务,sshd 软件用于启动 ssh 服务,注意要输入全路径!输入如下命令:

/sbin/sshd //启动 sshd 服务

(1)ssh 登录
启动以后我们就可以使用 XobaXterm、SecureCRT 等终端软件通过 SSH 服务登录开发板,这里以 XobaXterm 为例讲解一下。打开 XobaXterm 软件,点击 Session 按钮,在弹出的 Session settings 界面上选择 SSH。在 Remote host 栏输入开发板 IP 地址,在 Specify username”栏输入登录用户名,比如我们上面创建的“sshd”用户,配置完成以后如图所示:
在这里插入图片描述
配置完成以后点击“OK”按钮,此时就会打开 ssh 会话框,如图所示:
在这里插入图片描述
输入 sshd 用户密码,可能会弹出是否保存密码对话框,选择保存即可。如果密码正确的话就会登录到开发板上,如图所示:
在这里插入图片描述
SSH 登录成功以后我们就可以直接对开发板进行各种操作了。
同样的,我们也可以在 ubuntu 下通过 ssh 命令登录开发板,输入如下命令:

ssh sshd@192.168.1.251

其中 sshd 为登录账户名字,192.168.1.251 是开发板的 IP 地址。第一次与开发板建立连接的时候会让你进行确认,输入 yes 就行了。
如果是在 window 登录开发板,有时候会出现 .ssh/knowns 的报错,删除提示目录的文件就可以了。
(2)scp 命令拷贝文件
如果我们要向开发板发送一个文件,我们可以通过 TF 卡或者 U 盘来中转,或者通过我们上一章讲的 tftp 来发送。本章我们移植 openssh 的时候也编译出来了一个名为 scp 的命令,所以我们可以在开发板中使用 scp 命令向其他主机发送文件,同样的其他主机也可以使用 scp 命令向开发板发送文件。
例如我们要把 ubuntu 中的一个文件发送到开发板中,输入如下命令即可:

scp seriaApp sshd@192.168.1.251

不指定传输的目录就默认传输到当前目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
buildroot是一种用于构建文件系统的工具。它可以帮助我们处理文件系统的各种细节,使得文件系统更加合理和有效。相比于使用busybox构建文件系统,buildroot可以更好地满足产品开发的需求,因为它处理了很多不完善和容易忽略的细节。因此,在做产品时,推荐使用buildroot来构建文件系统。当然,还有其他类似的软件,比如yocto,也可以用来构建文件系统。\[1\] 使用buildroot构建文件系统相比于使用busybox,它更加完整,不需要我们自行添加很多东西,比如库文件。在驱动开发中,很多第三方软件也需要我们自己进行移植,而这些软件往往依赖其他的库文件,导致移植过程非常繁琐。因此,使用buildroot可以简化这个过程。\[2\] 需要注意的是,使用buildroot构建文件系统可能是最简单的,没有配置任何第三方的库和软件。但是,我们可以通过配置buildroot来使能一些常见的第三方软件,从而满足我们的需求。\[3\] #### 引用[.reference_title] - *1* *2* *3* [Buildroot文件系统构建](https://blog.csdn.net/lengyuefeng212/article/details/119848347)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值