由于Ubuntu系统使用的GCC编译器,编译结果是X86文件,只能在X86上运行,不能在ARM上直接运行。因此,还要安装一个“Ubutun交叉编译工具链”,才可以在ARM上运行。
arm-none-linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。lsb-core lib32stdc++6是需要安装的相关库。
1、在安装前,要检查虚拟机可以上网,否则可能会导致安装失败。
2、在虚拟机界面,右击鼠标,弹出下面的对话框:
3、点击“打开终端(E)”,得到下面的界面:
4、输入“ls回车”,列出文件和文件夹
输入“cd linux回车”,进入linux目录;
输入“rm main*回车”,删除所有以main开头的文件。
输入“ls回车”,列出文件和文件夹
5、输入“mkdir tool回车”,在linux目录下创建一个”tool“文件夹。
然后输入“ls回车”,列出文件和文件夹;
6、双击Window系统桌面上的“FileZilla Client.exe”,打开FTP客户端,这时候,我们知道安装“FTP客户端” 的用处了吧。
7、点击“文件”,然后点击“站点管理器”,见下图操作:
打开E:\开发板资料\STM32MP157开发板A盘基础资料\05、开发工具\05、开发工具\01、交叉编译器,找到下面这个文件:
gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar
8、点击下图中“MP1_Ubinti”,然后点击“链接”,见下图操作:
得到下图:
9、找到E盘,再找STM32MP157开发板A盘基础资料,见下图操作:
10、将gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar拖到tool目录下,见下图操作:
11、等待文件传输结束
12、文件上传成功,见下图:
13、在终端,输入“pwd回车”,pwd是词组print working directory的首字母缩写,即打印工作目录;
输入“cd tool回车”,进入tool目录;
输入“ls回车”,列出文件和文件夹;
14、在虚拟机界面右击鼠标,弹出下面的对话框,再打开一个终端。
15、点击“打开终端(E)”,得到下面的界面:
16、输入“ls回车” ,列出文件和文件夹;
17、输入“sudo mkdir /usr/local/arm回车” ,在“/usr/local”路径下创建一个“arm”文件夹:
18、输入密码“123456回车”
19、输入“cd /usr/local/arm回车” ,进入“/usr/local”路径下的“arm”文件夹:
20、输入“sudo cp gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz /usr/local/arm回车”,将当前文件拷贝到“/usr/local/arm”目录下
21、 输入密码“123456回车”
22、在另外一个已经打开的终端里,输入“ls回车”,列出文件和文件夹;
23、输入“sudo tar -vxf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz回车”,解压文件。
24、 输入密码“123456回车”
25、解压完成后,输入“ls回车”,发现下面的目录
gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf
26、输入“cd gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/回车”,进入目录gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf下;
输入“ls回车”,列出文件和文件夹;
27、输入“cd bin回车”,进入“bin”目录
输入“ls回车”,列出文件和文件夹;
28、arm-none-linux-gnueabi-gcc是 Codesourcery 公司基于GCC推出的的ARM交叉编译工具,见下图:
29、输入“pwd回车”,查找全路径如下:
/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
输入“sudo vi /etc/profile回车”,直接打开"etc"目录下的profile文件,准备修改它。
30、输入密码“123456回车”
31、在文件的最后面添加下面的语句
export PATH=$PATH:/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
注意:PATH后面不能有空格。
32、按“ESC键”,然后输入“:wq回车”保存退出。
33、升级系统中的软件包
输入“cd /usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin回车”,进入“bin”目录
输入“ls回车”,列出文件和文件夹;
输入“sudo apt-get update回车”,升级系统中的软件包。
输入密码“123456回车”
更新完成见下图:
34、输入“sudo apt-get install lsb-core lib32stdc++6回车”,安装相关库“lsb-core lib32stdc++6”
发现问题如下:
E: 无法获得锁 /var/cache/apt/archives/lock - open (11: 资源暂时不可用)
E: 无法对目录 /var/cache/apt/archives/ 加锁
输入“ps -aux回车”,列出所有进程,找到lock
输入“sudo kill 850回车”,删除lockd进程;
输入“sudo apt-get install lsb-core lib32stdc++6回车”,安装“lsb-core lib32stdc++6”;
见下图:
输入“cd /usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin回车”
35、关机重启Ubuntu系统
36、在虚拟机界面右击鼠标,弹出下面的对话框:
37、点击“打开终端(E)”,得到下面的界面
38、打开终端,输入“arm-none-linux-gnueabihf-gcc -v回车”,如果交叉编译器安装正确的话就会显示版本号。
39、输入“cd /home/zgq/linux/回车”,进入/home/zgq路径下的linux目录;
输入“ls回车”,列出文件和文件夹;
可以看到: gcc版本:9.2-2019.12;
40、输入“vi main.c回车”,创建一个main.c文件,并打开。
41、按下“大写字母A”,插入光标。
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("Hello world\r\n");
}
42、按下“ESC建”,输入“:wq回车”,保存退出。
43、输入“ls回车”,列出文件和文件夹;
44、输入“arm-none-linux-gnueabihf-gcc main.c -o main回车”,编译,并生成可执行文件main.exe
输入“ls回车”,列出文件和文件夹;
见下图:
45、输入“file main回车”,发现main是32位文件。
46、输入“./main回车”,发现不能执行main。