当前位置: 首页 > news >正文

驱动程序开发:FTP服务器和OpenSSH的移植与搭建、以及一些笔记

目录

  • 一、FTP服务器移植与搭建
    • 1、在ubuntu下安装vsftpd
    • 2、在window下安装FileZilla
    • 3、移植vsftpd到开发板上
    • 4、Filezilla 连接测试
    • 5、`注意点`
  • 二、开发板 OpenSSH 移植与使用
    • 1、移植 zlib 库
    • 2、移植 openssl 库
    • 3、移植 openssh 库
    • 4、openssh 使用测试
  • 三、关于u-boot上的操作及根文件系统下的脚本文件知识点
    • 1、bdinfo - 查看开发板的相关信息
    • 2、pri – 查看环境变量
    • 3、version – 查看uboot版本信息
    • 4、setenv name xxx; saveenv – 设置环境变量,并保存
    • 5、dhcp 用于从路由器获取 IP 地址
    • 6、uboot中的nfs命令格式如下所示:
    • 7、uboot中的tftp命令格式如下所示:
    • 8、查看当前开发板一共有几个 MMC 设备
    • 9、切换当前 MMC 设备
    • 10、查看 EMMC 的分区情况
    • 11、mmc write 命令烧写数据到SD设备或者EMMC中
    • 12、查询指定 MMC 设备分区的文件系统信息
    • 13、查询 FAT 格式设备的目录和文件信息
    • 14、查看 MMC 设备某个分区的文件系统格式
    • 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启动
    • 22、开发板Linux启动方式
    • 23、关于根文件系统中/etc/init.d/rcS、 /etc/fstab、 /etc/inittab文件的知识点

一、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’

23、关于根文件系统中/etc/init.d/rcS、 /etc/fstab、 /etc/inittab文件的知识点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

驱动程序开发:FTP服务器和OpenSSH的移植与搭建、以及一些笔记

目录一、FTP服务器移植与搭建1、在ubuntu下安装vsftpd2、在window下安装FileZilla3、移植vsftpd到开发板上4、Filezilla 连接测试5、注意点二、开发板 OpenSSH 移植与使用1、移植 zlib 库2、移植 openssl 库3、移植 openssh 库4、openssh 使用测试三、关于u-boot上的操作及根文…...

优化改进YOLOv5算法之添加GIoU、DIoU、CIoU、EIoU、Wise-IoU模块(超详细)

目录 1、IoU 1.1 什么是IOU 1.2 IOU代码 2、GIOU 2.1 为什么提出GIOU 2.2 GIoU代码 3 DIoU 3.1 为什么提出DIOU 3.2 DIOU代码 4 CIOU 4.1 为什么提出CIOU 4.2 CIOU代码 5 EIOU 5.1 为什么提出EIOU 5.2 EIOU代码 6 Wise-IoU 7 YOLOv5中添加GIoU、DIoU、CIoU、…...

windows电脑pc如何使用svn获取文档和代码

一、安装svn 下载链接 也可通过其他方式下载 二、使用 2.1 随便找一个文件夹 2.2 点击右键,选择SVN Checkout 2.3输入网址 如当你在网页上访问时地址为https://10.197.78.78/!/#aaa/view/head/bbb 在这里不能直接填入,而是 https://10.197.78.78/sv…...

ROS1学习笔记:tf坐标系广播与监听的编程实现(ubuntu20.04)

参考B站古月居ROS入门21讲:tf坐标系广播与监听的编程实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、创建功能包二、创建代码2.1 以C为例2.1.1 配置代码编译规则2.1.2 编译整个工作空间2.1.2 配置环境变量2.1.4 执行代码2.2 以Python为例2.2.1 配置代码…...

