《手把手教你构建自己的 Linux 系统》学习笔记(5)
交叉编译是什么?
交叉编译就是在一个系统上,编译生成另外一个系统运行的程序文件。
「硬件体系结构」和「操作系统」的关系是什么?
硬件体系结构也可以称为架构,主要是通过 CPU 的指令集来进行区分的,操作系统通常是以内核来进行区分的。
一种体系结构可以运行多种操作系统,一种操作系统也可能运行在不同的体系结构上,所以称呼一种系统平台时将二者结合起来,如 X86_Linux,表示在 x86 平台上运行 Linux 系统,MIPS Linux 表示在 MIPS 上运行 Linux 系统。
「本地编译」和「交叉编译」的关系是什么?
本地编译可以看成是交叉编译的子集,当源平台和目标平台一致或者完全兼容的情况下,使用本地编译。
当源平台和目标平台不兼容或者不完全兼容的情况,就使用交叉编译。
字节序是什么?
字节序,又称为端序,尾序,英文为 Endianness,字节序一般是指多个字节组成的数据中最高和最低有效位哪个存放在内存的地址低位。
大尾序是什么?小尾序是什么?
如果数据最开始的字节(最高有效位)存放在内存的低位,则称为大端序(big-endian)或大尾序,相反则为小端序(little-endian)或小尾序。
大端小端无好坏之分。
./configure 的 3 个命令参数的解释是什么?
./configure --build=编译平台 --host=运行平台 --target=目标平台 [各种编译参数]
Mach 内核的机制是怎样的?
Mach 微内核仅仅包括了建立一个内核必须的几个部分,如线程管理,地址空间和进程间通信等。而设备驱动、文件系统以及内存管理等内核相关的功能都包含在 Hurd 中,他们以大量的服务程序的形式出现,并且与 Mach 内核进行交互,再由 Mach 进行服务间的交互,从而形成操作系统内核的基本功能。
微内核这样设计的好处是,可以在操作系统运行的过程中增加活着减少内核的部分功能,如驱动模块的加载和卸载。
单微内核的缺点也比较明显:微内核这种类似进行间的通信方式导致了许多内核模块之间的相互通信开销较大,大量的通信开销对整个操作系统性能降低会有比较大的影响。
GNU/Hurd 系统的基本组成形式
事实上,GNU 操作系统原本预期的核心是 Hurd 而不是 Linux,但是基于 Mach 设计的 Hurd 异常复杂,发展进度相对缓慢,因此之后的 Linux 系统不断的发展壮大,而 Hurd 却越来越不为人所知了。

