尝试从一开发F1C100s应用
既然尝试从零构建F1C100s开发环境成功,我们便开始开发这个神奇的芯片吧。
在这之前,我们写了一个hello程序,我们是怎么装进文件系统里的呢?拷贝到根文件系统,与uboot,内核打包在一起,然后烧写。显然,这样子影响flash寿命不说,肯定大大的减少了我们的开发效率。所以我们不得不采取一种高效的措施,将文件传输到我们的目标板中。
废话不多说,随意概括一下,本贴将包含了以下内容:
1、终端传文件给linux
注意,本贴禁止回复"mark"!
注意,本贴禁止回复"mark"!
注意,本贴禁止回复"mark"!
----------------------------------------
1、使用终端传文件给linux
目标板与外界传文件的方法非多,但是其他方法(NFS启动、wifi传输等),对于我们现在从零构建的工程基础,显然,非常不现实。经过多方面的考虑,最终,选择使用已经能够成功控制单板的串口终端来传输文件。
网上有一个工具,lrzsz,我们可以获取其源码,编译到目标板中。
(1)获取资源
①lrzsz源码:https://whycan.cn/files/members/1845/lrzsz-0_12_20_tar.gz
②终端工具:https://whycan.cn/files/members/1845/SecureCRT.zip
(2)编译这个lrzsz
①新建一个目录存放这个包
mkdir /home/book/f1c100s/lrzsz
②自己想办法将下载到的lrzsz-0_12_20_tar.gz上传到/home/book/f1c100s/lrzsz目录下。
③进入该目录并解压lrzsz包
cd /home/book/f1c100s/lrzsz
tar -xzvf lrzsz-0_12_20_tar.gz
④进入解压出来的目录
cd lrzsz-0.12.20/
⑤输入一下命令生成配置文件
./configure --cache=arm-linux
⑥明确自己交叉编译工具链的位置
我们使用buildroot输出的交叉编译工具链,与根文件系统一致。我的编译器的目录位于这个路径:
/home/book/f1c100s/buildroot-2017.08/output/host/bin/arm-linux-gcc
⑦使用这个交叉编译工具链,编译它
make CC=/home/book/f1c100s/buildroot-2017.08/output/host/bin/arm-linux-gcc
编译出来,生成了两个文件,复制这两个文件到我们的根文件系统bin目录下
sudo cp ./src/lsz /home/book/f1c100s/rootfs/bin/
sudo cp ./src/lrz /home/book/f1c100s/rootfs/bin/
⑧看看我们有没有缺少什么运行库
==>检查第1个文件
/home/book/f1c100s/buildroot-2017.08/output/host/bin/arm-linux-readelf -d ./src/lsz
可以看到,这个程序依赖于这样的运行库
标记 类型 名称/值
0x00000001 (NEEDED) 共享库:[libc.so.0]
==>检查第2个文件
/home/book/f1c100s/buildroot-2017.08/output/host/bin/arm-linux-readelf -d ./src/lrz
发现依赖库跟第一个一样。
⑨复制依赖库,到根文件系统的lib目录下。
那么问题来了,依赖库放在哪里呢?我们在交叉编译工具链哪里搜索一下:
cd /home/book/f1c100s/buildroot-2017.08/output/host/
find -name "libc.so.0"
结果如下:
./arm-buildroot-linux-uclibcgnueabi/sysroot/lib/libc.so.0
复制这个库文件到根文件目录lib中,
sudo cp /home/book/f1c100s/buildroot-2017.08/output/host/arm-buildroot-linux-uclibcgnueabi/sysroot/lib/libc.so.0 /home/book/f1c100s/rootfs/lib/
⑩打包并烧写镜像。
sudo sh /home/book/f1c100s/BuildMyImage.sh
(3)使用这个工具
使用串口CRT工具连接终端,输入命令"lrz",回车,CRT会弹出一个框框,我们可以发送一个文件到目标板
上个图就好了,自己折腾吧。速度有点慢,聊胜于无。(/笑)
最近编辑记录 LinjieGuo (2020-05-01 16:31:15)
离线
很多终端工具都支持X/Z modem,很稳定。开发人员使用起来也算方便。
最近编辑记录 LinjieGuo (2020-05-02 11:45:51)
离线
关于adb功能的启用,在Linux3.14上,楼主有什么好的推荐吗?
我现在打开了usb gadget驱动,usb functionfs驱动,编译好了adbd、adb,但是板子接电脑一直不能识别(一点动静没有)。不明原因啊,痛苦了几天了。
楼主有空帮忙看看,多谢啦。
不好意思,这个版本我也没搞定。
离线
楼主,麻烦问下,为什么你编译arm上跑的应用软件时,使用的是:make CC=/home/book/f1c100s/buildroot-2017.08/output/host/bin/arm-linux-gcc
为什么不用直接使用编译kernel时的交叉编译器呢? 比如这个:arm-linux-gnueabi-gcc-7.2.1疑问: 为什么会出现两套交叉编译器呢?
根文件系统是buildroot出来的,buildroot里面自己下载了一个编译器,用来编译根文件系统。
我们的内核是单独编译的,所以有2套编译器。
如果buildroot里包含内核,应该编译器就相同了。
我是这样理解的,根文件系统用什么编译器,应用程序就应该用什么编译器。
最近编辑记录 LinjieGuo (2021-01-12 11:41:34)
离线
你好 linjie
我在编译 的时候出现
l10nflist.c:42:19: fatal error: argz.h: No such file or directory
# include <argz.h>
^
compilation terminated.
make[2]: *** [Makefile:78: l10nflist.o] Error 1
make[2]: Leaving directory '/home/jonsen/f1c100s/lrzsz/lrzsz-0.12.20/intl'
make[1]: *** [Makefile:172: all-recursive] Error 1
make[1]: Leaving directory '/home/jonsen/f1c100s/lrzsz/lrzsz-0.12.20'
make: *** [Makefile:282: all-recursive-am] Error 2不知如何处理?
直接进buildroot里,make menuconfig,然后找到lrzsz这个支持包,勾选上,然后编译。就有了,这种编译的过程学习一下就ok了。
离线
你好 linjie
那我重新编译 打包 烧录到芯片后
pc下载 SecureCRT.zip 这个工具就能跑了啊
不用自己装了LinjieGuo 说:感谢万能的坑友,我搜索了一下,buildroot中确实有这个功能,可以通过搜索lrzsz,找到了它位于这个目录中:
Target packages --->
Networking applications --->
[v] lrzsz
勾选之后,编译,根文件系统中就有这个工具了。
是的,先运行绿色.bat,输入Y,破解,然后退出,找到SecureCRT.exe执行程序,连接串口就ok了。
离线
你好 linjie
buildroot 里配置了
Search Results ─
│ Symbol: BR2_PACKAGE_LRZSZ [=y] 这里
│ Type : boolean
│ Prompt: lrzsz
│ Location:
│ -> Target packages
│ (1) -> Networking applications
│ Defined at package/lrzsz/Config.in:1
│ Depends on: !BR2_STATIC_LIBS [=n]
编译后 在 output/images/rootfs.tar /bin 里没有找到 lrz命令,,,,
# cd ../
# ls
bin hello lib32 media proc sbin usr
dev hellonano linuxrc mnt root sys var
etc lib main.c opt run tmp
# cd bin
# ls
ash dumpkmap linux64 nice sh
busybox echo ln pidof sleep
cat egrep login ping stty
chattr false ls pipe_progress su
chgrp fdflush lsattr printenv sync
chmod fgrep mkdir ps tar
chown getopt mknod pwd touch
cp grep mktemp rm true
cpio gunzip more rmdir umount
date gzip mount run-parts uname
dd hostname mountpoint sed usleep
df kill mt setarch vi
dmesg link mv setpriv watch
dnsdomainname linux32 netstat setserial zcat
# lrz
/bin/sh: lrz: not found
#LinjieGuo 说:LinuxGo 说:你好 linjie
那我重新编译 打包 烧录到芯片后
pc下载 SecureCRT.zip 这个工具就能跑了啊
不用自己装了是的,先运行绿色.bat,输入Y,破解,然后退出,找到SecureCRT.exe执行程序,连接串口就ok了。
在buildroot里勾选,是可以的喔,我测试过。我电脑在家里,我得晚上回去看看,现在不方便搞f1c100s,你看看是不是勾选错了,或者直接下载我配置好的虚拟机,
最近编辑记录 LinjieGuo (2021-01-15 15:18:24)
离线