1.问题出现
首先,我在linux主机上编译好程序,但是每次都要把可执行文件通过filezilla或者scrt拉倒板子中去,十分的麻烦。所以我想到利用makefile中执行shell命令的方法,来实现直接上传文件。
我看了一些资料,感觉还是对sftp中“服务器”,“客户端”这两个概念不太理解。但是我现在还是知道了如何简便的操作,并且这里我不说服务器和客户端这个名词,免得理解麻烦。
2.问题解决
1.在我的linux主机上生成ssh key。
ssh-keygen –t rsa
这里会出现一些问题,一路回车即可,这里我是已经生成过了,所以问我是否覆盖,覆盖即可。
zqh@linux:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/zqh/.ssh/id_rsa): /home/zqh/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/zqh/.ssh/id_rsa. Your public key has been saved in /home/zqh/.ssh/id_rsa.pub. The key fingerprint is: SHA256:QPS0Nbi2WPOmlHBFJgu2OZSA7Lostg87ptwWnfXGP1g zqh@linux The key's randomart image is: +---[RSA 2048]----+ | . ..o*.oo= | | o +.*.*.. | | . = +o | | . .+* | | . . o*S= | |. . o. ++oE | |.o . ..o+ | |+=+. .. o | |*+=o . | +----[SHA256]-----+
2.将linux主机上的公匙上传到arm开发板
zqh@linux:~/.ssh$ cat id_rsa.pub >> authorized_keys #复制key
复制key之后将key上传,到arm板的.ssh/文件(这个时候还是问我输入密码)
zqh@linux:~/.ssh$ scp authorized_keys root@172.24.41.12:/root/.ssh root@172.24.41.12's password: authorized_keys 100% 782 0.8KB/s 00:00
3.完成
尝试sftp到arm开发板,发现不需要密码了,那么我现在就可以免密码使用scp直接传文件,非常方便
zqh@linux:~/.ssh$ sftp root@172.24.41.12 Connected to 172.24.41.12. sftp>
3.Makefile
#General Purpose Makefile for cross compile Linux Kernel module ifneq ($(KERNELRELEASE),) obj-m := led.o #+=是连接字符串 else OBJ := led ARCH := arm CROSS_COMPILE := /usr/local/arm/arm-linux-gnueabihf-4.9/bin/arm-linux-gnueabihf- KERN_DIR := /home/zqh/lichee/linux-zero-4.14.y #选择内核路径 SOURCE := main.c TARGET := test_led PWD :=$(shell pwd) #当前路径 LICHEDIR := /root/led_driver/ all: make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KERN_DIR) M=$(PWD) modules $(CROSS_COMPILE)gcc $(SOURCE) -o $(TARGET) clean: rm -f *.ko *.o *.symvers *.mod.c *.mod.o *.order .*.o.ko.cmd .*.ko.cmd .*.mod.o.cmd .*.o.cmd $(TARGET) install: scp $(PWD)/$(OBJ).ko root@172.24.41.12:$(LICHEDIR) scp $(PWD)/$(TARGET) root@172.24.41.12:$(LICHEDIR) endif
这样,执行make install时就可以自动将我的文件下载到arm开发板中了。