data/attach/1907/8d2rq1x16msg9rgolc50utw0aqjobgz6.jpg
嵌入式Linux移植rz和sz命令
rz、sz是Linux/Unix 同Windows 进行ZModem 文件传输的命令行工具,windows 端需要支持ZModem 的telnet/ssh 客户端,例如:SecureCRT。
运行命令rz,即是接收文件,SecureCRT就会弹出文件选择对话框,选好文件之后关闭对话框,文件就会上传到当前目录 (默认使用二进制方式传送),运行命令sz …(可以同时传送 多个文件)就是发文件到windows上。
rz、sz 传输文件是通过串口进行传输,传输速率较慢,只适用于小文件的传输。
1、下载rzsz源码包
http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz
我在网上尝试找了一下,没有找到下载文件。感兴趣的可以自己去尝试下载源码。这里百度rzsz 源码下面可以下载到
如果在Linux系统命令行下,可以使用wget 命令进行下载。
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz
2、解压rzsz 文件。
使用tar xvzf 命令进行解压。使用-C选项可以解压到指定目录下
[root@codeMonkey rzsz]# tar xvzf rzsz-3.48.tar.gz -C /root/ARM/
解压完成后可以在解压的目录中看到一个src 的文件。
3、修改Makefile 文件。
将第3行和第4行修改成如下所示:
CC=arm-linux-gcc
OFLAG= -O -DREGISTERED -static
第3行的意思是指定交叉编译器,第4行的意思是去掉"UNREGISTERED COPY"提示,并且使用静态编译。
注意:这里一定要指定静态编译!
因为第一次我并没有加-static 选项,编译出来的命令下载到根文件系统的/usr/bin 目录中。执行rz 命令的时候,系统提示找不到该命令!移植的Linux系统一般是没有移植库文件的,所以动态编译出来的程序会提示找不到。这也间接的证明了Linux系统下的编译默认是使用的动态编译。
关于静态编译和动态编译的区别,请自行百度!这里不再解释
也可以参考这篇:
http://blog.csdn.net/zhengqijun_/article/details/51849968
4、执行make posix 生成可执行程序。
[root@codeMonkey src]# make posix
arm-linux-gcc -O -DREGISTERED -static -DPOSIX -DMD=2 rz.c -o rz
size rz
text data bss dec hex filename
501436 2120 17232 520788 7f254 rz
rm -f rb rx rc
ln rz rb
ln rz rx
ln rz rc
arm-linux-gcc -O -DREGISTERED -static -DPOSIX sz.c -o sz
size sz
text data bss dec hex filename
508884 2176 50096 561156 89004 sz
rm -f sb sx zcommand zcommandi
ln sz sb
ln sz sx
ln sz zcommand
ln sz zcommandi
使用ls 命令进行查看
可以发现生成了很多可执行文件,如rz、sz、sx 等。
5、将生成的可执行文件复制到根文件系统的/usr/bin目录下
使用cp 命令进行赋值
[root@codeMonkey src]# cp gz rb rc rx rz sb sx sz zcommand zcommandi ../../rootfs/usr/bin
6、下载到开发板中运行。
Linux系统启动成功后,执行rz 命令进行文件的传输。
[root@MINI2440 /]# rz
rz ready. Type "sz file ..." to your modem program
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring test.txt...
Transferring test.txt...
?rz 3.48 01-27-98 finished.
这里我传输了一个test.txt 文件。如果执行rz 命令后能出现下面的图,应该就没有什么问题。