从helloworld编译运行,到把DUO变成ftp服务器!

拿到DUO已经一周多了,按照论坛里大神的教程开始上手DUO。

本人环境:ubuntu20.04.

首先当然是helloworld编写了! :smiley:

具体过程如下:

1、关于编译工具,官方提供的host-tools中有3种工具,通过在DUO系统中执行命令可以查看系统编译工具信息。

可以看到官方DUO的系统镜像使用的是musl-gcc工具。
2、把host-tools中的工具链添加到ubuntu系统的PATH环境变量中。通过修改~/.bashrc文件,增加环境变量。在bashrc文件末尾添加如下:

export PATH=/home/xxx/host-tools/gcc/riscv64-linux-musl-x86_64/bin:$PATH

3、修改添加完成以后,需要终端中重新source一下bashrc文件,然后渐入riscv64之后tab,可以看到gcc工具链已经安装完成。


或者也可以echo $PATH,查看工具链路径是否已经添加进去。
4、确认上述工具安装完毕以后就可以愉快的开始编译helloworld啦!

#include<stdio.h>

void main()
{
    printf("hello world!\r\n");
}

这里使用cmake完成编译。需要建立CMakeLists.txt:

PROJECT(HELLO)
SET(SRC_LIST hello.c)
SET(CMAKE_SYSTEM_NAME LINUX)

SET(CMAKE_C_COMPILER riscv64-unknown-linux-musl-gcc)
SET(CMAKE_CXX_COMPILER riscv64-unkown-linux-musl-g++)

ADD_EXECUTABLE(hello ${SRC_LIST})

然后执行cmake . 生成makefile。之后执行make,生成hello可行文件。

通过scp hello root@192.168.42.1:/root/ 将hello程序拷贝到DUO上,之后./hello即可执行看到结果。

注意:因为这里是动态连接的文件,除了拷贝这个hello文件以外,还需要拷贝动态连接库即.so文件到DUO的lib库内,否则程序会出现not found的错误。

如何查看用的什么库呢?可以使用file命令查看。


可以看到hello程序执行需要ld-musl-riscv64xthead.so.1,这个文件在host-tools中,可以搜索找到后然后拷贝到DUO的lib文件夹下。
至此最简单的helloworld就编译成功了。

上面我们看到拷贝文件都需要执行scp命令行,其实完全可以编译vsftp,把DUO编程ftp服务器,然后就可以直观的上传和下载文件到DUO了。
这里使用的vsftp3.0.3版本。主要过程如下:
1、修改Makefile:


这里主要修改了交叉编译工具链以及连接参数,可以参考上图。

2、使用musl工具链编译可能报错,这里需要自行添加定义:

#define WTMPX_FILE  "/var/log/wtmp"

3、make编译,成功的话会生成vsftpd 及vsftpd.conf文件。
vsftp files

4、还得使用scp命令把vsftpd 和conf文件拷贝到DUO上。其中vsftpd存放在/usr/sbin/, vsftpd.conf文件存放到/etc/中。

5、根据需要对vsftpd.conf文件做一些配置。具体可以网上查询。

6、 可以reboot一下DUO,然后通过执行vsftpd &,让服务器程序在后台运行。当然也添加自启动。

7、最后运行filezilla,输入相关参数后连接ftp服务器。

至此就可以愉快的使用ftp客户端来传送文件了。

4 Likes

file命令是怎么加上的?我的板子-sh: file: not found

file命令是宿主机上用的,你在板子上肯定是不行的

It seems openssl needed. How do you fix this?

riscv64-unknown-linux-musl-gcc -c ssl.c -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wall -W -Wshadow -Werror -Wformat-security -D_FORTIFY_SOURCE=2 -idirafter dummyinc
ssl.c:28:10: fatal error: openssl/err.h: No such file or directory
28 | #include <openssl/err.h>
| ^~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:26: ssl.o] Error 1

不能使用 scp 上传吗,应该可以使用 wget 下载吧