前言
对于嵌入式linux这方面,只在课设用开发板做过一个小项目,从环境搭建、交叉编译到板子烧程序、引导已经是记忆模糊,也是跟教程一步一步进行,缺少点自我思考产生的认识。此外,当时项目最初是想做一个调用百度数字识别API的车牌识别系统,大部分时间都花在交叉编译配置上,最后做了一半,识别接口搞好了摄像头驱动没搞明白,项目最后换成了一个用GPS模块显示经纬度的QT应用。
经历那个项目之后,感觉自己对这个嵌入式方面挺感兴趣,虽然我的这个专业没有计算机软,也没电
子IC的硬,但好在什么都有接触过,对于我可能软硬件都有需求的嵌入式是个更好的选择,所以继STM32,再开一条Linux C的学习路线,从基础开始学习。
一、环境搭建和基本命令
开发平台这里我选择的是桌面版本的ubuntu16.04,原因是图形化界面能友好一些;编辑器使用vim7.4;编译器使用gcc。
Linux的基本命令暂时用到的就是cd、ls、rm、mkdir、rmdir、cp,其他常用linux命令参考文章https://blog.youkuaiyun.com/Dabie_haze/article/details/118969328
这边着重说一下man命令,man所代表的的是英文单词manual,也就是帮助手册的意思,Linux中的man手册就是提供给用户在有不明白的命令或者函数的时候,去查询它的功能、使用方法、头文件以及所需参数的帮助手册。man手册分8页,内容如下:


比如, 要查看C某个函数的使用方法,终端输入man 3 printf即可查看相关说明。

二、Vim和GCC使用
一个c源文件生成可执行文件要经历预处理、编译、汇编、链接、可执行文件的过程。
1、预处理
vim创建一个test.c文件后保存,使用gcc -E test.c > test.i命令生成预处理后的.i文件,这一步是处理#include和#define等预处理指令。
2、编译
使用gcc -S test.i命令生成编译后的.s文件。编译就是把预处理完的文件,进行语法分析、词法分析、语义分析及优化后生成相应的汇编代码文件,这个过程是整个程序构建的核心过程,也是最复杂的部分。
3、汇编
使用gcc -c test.s命令生成汇编后的.o文件。其中,-c 表示只编译不链接。将汇编代码文件转变成机器可以执行的指令文件,即目标文件。
4、链接
使用gcc test.o -o test命令生成可执行文件,链接就是将各个目标文件进行合并符号表,符号解析,重定位,最后生成目标文件。
以上操作也都可以通过一句gcc test.c -o test_1来直接生成可执行文件test_1;同时,make test也可以实现相同的功能
参考
https://blog.youkuaiyun.com/Dabie_haze/article/details/118969328