​力扣解法汇总1590. 使数组和能被 P 整除

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 给你一个正整数数组 nums,请你移除 最短 子数组(可以为 …...

Spring源码阅读(基础)

第一章:bean的元数据 1.bean的注入方式: 1.1 xml文件 1.2 注解 Component(自己写的类才能在上面加这些注解) 1.3配置类: Configuration 注入第三方数据源之类 1.4 import注解 (引用了Myselector类下…...

服务搭建篇(九) 使用GitLab+Jenkins搭建CI\CD执行环境 (上) 基础环境搭建

1.前言 每当我们程序员开发在本地完成开发之后 , 都要部署到正式环境去使用 , 在一些传统的运维体系中 , 开发与运维都是割裂的 , 开发人员不允许操作正式服务器 , 服务器只能通过运维团队来操作 , 这样可以极大的提高服务器的安全性 , 不经过安全保护的开放服务器 , 对于黑客…...

CDC 长沙站丨云原生技术研讨会:数字兴链,云化未来!

一、活动信息:活动主题:CDC 长沙站丨云原生技术研讨会活动时间:2023 年 3 月 14 日下午 14:30-17:30活动地点:长沙市岳麓区-拓维信息总部 1 楼多功能厅活动参与方式:免门票参与,戳此…...

A.特定领域知识图谱知识推理方案:知识图谱推理算法综述[二](DTransE/PairRE:基于表示学习的知识图谱链接预测算法)

推荐参考文章: A.特定领域知识图谱知识推理方案:知识图谱推理算法综述[一](基于距离的翻译模型:TransE、TransH、TransR、TransH、TransA、RotatE) A.特定领域知识图谱知识推理方案:知识图谱推理算法综述[二](DTransE/PairRE:基于表示学习的知识图谱链接预测算法) A.…...

香港酒店模拟分析项目报告--使用tableau、python、matlab

转载请标记本文出处 软件:tableau、pycharm、关系型数据库:MySQL 数据大量分析考虑电脑性能的情况。 文章目录前言一、爬虫是什么?二、使用tableau数据可视化1.引入数据1.1 制作直方图-各地区酒店数量条形图1.2 各地区酒店均价1.3 价格等级堆…...

第18天-商城业务(商品检索服务,基于Elastic Search完成商品检索)

1.构建商品检索页面 1.1.引入依赖 <!-- thymeleaf模板引擎 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- 热更新 --><…...

5.2 对射式红外传感器旋转编码器计次

对射式红外传感器1.1 接线图VCC GND分别接电源的正负极DO数字输出端&#xff0c;随意选择一个GPIO口1.2 硬件原理当挡光片或者编码盘在对射式红外传感器中间经过时&#xff0c;DO就会输出电平变化信号&#xff0c;电平跳变信号触发STM32 PB14号口中断&#xff0c;在中断函数中执…...

【数据库概论】第九章 关系查询处理和查询优化

第九章 关系查询处理和查询优化 本章主要介绍关系数据库查询管理和查询优化&#xff0c;主要分为代数优化&#xff08;又称逻辑优化&#xff09;和物理优化&#xff08;也称非代数优化&#xff09;。 9.1 关系型数据库系统的查询处理 查询处理是关系型数据库管理系统执行查询…...

(WIP) my cloud test bed (by quqi99)

作者&#xff1a;张华 发表于&#xff1a;2023-03-10 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 问题 想创建一个local local test bed, 用来方便做各种云实验&#xff0c;如openstack, k8s, ovn, lxd等…...

git | git 2023 详细版

文章目录一、Git命令1.2 设计用户签名1.3 初始化本地库1.4 查看本地库状态1.5 添加至暂存区1.6 从暂存区删除1.7 将暂存区的文件提交到本地库1.8 查看版本信息二、Git分支2.1 查看分支2.2 创建分支2.3 切换分支2.4 合并分支三、GitHub3.1 代码克隆clone3.2 给库取别名3.3 推送本…...

camunda流程引擎基本使用(笔记)

文章目录一、camunda基础1.1 安装与部署流程引擎1.2 流程引擎结构1.3 流程引擎的基本使用1.3.1 创建一个BPMN Diagram1.3.2 实现一个外部工作者1.3.3 部署流程1.3.4 创建一个流程实例并消费1.3.5 向流程中添加用户任务1.3.6 添加网关1.3.7 业务规则二、Java 集成流程引擎2.1 为…...

JS之数据结构与算法

前言数据结构是计算机存储、组织数据的方式,算法是系统描述解决问题的策略。了解基本的数据结构和算法可以提高代码的性能和质量。也是程序猿进阶的一个重要技能。手撸代码实现栈,队列,链表,字典,二叉树,动态规划和贪心算法1.数据结构篇1.1 栈栈的特点&#xff1a;先进后出clas…...

CnOpenData·A股上市企业数字化转型指数数据

一、数据简介 企业数字化转型是近年来中国社会各界重点关注的领域&#xff0c;但基础数据的不完善在很大程度上制约了相关科学研究的开展。构建合理、科学的数字化转型指标体系有利于学者定量地研究企业数字化的相关问题&#xff0c;也有利于衡量企业的数字化水平。广东金融学院…...

VMware16pro虚拟机安装全过程

很多时候需要用到Linux系统&#xff0c;简单的一种方式可以是&#xff1a;Windows系统运行Linux&#xff08;Windows Subsystem for Linux&#xff09;不过有些时候还是需要虚拟机来运行Linux&#xff0c;也更方便点&#xff0c;比如在做嵌入式系统的烧录等操作都需要Linux环境…...

阿里云第六代云服务器最新价格表(计算型c6、通用型g6和内存型r6)

目前阿里云第六代云服务器有计算型c6、通用型g6和内存型r6实例。计算型c6实例有2核4G、4核8G、8核16G配置可选&#xff0c;主要适用于网站应用、批量计算、视频编码等场景。通用型g6实例有2核8G、4核16G、8核32G配置可选&#xff0c;适用于各种类型的企业级应用&#xff0c;网站…...

微小目标识别研究(2)——基于K近邻的白酒杂质检测算法实现

文章目录实现思路配置opencv位置剪裁实现代码自适应中值滤波实现代码动态范围增强实现代码形态学处理实现代码图片预处理效果计算帧差连续帧帧差法原理和实现代码实现代码K近邻实现基本介绍实现代码这部分是手动实现的&#xff0c;并没有直接调用相关的库完整的代码——调用ope…...

2022-06-14至2022-08-11 关于复现MKP算法的总结与反思

Prerequisite 自2022年6月14日至2022年8月11日的时间内&#xff0c;我致力于完成A Hybrid Approach for the 0–1 Multidimensional Knapsack problem 论文的复现工作&#xff0c;此次是我第一次进行组合优化方向的学习工作&#xff0c;下面介绍该工作内容发展过程以及该工作结…...

IBMMQ教程二(window版安装)

下载下载地址&#xff1a;https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/我这里选择的是9.1.0.0版本安装将下载完成的压缩包解压双击Setup.exe直接运行点击软件需求查看系统配置是否满足&#xff0c;右边绿色的对号说明满足需求&#xff0c…...

Java | HashSet 语法

HashSet 基于 HashMap 来实现的&#xff0c;是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的&#xff0c;即不会记录插入的顺序。 HashSet 不是线程安全的&#xff0c; 如果多个线程尝试同时修改 HashSet&#xff0c;则最终结果是不确定的。 您必须…...

js学习4(运算符)

### 1.算数运算符&#xff1a; 、-、*、\、%&#xff08;取余&#xff09;、**&#xff08;幂方&#xff09; ## 优先级 同数学课程&#xff0c;可以加括号 ### 2.自增和自减 、--&#xff08;即数值变量加一或减一&#xff09; ### 3.赋值运算符 、、-、*、/、... ### 4.比较运…...

2月更新 | Visual Studio Code Python

我们很高兴地宣布&#xff0c;2023年2月版 Visual Studio Code Python 和 Jupyter 扩展现已推出&#xff01;此版本包括以下改进&#xff1a;从激活的终端启动 VS Code 时的自动选择环境 使用命令 Python: Create Environmen 时可选择需求文件或可选依赖项 预发布&#xff1a;改…...

C++回顾(十八)—— 文件操作

18.1 I/O流概念和流类库结构 1 概念 程序的输入指的是从输入文件将数据传送给程序&#xff0c;程序的输出指的是从程序将数据传送给输出文件。 C输入输出包含以下三个方面的内容&#xff1a; &#xff08;1&#xff09;对系统指定的标准设备的输入和输出。即从键盘输入数据&am…...

以java编写员工管理系统(测试过 无问题)

一、系统结果的部分展示 二、题目以及相关要求 三、组成 1.该系统由 Employee 类 、commonEmployee类、Testemd类和managerEmployee类组成 2.Employee实现的代码 public class Employee {private String id;private String name;private String job;private int holiday…...

单例模式之懒汉式

在上篇文章中&#xff0c;我们讲了单例模式中的饿汉式&#xff0c;今天接着来讲懒汉式。 1.懒汉式单例模式的实现 public class LazySingleton {private static LazySingleton instance null;// 让构造函数为private&#xff0c;这样该类就不会被实例化private LazySingleto…...

1638_chdir函数的功能

全部学习汇总&#xff1a;GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 今天看一个半生不熟的小函数&#xff0c;chdir。说半生不熟&#xff0c;是因为这个接口一看就知道是什么功能。然而&#xff0c;这个接口如何用可真就没啥想法了。 …...

照片视频制作软件app/石家庄seo顾问

自从做了wordpress站长&#xff0c;看谁的网站都像是wordpress做的&#xff0c;这一次的wordpress教程就和大家分享下我的经验&#xff0c;我是如何判断那些网站是用wordpress搭建的。原理分析&#xff1a;使用wordpress建站都会有一定的特征&#xff0c;根据这些特征即可进行判…...

邢台网站建设基本流程/域名注册免费

一、项目背景 社会的不断发展&#xff0c;促进各行业的竞争也越来越激烈&#xff0c;高效地管理机制越来越受到重视。对养猪行业来说&#xff0c;养猪场通常都要求有严格的管理规范&#xff0c;只有这样才能提高猪场的经济效益和市场竞争力&#xff0c;然而养猪场大都建立在远…...

做搜狗pc网站优化快速/成都网站快速开发

注意&#xff1a;此图片验证码没有进行美化&#xff0c;以教学为主&#xff0c;目的是为了知道图片验证码的原理&#xff0c;从而能达到读懂他人较为美观的代码步骤:新建一个Servlet对象&#xff0c;利用Response把验证码输出到请求Servlet的页面上 创建一个对象&#xff0c;能…...

怎样去同行网站做外连接/网站seo如何做好优化

为什么80%的码农都做不了架构师&#xff1f;>>> 网络yum配置 # cd /etc/yum.repos.d/ # wget http://mirrors.163.com/.help/CentOS6-Base-163.repo # vi CentOS6-Base-163.repo : % s/\$releasever/6.6/g 编辑文件&#xff0c;把文件里面的$releasever全部替换…...

2023年新闻热点事件/seo整站优化哪家好

题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形&#xff0c;输出边长。 输入格式 输入文件第一行为两个整数n,m&#xff08;1<n,m<100&#xff09;&#xff0c;接下来n行&#xff0c;每行m个数字&#xff0c;用空格隔开&#xff0c;0或1. 输出格式…...

网页制作一个网站八个页面咋做/国内广告联盟平台

文章目录软硬件环境硬件软件Opencv和ROS发布摄像头数据节点图像接收和处理节点软硬件环境 硬件 下位机&#xff1a;树莓派4B&#xff08;4G&#xff09;上位机&#xff1a;PCUSB摄像头 软件 上下位机都是Ubuntu 18.04系统ROS melodic Opencv和ROS OpenCV格式图片&#xf…...