嵌入式Linux C概述
嵌入式系统是现在最热门的计算机应用领域之一,嵌入式Linux是应用最广泛的嵌入式操作系统之一,嵌入式C语言在其中起着至关重要的作用。由于Linux操作系统,是一个广泛使用的操作系统,并且可以被移植、裁剪进很多的嵌入式系统中,如ARM处理器的应用系统中就大量采用Linux等。
Linux C适用领域有多种,如
民用领域:各种消费电子,智能家电,路由器,手机(Android系统底层也是Linux),智能穿戴设备,医疗设备,汽车电子(中控屏)
工业控制领域:机器人,数控机床、铣床数字控制、电火花加工控制、轨道交通系统、数字运动控制系统
商业领域:各种服务器系统,支持商业运算
嵌入式Linux C开发环境
调试工具:GDB是GNU开源组织发布的一个强大的UNIX下的调试工具
程序生成工具:GCC
GCC能完成从C、C++、Objective-C等源文件向运行在特定CPU硬件上的目标代码的转换。对于嵌入式开发系统使用交叉编译的GCC,生成目标机可以运行的程序。
工程管理工具:make和Makefile
make能够将大量的编译命令一次完成,用于大型软件的编译,他是和Makefile相配合使用的。
MakefileMakefile是一个普通文件,内部可以定义自己的项目整体编译规则。make就是在当前目录下寻找到Makefile文件,并对Makefile中记录的规则逐行的进行解释,执行完成项目的自动化构建。
自动生成Makefile的工具有autoconf、automake。autoconf用于编译前根据机器状态作相应的配置
开发工具包:
在Linux下提供了优秀的GNU C函数库,Motif函数库,GTK函数库,QT函数库等工具包
开发流程:使用编辑工具编写C语言源文件,然后编译生成机器代码为主的二进制可执行程序。
编译流程:C语言经过编译-汇编-链接,最终生成可执行程序格式。可执行程序包含两部分内容:程序头和程序主体。
Linux基本命令![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5242f5cabc12e898282e04e5a819944f.png)
cd / ;切换到功能目录,例:
[ben@localhost /]$ cd
[ben@localhost ~]$
ll / ;列出根目录下面的所有项目,每个项目显示一行,例:
[ben@localhost app]$ ll
total 16
-rw-rw-r–. 1 ben ben 8 Jan 12 00:22 e
-rw-rw-r–. 1 ben ben 4 Jan 12 00:21 q
-rw-rw-r–. 1 ben ben 707 Jan 12 00:31 txt
-rw-rw-r–. 1 ben ben 4 Jan 12 00:21 w
在一个linux 系统中,不管有多少个分区,都只有一个根目录,就是 /
可列出/下面的一级目录:
[ben@localhost ~]$ cd /
[ben@localhost /]$ ll
total 90
dr-xr-xr-x. 2 root root 4096 Jan 11 19:17 bin
dr-xr-xr-x. 5 root root 1024 Sep 8 2018 boot
drwxr-xr-x. 18 root root 3780 Jan 12 17:21 dev
drwxr-xr-x. 95 root root 4096 Jan 12 17:21 etc
drwxr-xr-x. 6 root root 4096 Jan 11 23:54 home
dr-xr-xr-x. 10 root root 4096 Sep 8 2018 lib
dr-xr-xr-x. 9 root root 12288 Jan 11 19:17 lib64
drwx------. 2 root root 16384 Sep 8 2018 lost+found
drwxr-xr-x. 2 root root 4096 Sep 23 2011 media
drwxr-xr-x. 3 root root 4096 Sep 8 2018 mnt
drwxr-xr-x. 3 root root 4096 Sep 8 2018 opt
dr-xr-xr-x. 145 root root 0 Jan 12 17:20 proc
dr-xr-x—. 4 root root 4096 Jan 12 04:16 root
dr-xr-xr-x. 2 root root 12288 Jan 11 19:17 sbin
drwxr-xr-x. 7 root root 0 Jan 12 17:20 selinux
drwxr-xr-x. 2 root root 4096 Sep 23 2011 srv
drwxr-xr-x. 13 root root 0 Jan 12 17:20 sys
drwxrwxrwt. 20 root root 4096 Jan 12 18:33 tmp
drwxr-xr-x. 13 root root 4096 Sep 8 2018 usr
drwxr-xr-x. 21 root root 4096 Sep 8 2018 var
各一级目录的作用如下图所示
根用户(也叫root用户,管理员)
系统中只有一个这样的用户,安装好系统就存在,主要用于用户管理,权限管理,权限无限大,慎用!
如果以普通用户身份登录,如用户名为ben,则出现以下命令提示符
[ben@localhost ~]$
如果以管理员身份登录,则用户名为root,则出现以下命令提示符
[root@localhost ben]#
su root ;由普通用户切换为管理员登录状态
su ben ;切到到普通用户ben登录状态,例用户切换成管理员:(Password:密码为pass)
[ben@localhost ~]$ su root
Password:
[root@localhost ben]#
以下命令可以显示当前的完整路径(命令:pwd)
[root@localhost ~]# pwd
/root
[root@localhost ~]#
此时的 ~ 代码用户主目录,分为两种情况:
root用户的主目录是 /root
普通用户,如ben用户,则其主目录是 /home/ben
普通用户,如mary用户,则其主目录是 /home/mary
假如管理员登录后,执行以下命令,可以切换到/home/ben目录
[root@localhost ~]# cd /home/ben
[root@localhost ben]#
[root@localhost ben]$ 含义为:
[当前登录的用户名@主机名 当前目录的最后一级]#表示管理员,$表示普通用户
如上面的命令提示符,表示当前用户为管理员,当前目录为ben
命令格式
命令 [-选项] [参数1] [参数2] …
目录和文件管理
ls:
英文原意:list
命令所在路径:/bin/ls
执行权限:所有用户
功能描述:显示目录下的项目
常用选项:
-a 显示所有文件,包括隐藏文件,注意:隐藏文件不是不想让人看到,而是表示该文件是系统中重要的文件,不是必须,不要动它
-i 显示文件的ID,long:长格式
-l 显示详细信息,具体信息见下图
-d 查看目录属性
-h 人性化显示
例:
[root@localhost /]# ls -a
. .autofsck boot etc lib lost+found mnt proc sbin srv tmp var
… bin dev home lib64 media opt root selinux sys usr
ll:
是 ls -l 的别名
第一部分 -rw-r–r--
第1位表示文件或目录,-表示文件,l表示链接文,d表示目录
第2~4三位表示文件所有者对该文件的权限
第5~7三位表示文件所属用户组对该文件的权限
第8~10位表示系统中所有其它对该文件的权限
关于权限:分三种
读 ->r
写 ->w
执行 ->x
关于用户:分三种
文件所有者 ->u
文件所有属用户组 ->g
其它人 ->不属于上面两类的所有人
例:
[root@localhost /]# ll
total 90
dr-xr-xr-x. 2 root root 4096 Jan 11 19:17 bin
dr-xr-xr-x. 5 root root 1024 Sep 8 2018 boot
drwxr-xr-x. 18 root root 3780 Jan 12 17:21 dev
drwxr-xr-x. 95 root root 4096 Jan 12 17:21 etc
drwxr-xr-x. 6 root root 4096 Jan 11 23:54 home
dr-xr-xr-x. 10 root root 4096 Sep 8 2018 lib
dr-xr-xr-x. 9 root root 12288 Jan 11 19:17 lib64
drwx------. 2 root root 16384 Sep 8 2018 lost+found
drwxr-xr-x. 2 root root 4096 Sep 23 2011 media
drwxr-xr-x. 3 root root 4096 Sep 8 2018 mnt
drwxr-xr-x. 3 root root 4096 Sep 8 2018 opt
dr-xr-xr-x. 148 root root 0 Jan 12 17:20 proc
dr-xr-x—. 4 root root 4096 Jan 12 18:57 root
dr-xr-xr-x. 2 root root 12288 Jan 11 19:17 sbin
drwxr-xr-x. 7 root root 0 Jan 12 17:20 selinux
drwxr-xr-x. 2 root root 4096 Sep 23 2011 srv
drwxr-xr-x. 13 root root 0 Jan 12 17:20 sys
drwxrwxrwt. 20 root root 4096 Jan 12 18:33 tmp
drwxr-xr-x. 13 root root 4096 Sep 8 2018 usr
drwxr-xr-x. 21 root root 4096 Sep 8 2018 var
mkdir:
英文原意:make directories
命令所在路径:/bin/mkdir
执行权限:所有用户
功能描述:创建目录
常用选项:
-p 递归创建
例:
[root@localhost home]# mkdir end
[root@localhost home]# ls
cal.txt end
[root@localhost home]# cd end
[root@localhost end]#
rmdir:
英文原意:remove empty directory
命令所在路径:/bin/rmdir
执行权限:所有用户
功能描述:删除空目录
例:
[root@localhost home]# rmdir end
[root@localhost home]# ls
cal.txt
cd:(**cd …**意为返回上一目录)
英文原意:change directories
命令所在路径:/bin/cd
执行权限:所有用户
功能描述:切换当前目录
例:
[root@localhost ~]# cd …
[root@localhost /]#
pwd:
英文原意:print working directory
命令所在路径:/bin/pwd
执行权限:所有用户
功能描述:打印当前目录完整路径
例:
[root@localhost home]# pwd
/root/home
cat:
英文原意:concatenate
命令所在路径:/bin/cat
执行权限:所有用户
功能描述:显示一个或多个文件的内容
例:
cat file1 file2 > file3 ;把file1和file2的内容写到fil3中
cat file1 file2 >> file3 ;把file1和file2的内容追加到fil3中
echo:
命令所在路径:/bin/echo
执行权限:所有用户
功能描述:向标准输出视频(显示器)输出一个字符串
例:
[root@localhost home]# echo “hello world” > me
[root@localhost home]# ls
cal.txt me
[root@localhost home]# cat me
hello world
touch:
命令所在路径:/bin/touch
执行权限:所有用户
功能描述:创建一个空文件
例:
[root@localhost home]# touch lol.txt
[root@localhost home]# ls
cal.txt f3 lol.txt me
cal:
英文原意:calendar
命令所在路径:/bin/cal
执行权限:所有用户
功能描述:输出一个日历
常用选项:
-3:上一个月,当前月,下一个月
-y:当前一年
例:
[root@localhost home]# cal -3
December 2019 January 2020 February 2020
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 1 2 3 4 1
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29
date:
命令所在路径:/bin/date
执行权限:所有用户
功能描述:打印日期,或修改日期
常用选项:
-d:显示指定字符串所描述的时间,而非当前时间
-s:设置时间
例:
date -d “2 days ago” +%Y%m%d //显示2天前的时间,20190210
date -s “2007-08-03 14:15:00”
history:
命令所在路径:/bin/rm
执行权限:所有用户
功能描述:显示输入过的历史命令
例:
[ben@localhost home]$ history
1 cd ~
2 ll
3 ifconfig
4 curl http://d.fanfo.cn/d/a.vimrc > .vimrc
5 mkdir c.d
6 cd c.d/
7 vi a.c
8 gcc a.c
9 ll
10 ./a.out
>和>>
覆盖重定向和追加重定向
执行权限:所有用户
功能描述:把输出到标准输出设备的内容,重定向到其它地方(通常是文件)
例:
history > ~/cmd_hostory.txt //把历史命令保存到用户主目录下的cmd_hostory.txt文件中,如果不存在就创建,如果存在就覆盖
cp:
英文原意:copy
命令所在路径:/bin/cp
执行权限:所有用户
功能描述:复制文件或目录
常用选项:
-p:保留原始文件的属性,包括属主、权限、时间戳等
-r:递归复制文件
-i:如果目标文件存在则询问是否覆盖
-d:如果复制对象为链接文件,则保留该链接文件的属性
例:
cp -rp /home/ben/d /tmp
mv:
英文原意:move
命令所在路径:/bin/mv
执行权限:所有用户
功能描述:文件移动或重命名
常用选项:
-f:无论目标是否存在都进行移动
-i:如果目标文件存在则询问是否覆盖
注意事项:
1.在同一个目录下的操作,为重命名
2.不同目录下的操作,为移动
例:
1.重命名
[ben@localhost app]$ ls
c.d e q soft txt w
[ben@localhost app]$ mv c.d c
[ben@localhost app]$ ls
c e q soft txt w
[ben@localhost app]$
2.移动
[ben@localhost app]$ ls
c e q soft txt w
[ben@localhost app]$ mv c soft
[ben@localhost app]$ cd soft
[ben@localhost soft]$ ls
c dir note
rm:
英文原意:remove
命令所在路径:/bin/rm
执行权限:所有用户
功能描述:删除文件或文件夹
常用选项:
-r:递归删除文件
-f:强制删除文件且不显示任何信息
-i:删除目标文件前则询问是否删除
例:
[ben@localhost soft]$ rm -rf *
[ben@localhost soft]$ ll
total 0
ln:
英文原意:link
命令所在路径:/bin/ln
执行权限:所有用户
功能描述:给某个文件或文件夹做链接(硬链接不允许连接到目录)
常用选项:
-s:创建某文件的软链接
格式:
ln 目标 链接文件的名称
例:
[ben@localhost soft]$ echo “135” > an
[ben@localhost soft]$ ln (-s则为软连接)an app
[ben@localhost soft]$ ls
an app
[ben@localhost soft]$ cat app
135
more:
命令所在路径:/bin/more
执行权限:所有用户
功能描述:分页查看文件,特别是长文件
常用选项:
-s:把文件中的多个空行压缩成一个空格显示
+n:每个按空格显示n行,按回车总是显示下一行
wc:
命令所在路径:/bin/wc
执行权限:所有用户
功能描述:统计文件的行数,单词数,字数
常用选项:
-l:显示行数
-w:显示单词数
-c:显示字符数
例:
[ben@localhost app]$ wc am
209 603 3043 am
find:
命令所在路径:/bin/find
执行权限:所有用户
功能描述:查找文件或文件夹
常用选项:
-name:按文件名搜索
-type:按文件类型搜索,b块设备、c字符设备、d目录、f普通文件
例:
[ben@localhost ~]$ find -name app
./app
./app/soft/app
|:
管道操作
执行权限:所有用户
功能描述:前面命令的输出,做为后一个命令的输入
例:
[ben@localhost app]$ mkdir a | mkdir b
[ben@localhost app]$ ll
total 8
drwxrwxr-x. 2 ben ben 4096 Jan 13 00:41 a
drwxrwxr-x. 2 ben ben 4096 Jan 13 00:41 b
tar:
命令所在路径:/bin/tar
执行权限:所有用户
功能描述:压缩或解压缩文件或文件夹
常用选项:
-c 创建 tar –cf dir1.tar dir1
-t 查看 tar -tf dir1.tar
-x 释放 tar –xf dir1.tar
-f 后面跟归档文件名字
-z 压缩/解压缩
例:
tar -zcf test.tar.gz /home/ben/test ;(把/home/ben/test目录压缩为当前目录下的test.tar.gz文件)
tar -zxf test.tar.gz ;(把当前目录下的test.tar.gz解压到当前目录)