linux系统编程
文章平均质量分 66
linux系统编程课程笔记,课程地址B站BV1dt411f7TZ
weixin_42104223
这个作者很懒,什么都没留下…
展开
-
Linux启动过程学习记录
bios阶段bios自检后读取硬盘的第一个扇区,bios认识磁盘,但是不认识文件系统,只能通过读扇区的方法寻找bootloader的位置,bios通过度一个扇区来载入grub的第一个阶段(只有446字节),grub第一个阶段的作用是寻找grub第二个阶段。grub二放置的位置在MBR和GPT磁盘是不同的,见GPT磁盘和MBRgrub位置的不同grub阶段grub阶段的作用是加载核心,由于grub的第一个阶段只有446字节,存不了许多东西,所以grub1需要来寻找grub第二个阶段取载入核心。g原创 2021-10-18 18:55:39 · 78 阅读 · 0 评论 -
BIOS+MBR,BIOS+GPT,EFI+GPT/MBR几种安装方式的区别及grub位置的记录
关于grub位置的一点记录有四个条件(BIOS vs. EFI和MBR vs. GPT),但是其中两个具有相同的需求(其中一个极为罕见):在具有传统MBR分区表的基于BIOS的传统计算机上,GRUB的可执行代码像婴儿抛出的意大利面条一样散布开来。其中一些位于MBR的启动代码部分,某些位于正式未分配的MBR后扇区中,另一些位于Linux /boot分区中。这真是一团糟,它之所以起作用,是因为开发人员实际上已经有数十年的时间来创建聪明的骇客并(几乎)解决所有问题。在具有新的GUID分区表(GPT)转载 2021-09-20 21:13:47 · 654 阅读 · 0 评论 -
为什么GPT分区需要biosboot分区,而MBR不需要
BIOS boot partition是一个分区,gnu grub1用它来引导基于legacy bios但启动设备上却包含GPT格式分区表时的操作系统。这种结构有时候被称为BIOS/GPT启动2。下图非原文内容,是本人提供,用于直观地感受bios boot分区。Bios boot分区是必要的,因为GPT使用紧跟在MBR后面的扇区来保存实际的分区表,但在传统的MBR分区架构中,这些扇区并没有特殊的作用,这样的结果是没有足够的可用空闲空间来存储stage2这段boot loader。MBR中也存储.转载 2021-10-17 22:15:01 · 1732 阅读 · 0 评论 -
chapter6:linux属性函数--stat, access, chmod, link, unlinkm,truncate
linux属性函数1 stat函数1.1 函数描述1.2 函数的使用1.3 穿透(追踪)函数2 access函数2.1 函数描述2.2 示例代码3 chmod函数3.1 函数描述3.2 示例代码4 chown函数4.1 函数描述4.2 示例代码5 链接函数5.1 硬链接5.2 软连接5.3 readlink函数5.4 unlink函数5.5 示例代码6 truncate函数与rename函数6.1 truncate函数6.2 rename函数1 stat函数1.1 函数描述获取文件的属性int s原创 2020-10-12 16:29:09 · 119 阅读 · 0 评论 -
chapter5:linux文件函数-open、read、write、close、lseek、dup、fcntl
linux文件函数虚拟地址空间、PCB与文件描述符虚拟地址空间PCB文件描述符C库函数和系统函数的关系查看man文档的方法open函数read函数write函数close函数open,read,write,close的使用lseek函数dup函数,文件描述符的复制linux文件函数所作的操作就是读写文件,在linux中描述文件的方式是文件描述符,文件描述符存在与pcb中,而pcb又在虚拟地址空间的内核区中,所以要先了解虚拟地址空间,pcb的概念。虚拟地址空间、PCB与文件描述符虚拟地址空间l原创 2020-10-05 17:05:48 · 180 阅读 · 0 评论 -
chapter4:makefile编写
makefile的编写什么时makefile一个规则什么时makefilemakefile就是用来简化编译流程的,makefile中写的就是编译二进制文件时的gcc语句makefile可以:简化编译时所需要下达的指令。如果在编译完成后,改变了某个c文件中的功能,makefile编译只会编译被改动这个文件。可以根据时间戳来更新二进制文件。一个规则makefile是由一条条规则组成的,规则由三要素组成:目标依赖命令...原创 2020-10-04 23:39:15 · 80 阅读 · 0 评论 -
chapter3:gdb调试简单命令记录
gdb调试简单命令记录启动gdb查看代码设置断点设置当前文件断点设置指定文件断点设置条件断点删除断点查看设置的断点单步调试设置内部变量查看变量的值与类型设置变量的值退出gdb调试启动gdb前提条件,编译二进制文件时需要加入调试信息 -g选项gdb 文件名start – 开始单步调试run – 直接运行到断点n – next 单步运行,跳过函数s – step 单步运行, 进入函数体内部c – continue 直接停在断点位置查看代码l – listl + 行号l f原创 2020-10-04 20:22:58 · 71 阅读 · 0 评论 -
chapter2:linux动态库与静态库
动态库与静态库动态库与静态库的区别静态库动态库静态库的命名与制作方法命名规则制作步骤动态库的命名与制作方法动态库与静态库的区别什么是库库就是编译好的二进制代码加上头文件来供人们使用什么时候会用到库代码需要给别人使用,但是不希望释出源码,给出库文件及头文件模块化编程对于一些几乎不会动的代码,编译成库文件,再次编译文件时只用链接即可,节省时间静态库什么是静态库静态库之所以叫做静态,是因为在编译目标程序的时候静态库的代码直接被拷贝到目标程序代码中,这段代码在目标程序中是不会变动的原创 2020-09-30 09:24:42 · 50 阅读 · 0 评论 -
chapter1:gcc编译过程介绍
gcc简介gcc编译过程gcc参数gcc编译过程gcc将将源文件编译生成二进制文件经过以下四个过程:预处理: 生成.i文件gcc -E hello.c -o hello.i此步对c的各种预处理命令进行处理, 包括头文件的包含,宏定义的扩展,条件编译的选择等编译器:生成.s文件gcc -S hello.i -o hello.s将预处理得到的源代码编译成汇编代码汇编器:生成.o文件gcc -c hello.s -o hello.o将汇编代码翻译成机器代码链接器:生成目标文原创 2020-09-29 15:29:04 · 73 阅读 · 0 评论