菜鸟日志4.16 初识Linux C

嵌入式的组成

硬件子系统,软件子系统

嵌入式:为了降低传统单片机软硬件耦合度过高,创建了操作系统,从而实现跨平台移植,增强系统的兼容性,实现多进程管理

 

嵌入式    软件--------上层----应用软件开发;如:Linux C, Android, ios

         操作系统----底层----系统软件开发;如:BSP, 驱动, 内核

         硬件

 

&.为什么要移植操作系统?

1.提高软件的可移植性

2.使软件开发人员不需要了解硬件知识,提高开发效率

3.操作系统提供了许多开源的软件,工具,库

4.实现多任务

5.提供大量网络协议栈

缺陷:操作系统使对硬件的要求提高,成本相应更高

(移植性:软件移植需要改动的多少)

 

&.其他部分嵌入式系统

Vxworks:用于航空航天及军事,不开源,硬实时

WinCE:用于金融方面,不开源

µC/OS-Ⅱ:用于单片机,代码很少,约五千行

Linux无实时性

(实时性:在规定时间内完成动作;  硬实时:软件硬件共同决定)

 

&.Linux与Unix关系

1.Unix与Linux遵循POSIX标准(可移植操作系统)

2.GNU计划:GNU is not Unix

3.GPL协议:源码共享及修改优化共享

(Unix之父丹尼斯里奇同样是C语言之父,Unix基于C语言)

 

 

&.Linux预备

Linux特性及原则:一切皆文件

分类:

普通文件:“-”开头

目录文件:“d”开头

设备文件:“c”或“b”开头(c,字符设备; b,块设备;eth0,网络设备)

链接文件:“l”开头

共享文件:“s”开头

管道文件:“p”开头

 

&.根目录下的子目录

bin:储存普通用户命令

sbin:储存超级用户命令

dev:系统设备文件

etc:系统配置文件

lib:库文件

net:网络文件

usr:第三方软件安装默认目录

usr/include:系统头文件目录

proc:虚拟文件系统,存在内存上

sys:挂载点

 

 

 

IDE:集成开发环境

 

开发工具:

gcc:编译器;静态库和动态库

gdb:调试器;找段错误

make:工程管理;Makefile的格式与编写

shell:脚本语言

 

 

交叉编译器,在一个平台编译可在另一个平台运行

 

gcc编译过程

 

1.预处理(-E)生成 .i文件

  (1)头文件展开

  (2)宏替换

  (3)条件编译

 

2.编译(-S)生成 .s文件

   把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件

 

3.汇编(-c)生成 .o文件,即目标文件

  将汇编代码转变成机器可以执行的命令

 

4.链接(-O)

  链接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件

  编译器优化 -O1,-O2,-O3

 

 

&.-O1,-O2,-O3,-Os都优化了什么?

-O1:编译会尝试减少代码体积和代码运行时间。但是并不执行会花费大量时间的优化操作

 

-O2:进一步优化.GCC执行几乎所有支持的操作但不包括空间和速度之间权衡的优化。-O2优化等级下,并不执行循环展开和函数“内联”优化操作。与-O1比较该优化-O2将会花费更多的编译时间当然也会生成性能更好的代码

-O3:更进一步优化。-O3打开-O2指定的所有优化操作并且打开:-finline-functions,-funswitch-loops,-fgcse-after-reload

-Os:针对程序空间大小优化(多用于嵌入式系统)。-Os使能-O2中除去会增加程序空间的所有优化参数。同时-Os还会执行更加优化程序空间的选项

宏函数和普通函数区别:

宏函数在预处理阶段完成,无法发现错误;普通函数在编译阶段能发现错误;

在频繁调用确认无误的函数是用宏函数可提高效率

 

              头文件

例:      声明变量,函数

#include<stdio.h>           头文件展开

#define MAX 100                      宏替换

{

ifndef MAX

    printf(“Hello/n”);            条件编译

else

    printf(“Hi/n”);

return 0;

}

 

&.<>和“”区别

<>只包含系统自带文件,先在系统头文件目录了搜索

“”包含自定义头文件,先在当前目录搜索

 

 

 

Linux部分常用命令:

 

命令行:

 

cd切换当前目录

1. cd /root/Docements # 切换到目录/root/Docements  

2. cd ./path          # 切换到当前目录下的path目录中,“.”表示当前目录    

3. cd ../path         # 切换到上层目录中的path目录中,“..”表示上一层目录  

ls查看文件与目录,list之意

1. -l :列出长数据串,包含文件的属性与权限数据等  

2. -a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)  

3. -d :仅列出目录本身,而不是列出目录的文件数据  

4. -h :将文件容量以较易读的方式(GBkB等)列出来  

5. -R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来  

grep分析一行的信息,若当中有我们所需要的信息,就将该行显示出来

    1.-a :将binary文件以text文件的方式查找数据  

     2. -c :计算找到查找字符串的次数  

     3. -i :忽略大小写的区别,即把大小写视为相同  

     4. -v :反向选择,即显示出没有查找字符串内容的那一行  

find查找

cp复制文件

1. -a :将文件的特性一起复制  

2. -p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份  

3. -i :若目标文件已经存在时,在覆盖时会先询问操作的进行  

4. -r :递归持续复制,用于目录的复制行为  

5. -u :目标文件与源文件有差异时才会复制  

mv移动文件、目录或更名

1. -f force强制的意思,如果目标文件已经存在,不会询问而直接覆盖  

2. -i :若目标文件已经存在,就会询问是否覆盖  

3. -u :若目标文件已经存在,且比目标文件新,才会更新  

1. mv file1 file2 file3 dir # 把文件file1file2file3移动到目录dir  

2. mv file1 file2 # 把文件file1重命名为file2  

rm:删除文件或目录

1. -f :就是force的意思,忽略不存在的文件,不会出现警告消息  

2. -i :互动模式,在删除前会询问用户是否操作  

3. -r :递归删除,最常用于目录删除

ps: 将某个时间点的进程运行情况选取下来并输出

1. -A :所有的进程均显示出来  

2. -a :不与terminal有关的所有进程  

3. -u :有效用户的相关进程  

4. -x :一般与a参数一起使用,可列出较完整的信息  

5. -l :较长,较详细地将PID的信息列出  

kill:中止

file判断接在file命令后的文件的基本数据,因为在Linux下文件的类型并不是以后缀为分的

tar对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压

1. -c :新建打包文件  

2. -t :查看打包文件的内容含有哪些文件名  

3. -x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中  

4. -j :通过bzip2的支持进行压缩/解压缩  

5. -z :通过gzip的支持进行压缩/解压缩  

6. -v :在压缩/解压缩过程中,将正在处理的文件名显示出来  

7. -f filename filename为要处理的文件  

8. -C dir :指定压缩/解压缩的目录dir  

1. 压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称  

2. 查询:tar -jtv -f filename.tar.bz2  

3. 解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录  

cat查看文本文件的内容,后接要查看的文件名

chgrp改变文件所属用户组

chown改变文件的权限

     权限三个一组,用二进制三位之和

     r可读  w可写 x可执行

vim文本编辑,它接一个或多个文件名作为参数,如果文件存在就打开,如果文件不存在就以该文件名创建一个文件

gcc把C语言的源程序文件,编译成可执行程序

time用于测算一个命令(即程序)的执行时间

底行:

/----查找

s/hello/hi/g-----选择hi替换hello

sp demo.c 分屏

3,14 w demo.c----另存(复制)至demo.c

15 r demo.c----在15行读入(粘帖)demo.c内容

w----保存

q----退出

工作行:

 yy-----复制

 p-----粘帖

 u----撤销

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值