虚拟开发板就是虚拟机
前言
此篇博客对于某高校的特定嵌入式设计课的同学生效。闲话不多说,让我们开始正题。众所周知,我们手上应该有一个简化版本的vexpress-a9虚拟开发板(简化指没有移植QT)。打开虚拟开发板以后,我发现里面自带了一个sum程序,居然可以跑。那么有意思的事就来了,我们手上的虚拟开发板是否就真的能够像真的开发板一样跑程序吗?
arm开发板能跑什么程序
经过创龙开发板的洗礼,显然就是经过特定编译器编译过的程序了。而我们vexpress-a9需要的编译器就是a9的编译器,全名是:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu提取码:lahc。编译器配置,我就大概叙述一下流程就行了,解压,添加路径到PATH。[编译器的搭建][https://www.cnblogs.com/dylancao/p/6364188.html],我就是懒得写。不会有人还不会用共享文件吧?共享文件夹及自动挂载设置
编译器验证:hello.c
#include<stdio.h>
void main()
{
printf("hello world!!!\n");
}
编译:可以看见我们成功编译出he执行文件,file查看属性。
开发板运行
程序上传到虚拟开发版。telnet?虚拟开发板本就用的是主机的文件系统,直接复制粘贴就行,目标路径:~/vexpress-a9/rootfs/home/zwj/ 接下来打开虚拟开发板运行即可。没有权限,chmod一下即可
xiami@vexpress:/home/zwj #ls
Demo calc_first first he sum
xiami@vexpress:/home/zwj #./he
hello world!!!
makefile的使用
学会了编译单个文件,接下来就该我们的熟悉的工程了。先储备的一点基础知识,makefile的参数配置
makefile 编写:CC一定要大写
CC = arm-none-linux-gnueabi-gcc
CFLAGS = -Wall
clac:clac.o main.o
$(CC)$(CFLAGS) -o clac clac.o main.o
main.o:main.c clac.h clac.c
$(CC)$(CFLAGS) -c main.c
clac.o: clac.h clac.c
$(CC)$(CFLAGS) -c clac.c
clean:
rm clac clac.o main.o
神奇的事就发生了:它报错了!!!!接下我又百度了两个小时,没有找到有效的解决方法。
zwj@zwj-virtual:~/下载$ make makefile
make: Nothing to be done for 'makefile'.
QT的使用
makefile不行,我们像课上一样换QT行吗?我的直觉告诉我可行。 所以我又百度了一个小时,去找虚拟开发板支持的qmake。有心人,天不负,果然没找到。如果谁有资源的话,能共享一下吗?其实花一百左右,入手a9的低配版也是可以的,这样就有qmake了。一百买一个软件,心酸。
cmake的使用
这时,我们强大工具就完美的解决我们的需求了。在此之前先补一点基础知识,[cmake的参数配置][https://www.cnblogs.com/rickyk/p/3875334.html]。仔细看好,每一个参数的含义,后面很有用。
编写cmake配置:test.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_SYSROOT /usr/local/arm-2014.05)
set(CMAKE_C_COMPILER /usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER /usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
编写Cmakelist.txt,其实前面的文本就用来复制粘贴的
#Make 最低版本号要求
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
#set(CMAKE_SYSROOT /usr/local/arm-2014.05)
set(CMAKE_C_COMPILER /usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER /usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo1)
# 指定生成目标
add_executable(Demo clac.h clac.c main.c)
在当前目录(即工程文件所在的父目录)编译:
zwj@zwj-virtual:~/myfile/test1$ ls
clac.c clac.h CMakeLists.txt main.c Makefile
zwj@zwj-virtual:~/myfile/test1$ cmake .
zwj@zwj-virtual:~/myfile/test1$ ls
clac.c CMakeCache.txt cmake_install.cmake main.c
clac.h CMakeFiles CMakeLists.txt Makefile
zwj@zwj-virtual:~/myfile/test1$ make
Scanning dependencies of target Demo
[ 33%] Building C object CMakeFiles/Demo.dir/clac.c.o
[ 66%] Building C object CMakeFiles/Demo.dir/main.c.o
[100%] Linking C executable Demo
[100%] Built target Demo
zwj@zwj-virtual:~/myfile/test1$ ls
clac.c CMakeCache.txt cmake_install.cmake Demo Makefile
clac.h CMakeFiles CMakeLists.txt main.c
大功告成,总算把目标程序Demo编译出来了。还是跑一下吧。
感言
这是我第一次用markdown的编辑器写文档,还在上手当中,排版难看请见谅。其实在解决问题当中,最难的就是找到一篇优秀的博客了。我给的参考链接请认真浏览,我再筛选它们身上,花了很多时间。
两周过后(FPGA的课设有点赶了),我会在自己新建的虚拟机尝试搭建一个有QT移植的虚拟开发板,主要参考博客1主要参考博客2你们感兴趣的话可以先尝试一下。