嵌入式Linux C语言开发工具及基础命令
一、ubuntu环境搭建
请自行准备VMware workstation15安装包 及 ubuntu18.04.iso镜像文件。可参考链接:VMware Workstation15 安装配置ubuntu-18.04.4
注:1、可以在配置语言时将选项选为中文,后续方便开发。2、可在主机上分区出一块200G的空间作为ubuntu专用,可新建一个盘符避免混淆。3、请记得安装VMware tool工具哦 4、请配置网络,确保虚拟机网络和主机在一个网段。
二、linux下文件和目录相关命令
2.1熟悉Linux的文件系统结构
首先我们要明白,linux下一切皆文件,所以我们的linux系统称为文件系统,后续涉及到驱动的操作,实际上都是对设备文件的操作。linux文件系统就是一个树形的分层组织结构,如下图所示(由于Linux是开源的软件,各Linux发行机构都可以按照自己的需求对文件系统进行裁剪,所以众多的Linux发行版本的目录结构也不尽相同):
/bin 存储一些二进制可执行命令文件, ,/usr/bin也存放了一些基于用户的命令文件。
/sbin 存储了很多系统命令, ,/usr/sbin也存储了许多系统命令。
/root 超级用户 root的根目录文件。
/home 普通用户默认目录,在该目录下,每个用户都有一个以本用户名命名的文件夹。
/boot 存放 Ubuntu系统内核和系统启动文件。
/mnt 通常包括系统引导后被挂载的文件系统的挂载点。
/dev 存放设备文件,我们后面学习 Linux驱动主要是跟这个文件夹打交道的。
/etc 保存系统管理所需的配置文件和目录。
/lib 保存系统程序运行所需的库文件, ,/usr/lib下存放了一些用于普通用户的库文件。
/lost+found 一般为空,当系统非正常关机以后,此文件夹会保存一些零散文件。
/var 存储一些不断变化的文件,比如日志文件
/usr 包括与系统用户直接有关的文件和目录,比如应用程序和所需的库文件。
/media 存放 Ubuntu系统自动挂载的设备文件。
/proc 虚拟目录,不实际存储在磁盘上,通常用来保存系统信息和进程信息。
/tmp 存储系统和用户的临时文件,该文件夹对所有的用户都提供读写权限。
/opt 可选文件和程序的存放目录。
/sys 系统设备和文件层次结构,并向用户程序提供详细的内核 数据信息。
… …
现在不用死记硬背,后续用的多了,大家自然知道每个目录下放的是什么东西。
2.2文件和目录相关命令
2.2.1 显示当前路径 pwd
右键打开终端,输入pwd,无需加参数,效果如图所示:
2.2.2 目录信息查看命令 ls
文件浏览是最基本的操作了, 终端下文件浏览命令为 ls,命令格式如下:
ls [选项 ] [路径]
选项出可填写如下内容,代表不同作用:
-a 显示所有的文件以及子目录,包括以“ “.”开头的隐藏文件。
-l 显示文件的详细信息,比如文件的形态、权限、所有者、大小等信息。
-t 将文件按照创建时间排序列出。
-A 和 -a一样,但是不列出“ “.””(当前目录 )和“ “…””(父目录 )。
-R 递归列出所有文件,包括子目录中的文件。
Shell命令里面的参数是可以组合在一起用的,比如组合“ “-al”就是显示所有文件的详细信
息,包括以“ “.”开头的隐藏文件 ls命令使用如下图所示:
2.2.3 文件权限修改命令 chmod
如上图所示,ls -l出来的内容是详细信息,最前面一串字符代表文件类型+文件权限,drwxrwxr-x代表文件类型为文件夹,创建者权限为可读可写可执行,同组用户权限为可读可写可执行,其他用户权限为可读不可写可执行。具体刨析如图所示:
如图所示,文件类型为文件夹,创建者可读可写可执行,对应111,八进制中对应7。同组用户可执行,对应001,八进制为1.其他用户可读可写,对应110,八进制对应6。我们可以通过实例演示一下,右键打开终端,创建文件夹,命令如下所示:
mkdir linux_study
cd linux_study
mkdir level1_linuxC_basic
cd level1_linuxC_basic
mkdir day1
cd day1
mkdir testchmod
可通过chmod将创建的文件夹权限修改为716,如下图操作所示,测试结果如图:
2.2.4 目录切换命令 cd
要想在 Shell中切换到其它的目录,使用的命令是 cd,命令格式如下:
cd [某一路径]
cd / //进入到根目录“ “/”下 Linux系统的根目录为“ “/””, cd /usr //进入到目录“ “/usr”里面
cd .. //进入到上一级目录。
cd ~ //切换到当前用户主目录
2.2.5 系统信息查看命令 uname
在很多时候我们需要确认我们使用的系统版本信息,使用uname可列出。
uname -r //列出系统内核版本号
uname -s //列出系统内核名称
uname -o //列出系统信息
uname -a //列出所有信息
演示如下图:
2.2.6 文件内容查看命令 cat nl
有时候我们需要在终端下直接查看文件内容,而非使用编辑器打开查看。首先在主机下随便编辑一个txt文档拖到ubuntu下,可使用如下命令及对应组合进行文件内容查看:
cat //查看文件内容
cat -b //带行号查看文件内容
nl //带行号查看文件内容
2.2.7 文件复制命令 cp
cp a/. b/ -r 将a目录下所有文件拷贝到b目录下(-r 代表对文件夹进行递归)
cp a/. b/ -i(-i代表与用户的交互提示)
如下图演示中,先在a下创建了递归文件夹,然后cp生成b,使用tree命令查看b目录的树形结构,发现复制完成。tree 可使用 sudo apt-get install tree
安装,前提是网络配置正常,如果无网络可在网上查找解决方法,也可私信我共同学习及解决。
2.2.8 文件创建指令 touch
touch a.c //在当前目录下创建a.c文件
touch a/a1.c //在目录a下创建a1.c文件
2.2.9 文件搬移命令 mv
用于移动文件,即剪切粘贴,有时也可用于重命名文件。
mv a.c b/ //将文件a.c搬移到b目录下
mv b/a.c b/b.c //将文件a.c重命名为b.c
2.2.10 文件夹创建指令 mkdir
mkdir mydisk
2.2.10 文件及文件夹删除指令 rm
rm test.txt //删除某一文件
rm a/ -rf //删除某一文件夹
2.2.11 文件压缩和解压缩 tar
2.2.12 文件的查询和搜索 find grep
三、VI/VIM编辑器
Ubuntu自带了 VI编辑器,但是 VI编辑器对于习惯了 Windows下进行开发的人来说不方便,比如竟然不能使用键盘上的上下左右键调整光标位置。因此我推荐大家使用 VIM编辑器, VIM编辑器是 VI编辑器升级版本, VI/VIM编辑器都是一种基于指令式的编辑器,不需要鼠标,也没有菜单,仅仅使用键盘来完成所有的编辑工作。因此我们确保在有网络的情况下,输入sudo apt-get install vim
在线安装。
3.1 熟悉vi的三种模式及模式切换命令
vim a.c //进入a.c
我们试着在图中输入数字,发现根本没法输入,这不是因为你的键盘坏了。因为 VIM默认是以只读模式打开的文档,因此我们要切换到输入模式,切换到输入模式的命令如下:
3.2 熟练的使用vi的拷贝和粘贴、删除命令
3.3 熟练的使用vi的保存和退出命令
除此之外,还有更多命令行命令,比如set number设置显示行号
,set nonumber取消显示行号
,1G代表移动光标到第一行 G代表移动光标到最后一行
,/string 查找字符串 找到以后可以按n查找下一个 N查找上一个
,%s/str1/str2/g (:范围s/str1/str2g)把全文的str1替换为str2 加g代表全部替换,不加默认只换第一个
,range y 块复制 例::1,10 y 复制1到10行的内容
四、计算机基础知识
4.1 冯诺依曼模型
4.2 程序发展及程序设计步骤
程序发展:机器语言->汇编语言->高级语言
程序设计步骤:编辑(VI)->编译(gcc)、链接(ld)->执行、调试
五、数据的表示
5.1 数值数据表示
数据包括十进制、二进制、十六进制、八进制。
5.2 非数值数据表示
ASCII码可以将非数值数据转换为数值数据 ,在linux终端
下可使用man ASCII,要学会使用man手册,后续开发常用。
六、程序的编译和调试
6.1 gcc编译器使用
先安装gcc编译器,在终端输入此命令:sudo apt-get install gcc
,使用方法如下:
gcc [选项] [文件名字]
选项可填如下内容:
-c 只编译不链接为可执行文件,编译器将输入的 .c文件编译为 .o的目标文件。
-o::<输出文件名 > 用来指定编译结束以后的输出文件名,如果 不 使用这个选项的话 GCC默认编译出来的可执行文件名字为 a.out。
-g 添加调试信息,如果要使用调试工具 (如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。
-O 对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。
-O2 比 -O更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。
gcc -o -Wall a.c a //代表把a.c编译为a可执行程序,并且在编译过程中输入警告信息。
gcc编译的具体过程:预处理、编译、汇编、链接
(1)预处理: gcc -E a.c -o a.i //生成预编译文件
(2)编译: gcc -S a.i -o a.s //生成汇编代码
(3)汇编: gcc -c a.s -o a.o //生成目标文件
(4)链接: gcc -o a a.o //链接,生成可执行文件
七、总结与思考
1、linux文件系统与windows文件系统有什么区别?
答:linux下一切皆文件,linux文件系统从“/”根目录开始,再分层,没有所谓的CD盘的区别,在linux系统U盘是自动挂载在根目录下的etc下一个子文件夹上。
2、gcc作为一个交叉编译器,如何生成ARM架构可以执行的程序?
答:换一个交叉编译器,将文件编译成ARM架构可执行的文件。如arm-linux-gnueabihf-gcc
3、在VI编辑器中如果我们想将一个文件中的第5到第30行中的字符“abc”替换成“ABC”我们使用什么命令?
答:5,30s/abc/ABC/g
4、在ASCII码表中字符‘3’对应的是数值?
答:0x33
ps:希望和大家共同进步,有问题可以留言,共同探讨,共同学习。