linux 简单知识复习(一)

linux的发展:

linux第一个版本是1991年11月由苏兰赫尔辛基大学的学生linus Trovalds发布的第一个linux内核

1993年群黑客的帮助下发布了linux1.0的版本

1994年在一发布了第一个商业发行版Slackware

标准liunx与uclinux之间的区别:

标准linux使用的是虚拟内存技术来管理内存(mmu),而uclinux没有虚拟内存(nommu)。

linux的内核版本号:

由x.y.z三个字母组成,x代表主版本号,现在是3后的版本,y代表本类型的次版本号,奇数的代表实验版本,偶数为稳定的发行版。z代表该版本的修改次数

linux中堆栈的作用:

堆栈是c语言程序运行是必须的一个记录调用路径和参数空间,

作用包括:

函数调用框架的实现

传递参数

保存返回地址

提供局部变量空间

linux系统内核态与用户态

如果不区分用户直接修改操作系统数据,用户直接调用系统内部函数,用户直接操作外设,用户任意读写物理内存。区分程序执行状态,可以,禁止用户程序直接通硬件打交道,防止向寄存器写入不恰当的值,导致硬件无法正常运行

禁止用户程序访问任意的物理内存,防止破坏其他用户程序,对内核所在的地址写入数据,导致系统崩溃。现在cpu都有几中指令执行级别,intel x86有0-3级,linux只采用0,和3两级来区分,0代表内核态,3代表用户态。内核态可以访问任意的物理地址,用户态代码控制会受到限制,只能在运行的范围内活动!cs寄存器的最低两位表明了当前代码的特权等级,在x86中linux逻辑地址空间有个显著的标志,0xc0000000以上的空间只能在内核态下访问,而3G以下的空间在两种状态下都可以访问。

GCC的编译过程

1、预处理

2、编译成汇编代码

3、汇编成目标代码

4、连接

gcc通过-e参数预处理源码程序输出文件为.cpp文件

可以通过-x设定按照指定的方式处理,如cpp—output 来指定从cpp文件开始汇编来得到汇编码的输出,命令如下:gcc —x  cpp-output  -s -o xxx.s xxx.cpp

也可以通过之汇编源码来得到汇编码:gcc -s xxx.c

由汇编码编译成目标码:gcc -x assembler -c xxx.s也可以直接通过源码编译成目标码:gcc -c xxx.c还可以汇编器生成目标码:as -o xxx.o xxx,s

编译成可执行文件,gcc -o xxx xxx.o也可以直接由源码生成执行文件,gcc -o xxx   xxx.c

as 为汇编器。ld 为链接器,nm罗列出目标文件中的内容复制到另一种类型的目标文件中

objcopy 把以后总目标文件的内容复制到另一种类型的目标文件中

objdump显示一个或者更多个目标文件的信息,使用选项来控制其显示的信息

readlf:显示elf格式的可执行文件的信息

ld连接器可以来设定入口点的命令,ld -e 参数 来设定还可以通过entry(symbole)指定值,,text节的其实地址,入口点位0

linux源码的文件结构及代表意义:

 

linux编译后,生成的原始vmlinux的大概组成

1、i386/kernel/head_32.S

2、inti/main.c+init/version.o

3、Core_FILES+DRIVERS+NETWORKS+LIBS

从vmlinux到bzImage的变化过程:形成compressed下的vmlinux包含的内容compressed/head_32.S_+压缩后的顶层目录下的vmlinux,然后boot下的bzImage文件包含的内容:boot下的header.S等(setup.bin)+comressed下的vmlinux文件

bzImage中的b代表big,z代表压缩。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值