Hurd 系统的主要组成目录是什么?
/boot
用于存放启动内核以及启动内核相关的文件。
/bin
普通命令存放目录
/sbin
管理系统相关的命令存放目录
/include
编译软件包时默认的头文件存放目录
/hurd
Hurd 系统专用命令存放目录,用来存放 Hurd 内核服务层命令
/dev
设备文件存放目录
/home
用户目录,除了 root 用户外其他可登录用户的主目录。
/etc
各类配置文件存放目录
/lib
各种函数库文件存放目录
/libexec
存放了一些非用户直接使用的脚本或者命令,这些脚本和命令一般由命令调用或者在函数库中进行调用,如与启动过程相关的一些特殊脚本或者命令。
/servers
存放内核服务层处理相关的文件。
Hurd 系统与 Linux 系统在目录文件上有什么不同?
Hurd 系统不使用 /usr 目录,而 Linux 系统中,/usr 目录中会存放大量的命令、函数库以及共享的各种文件,这些文件在 Hurd 系统中直接存放在根目录下的对应目录中。
如存放编译用的头文件在 Linux 系统中存放在 /usr/include 目录中,而在 Hurd 系统中则存放在 /include 目录中。
怎么知道编译的软件有没有问题?
许多软件包在编译后可以通过 make check 或者 make test 命令来测试编译结果是否正确,如果测试通过则说明编译的程序没有问题。
《手把手教你构建自己的 Linux 系统》学习笔记(5)的更多相关文章
- 《手把手教你构建自己的 Linux 系统》学习笔记(10)
目录 /etc/fstab 文件的作用是什么? Linux 内核的图形化启动是怎么回事? Linux 系统中的文件名是否以大小写来进行区别? 「GRUB 中无法找到硬盘」怎么解决? 「GRUB 及配置 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(9)
目录 autoreconf 命令的作用是什么? aclocal automake -a autoconf 一条命令搞完三面三步 既然有其他的「编译控制软件」为何还是使用 make 来进行编译控制? M ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(8)
目录 Binutils 软件包有什么用? make -k 的作用是什么? man-pages 里有几种文档?分别表示什么意思? 如何查询指定目录的 man-pages ? 如何使用 make 命令的同 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(6)
目录 /dev 目录是干什么的? /proc 和 /sys 目录是干什么的? udev 这个软件是干什么用的? 目录映射是临时性的,还是永久性的? 命令行里大括号 "{}" 的作用 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(2)
Linux 系统定制原理 虚拟根目录 我们的目标是为了完成目标系统(也就是我们要做的系统),他是一个可以独立运行的系统,不依赖雨主系统和临时系统,根据 Linux 系统的特点它需要存放在根目录下面,但 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(1)
第二章.基础准备--Linux 系统定制原理 Linux 系统的组成及架构 共享库和静态库 在 Linux 系统中,函数库包含两种形式:共享库和静态库. 共享库 共享库在程序运行时,为其提供所需要的函 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(7)
目录 tee 命令的缺陷是什么?如何解决这个缺陷? /etc/ld.so.conf 文件的作用是什么? 动态链接和静态链接有什么不同? 动态编译 静态编译 共享库为什么会有版本?共享库的版本升级原理是 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(4)
汇编链接器(Binutils) 这是一个软件包,这个软件包其实是一个工具集,里面含有了大量的用于汇编程序活着读取二进制文件相关的程序. CC 它是一条命令的别名,这条命令的作用是使用 GCC 的 C ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(3)
需要注意的是,制作操作系统权限全程都要用 root pushd 和 popd 为了方便目录管理,所以出现了这种两个命令,他们的原理就是利用堆栈来实现目录管理. 这两个命令,pushd 负责将指定的目录 ...
随机推荐
- 将Ubuntu下网卡名称enss改为eth0
将Ubuntu下网卡名称enss改为eth0 sudo nano /etc/default/grub 找到GRUB_CMDLINE_LINUX=""改为GRUB_CMDLINE ...
- ios--->tableView的估算高度的作用
ios中tableView的估算高度的作用 在ios7之后,tableView有了估算高度的这个概念及相关属性和方法:它的作用和使用场景是什么? 在tableview加载完数据渲染之后,考虑到滚动条的 ...
- C语言创建文件夹
问题需求:在程序中需要使用文件夹时,一般可以先在程序目录或某一路径下创建一个文件夹,然后使用该文件夹. 这种方法比较麻烦,需提前创建文件夹. 使用C语言创建文件夹的代码可以如下: #include & ...
- Pileup 格式详细说明
转自: https://blog.csdn.net/herokoking/article/details/79276939 Pileup 格式最初是由Sanger Institute的Tony Cox ...
- <背包>solution-CF118D_Caesar's Legions
Caesar's Legions Gaius Julius Caesar, a famous general, loved to line up his soldiers. Overall the a ...
- LeetCode 380. Insert Delete GetRandom O(1) 常数时间插入、删除和获取随机元素(C++/Java)
题目: Design a data structure that supports all following operations in averageO(1) time. insert(val): ...
- 通过指针突破C++类的访问权限
看如下代码 #include "pch.h" #include <iostream> using namespace std; class A { public: A( ...
- python 存储数据
如何进行数据存储,很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据. 使用模块json进行数据存储. 1.1.使用json.dump()和json.load() #-*- e ...
- 机器学习总结-sklearn参数解释
本文转自:lytforgood 机器学习总结-sklearn参数解释 实验数据集选取: 1分类数据选取 load_iris 鸢尾花数据集 from sklearn.datasets import lo ...
- Thread.yield( )方法
Java线程中的Thread.yield( )方法,译为线程让步.顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行,注意是让自己或者其他线程运行 ...