前两周老板说要接入全志的方案,于是我便踏上嵌入式Linux的学习之路。本来要记录下环境的安装过程,但全志的平台已经有很详细的文档了,所以在这里只记录学习和调试过程。
我所使用的开发板是全志的R329-N4,在收到开发板后,烧录运行程序没问题。在经过点灯、推拉文件、调试wifi蓝牙等没问题后,开始看韦东山老师的视频来开始我的嵌入式Linux学习之路。首先第一步,与初步学习c语言一样,运行一个简单的hello程序。只不过,我们是要在开发板上运行这个程序!
首先交叉编译环境的搭建我是参考这篇文章:Hello World - V853。
当然我们使用的开发板略有不同,但配置方面大同小异。
首先,指定存放交叉编译需要使用的库文件头文件的文件夹:
然后,在虚拟机的Ubuntu系统下编写hello.c:
编写完成之后,如果是在虚拟机中运行,我们只需要 gcc -o hello hello.c 生成可执行文件hello(注意在linux下可执行文件是没有后缀.exe的),然后运行./hello,就可以看到:
然而,直接把这个可执行文件放到开发板上能不能运行呢?我们来试一下。
第一步,在window的cmd中用ADB将文件推送到开发板:
第二步,ls查看Tina(Tina是全志开发板的Linux系统)的目录,可以看到hello文件已经推送过来:
第三步,运行./hello:
权限不够,我们chmod一下:
再次运行:
可以看到运行失败。这是因为,在各种开发板上运行的程序,必须要用交叉编译工具链编译之后,才能运行。通过上面参考的文章,我们要这样编译hello.c:
编译生成的hello可执行文件,已经无法在虚拟机的Ubuntu系统下运行了,它会打印格式错误:
我们直接推送到Tina中运行:
然而,这个时候仍然报错:/bin/sh: ./hello: not found。这个问题可以定位到动态链接库上,参考这篇文章:交叉编译环境以及开发板上-/bin/sh: ./hello: not found_船过水无痕的博客-CSDN博客
使用静态编译可以暂时解决这个问题,当然永久解决的方法文章也有介绍。
再次推送到Tina运行:
成功打印Hello, world!