一、FTP服务器移植与搭建
将 ALPHA 开发板作为一个小型的 FTP 服务器,这样我们就可以通过 FileZilla 软件直接在开发板和 windows 之间通过网络进行文件互传。而在开发板上搭建 FTP 服务器很简单,就是 vsftpd 的移植。
1、在ubuntu下安装vsftpd
2、在window下安装FileZilla
FileZilla官网下载,下载地址如下:点击链接。步骤省略。
3、移植vsftpd到开发板上
现在需要在自己制作的根文件系统中安装 vsftpd,所以就需要我们自己移植 vsfpd。首先需要到 vsftpd 官网下载 vsftpd 源码,网址为:点击链接。
移植步骤及注意点:
将 vsftpd-3.0.3.tar.gz 发送到 ubuntu 中,然后使用如下命令进行解压:
tar -vxzf vsftpd-3.0.3.tar.gz //解压缩
解压缩完成以后会得到一个名为“vsftpd-3.0.3”的文件夹,然后进入此文件夹内。
打开 Makefile,我们需要配置一下,修改 Makefile 中的 CC 变量为我们所使用的交叉编译器:
CC = arm-linux-gnueabihf-gcc //CC 为交叉编译器
Makefile 修改完成以后就可以编译:
make //编译 vsftpd
等待编译完成,会得到两个文件: vsftpd 和 vsftpd.conf,我们需要这两个文件。将 vsftpd 拷贝到开发板根文件系统下的/usr/sbin 目录下,将 vsftpd.conf 拷贝到开发板根文件系统的/etc 目录下。
拷贝完成以后给予 vsftpd 可执行权限,并且修改 vsfptd.conf 所属用户为 root,命令如下:
chmod +x /usr/sbin/vsftpd
chown root:root /etc/vsftpd.conf
修改vsftpd配置 ,允许本地用户注册和允许任何FTP写命令,操作如下:
如果第一次添加用户的话要先将 ubuntu 下的/etc/passwd 和/etc/group 这两个文件复制到开发板根文件系统的对应目录,命令如下:
sudo cp /etc/passwd /home/djw/linux/nfs/rootfs/etc/ -f
sudo cp /etc/group /home/djw/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 也支持匿名登录。使用用户名加密码登录的话就要创建一个用户,用户名自己定义,这里我创建一个名为“djw”的用户,命令如下:
adduser djw//创建登录要用户
最终会在/home 目录下存在三个用户目录,分别对应“ftp”、“nobody”和“djw”,如下图所示
4、Filezilla 连接测试
测试之前确保直接开发板网络连接正常,电脑可以 ping 通开发板!
输入如下命令,启动 vsftpd 服务器:
vsftpd & //启动 vsftpd
这里也可以将”vsftpd &“指令添加到/etc/init.d/rsC文件下,让开发板开机自启动。
vsftpd 启动以后就可以使用 filezilla 进行连接测试了,新建站点,站点设置如下图所示:
设置好以后就可以连接了,连接成功以后如下图所示:文件拖拉即可传输文件
5、注意点
如果使用FileZilla软件连接开发板时出现了500 OOPS: cannot change directory:/home/*******
这样的错误信息,如下图所示:
其实就是/home/djw这个目录权限不够,那我们可不可以将该目录直接”chmod 777 /home/djw“呢? 经过验证是不行的。因此我们需要在vsftpd.conf配置文件添加以下内容,如下图所示:
二、开发板 OpenSSH 移植与使用
openssh库依赖于zlib 库 和 openssl 库。
1、移植 zlib 库
zlib 源码下载地址为:点击链接,拷贝到 ubuntu 中并解压,命令如下:
tar -vxzf zlib-1.2.11.tar.gz //解压
解压完成以后得到一个名为“zlib-1.2.11”的 zlib 源码文件。另外新建一个名为“zlib”的文件夹来保存 zlib 的编译结果。进入 zlib 源码目录,然后配置并编译,命令如下:
cd zlib-1.2.11/ //进去 zlib 源码
CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld AD=arm-linux-gnueabihfas ./configure --prefix=/home/djw/linux/IMX6ULL/tool/zlib //配置
make //编译
make install
编译、安装完成以后的 zlib 目录内容如下图所示:
将上图中的 lib 目录下的 zlib 库文件拷贝到开发板根文件系统的/lib 目录下,命令为:
sudo cp lib/* /home/djw/linux/nfs/rootfs/lib/ -rfa
2、移植 openssl 库
openssl 源码下载地址为:点击链接
将 openssl 源码压缩包拷贝到 Ubuntu 中前面创建的 tool 目录下,然后使用如下命令将其解压:
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/djw/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/djw/linux/nfs/rootfs/lib/ -af
sudo cp libssl.so* /home/djw/linux/nfs/rootfs/lib/ -af
3、移植 openssh 库
openssh 源码下载地址为:点击链接,如下图所示:
先解压 openssh 源码,命令如下:
tar -vxzf openssh-8.2.tar.gz
解压完成以后就会生成一个名为“openssh-8.2”的文件夹,进入此文件夹里面,然后配置并编译 openssh,命令如下:
cd openssh-8.2/
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/home/djw/linux/IMX6ULL/tool/zlib --with-ssl-dir=/home/djw/linux/IMX6ULL/tool/openssl --disable-etcdefault-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar //配置
make //编译
在配置 openssh 的过程中,“–with-zlib”参数用于指定 zlib 库所在的目录,“–with-ssl-dir”参数用于指定 openssl 库所在的目录,编译 openssh 的时候不用“make install”。
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”。
当所需的文件都存在以后就可以使用 adduser 创建名为“sshd”的用户了,创建 sshd 用户的时候需要设置密码,大家一定要记得这个密码,这里我设置简单一点,为“123456”,创建过程如下图所示:
一切准备好以后我们还需要在开发板中生成秘钥文件,使用我们上面移植 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_”开头的秘钥文件,如下图所示:
4、openssh 使用测试
openssh 移植已经移植到了开发板中,我们可以通过 sshd 软件在开发板上搭建 openssh 服务器,然后在其他的主机上通过 ssh 来登录开发板。我们可以同样使用 scp 命令来向开发板传输文件。首先要在开发板上启动 ssh 服务, sshd 软件用于启动 ssh 服务,注意要输入全路径!输入如下命令:
/sbin/sshd //启动 sshd 服务
也可以在/etc/init.d/rcS 文件中加入以上命令,实现 ssh 服务开机自启动。
使用XobaXterm软件的SSH工具远程登陆开发板,如下图所示:
也可以在 ubuntu 下通过 ssh 命令登录开发板,如下图所示:
使用scp 命令拷贝文件,例如把ubuntu中的文件发送给开发板中,如下图所示:
上图出现无效连接,这是因为/dev/null文件拒绝访问了,我们先看看开发板根文件系统下的/dev/null文件的信息,如下图所示:
由上图可知,/dev/null文件只有文件所以者和用户组拥有读和写的权限,其他用户是没有权限的,因此导致ubuntu这边是没有权限操作的,所以我们需要给/dev/null文件增加其他用户的读写权限,因为每次系统重新启动,该文件权限会恢复默认的,所以我们需要在系统启动后给它赋予其他用户的读写权限,操作是:在/etc/init.d/rcS脚本文件中添加"chmod 666 /dev/null"
即可。
那么再次重新传输文件,如下图所示:
已经文件传输成功了。
三、关于u-boot上的操作及根文件系统下的脚本文件知识点
简介:
Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader 程序。这段bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH, SD, MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。当然了,bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核, bootloader 和 Linux 内核的关系就跟 PC 上的 BIOS 和 Windows 的关系一样, bootloader 就相当于 BIOS。
Linux开发板中,EMMC是有3个分区的,第0个分区存放uboot;第1个分区存放Linux镜像文件和设备树文件;第2个分区存放根文件系统。
命令使用:
1、bdinfo - 查看开发板的相关信息
2、pri – 查看环境变量
3、version – 查看uboot版本信息
4、setenv name xxx; saveenv – 设置环境变量,并保存
例如设置uboot倒计时设置为5秒,如下图所示:
5、dhcp 用于从路由器获取 IP 地址
前提得开发板连接到路由器上的,如果开发板是和电脑直连的,那么 dhcp 命令就会失效。直接输入 dhcp 命令即可通过路由器获取到 IP 地址,如下图所示:
6、uboot中的nfs命令格式如下所示:
nfs [loadAddress] [[hostIPaddr:]bootfilename]
使用 nfs 命令来将 zImage 下载到开发板 DRAM 的 0X80800000 地址处,命令如下:
7、uboot中的tftp命令格式如下所示:
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
将 Ubuntu中的tftpboot 文件夹里面的 zImage 文件下载到开发板 DRAM 的 0X80800000 地址处,命令如下:
8、查看当前开发板一共有几个 MMC 设备
9、切换当前 MMC 设备
10、查看 EMMC 的分区情况
11、mmc write 命令烧写数据到SD设备或者EMMC中
12、查询指定 MMC 设备分区的文件系统信息
13、查询 FAT 格式设备的目录和文件信息
14、查看 MMC 设备某个分区的文件系统格式
15、 用于将指定的文件读取到 DRAM 中
16、fatwrite 命令
17、通过tftp方式下载Linux镜像和设备树,然后通过bootz启动Linux系统
18、使用命令 fatload 将 zImage 和 imx6ull-14x14-emmc-7-1024x600-c.dtb 从EMMC 的分区 1 中拷贝到 DRAM 中,启动 Linux 系统
19、bootm命令
20、 环境变量 bootargs
21、USB WIFI启动
modprobe 8188eu.ko //加载 RTL8188 驱动模块
ifconfig wlan0 up //打开 wlan0 网卡
iwlist wlan0 scan //搜索当前环境下的所有 WIFI 热点
//使用 wpa_supplicant 工具让 RTL8188 USB WIFI 连接到热点上。
wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
udhcpc -i wlan0 //从路由器获取 IP 地址
ping -I 192.168.43.26 www.baidu.com //ping百度
22、开发板Linux启动方式
uboot 启动Linux内核和设备树,根文件系统的加载在emmc内部/dev/nfs 设置:
setenv ipaddr 192.168.1.119 //开发板IP地址
setenv ethaddr b8:ae:1d:01:00:00 //开发板的 MAC 地址
setenv gatewayip 192.168.1.1 //开发板网关
setenv netmask 255.255.255.0 //子网掩码
setenv serverip 192.168.1.111 //服务器IP地址,例如ubuntu的
setenv dnsip 114.114.114.114 //设置DNS域名
setenv bootdelay 5 //设置boot启动延时5秒
使用nfs远程挂载根文件系统到开发板上:
setenv bootargs ‘console=tty1 console=ttymxc0,115200 rw root=/dev/nfs nfsroot=192.168.1.111:/home/djw/linux/nfs/rootfs ip=192.168.1.119:192.168.1.111:192.168.1.1:255.255.255.0::eth0:off’
使用tftp下载linux内核、设备树到开发板DRAM中,再启动
setenv bootcmd ‘tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000;’
saveenv //保存环境变量
在emmc启动的,根文件系统的加载在emmc内部/dev/mmcblk1p2
setenv bootcmd ‘mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-evk.dtb;bootz 80800000 - 83000000;’
根文件系统在EMMC启动
setenv bootargs ‘console=tty1 console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw ip=192.168.1.119:192.168.1.111:192.168.1.1:255.255.255.0::eth0:off’文章来源:https://www.toymoban.com/news/detail-707341.html
23、关于根文件系统中/etc/init.d/rcS、 /etc/fstab、 /etc/inittab文件的知识点
文章来源地址https://www.toymoban.com/news/detail-707341.html
到了这里,关于驱动程序开发:FTP服务器和OpenSSH的移植与搭建、以及一些笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!