5

探索Linux操作系统

 3 years ago
source link: https://houye.xyz/2015-01/discoverlinux/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
探索Linux操作系统

探索Linux操作系统

《深度探索Linux操作系统——系统构建和原理解析》的一个快速笔记

我的环境和作者略有不同,我的宿主系统为Slackware 14.1 64位,虚拟机上的系统是ubuntu 12.1 32位。

一些准备工作

  • 避免污染宿主系统而新建了普通用户,建立了工作目录。
  • 为了简化编译过程的一些命令,在用户的`.bashrc`定义了环境变量。
  • 使用`su - username` 切换shell环境和用户都切换到username。

构建工具链

  • 构建交叉Binutils,包括as,ld,ar,ranlib等。
  • 构建freestanding的交叉编译器
  • 安装内核头文件
  • 构建目标系统的C库
  • 构建完整的交叉编译器

第一步中:提示缺少flex和bison,安装之,无恙。
第二步中:编译gcc-4.7.2总是出错,搜索之,安装gcc-4.7.3,ok了。
第三步中:经验不足,后来才发现书上的印刷错误。因祸得福,反复编译安装内核头文件让我越来越有耐心。
第四步中:参数的配置十分巧妙,编译编译,得掌握参数的配置。
第五步中:我编译的依旧是gcc-4.7.3。

  • 执行`make allnoconfig`,除了必选的,其余全部不选。
  • 接下来便是配置内核的工作,使内核渐渐能支持你的电脑。
  • 安装C库和Shell。

第一步中:交叉编译需要更改makefile。
第二步中: `lspci /proc/cpuinfo | grep "model name"` 查看处理器型号。
第三步中:

  • `ldd`命令查看程序依赖的动态库。
  • `scp`命令利用ssh在机器间传输文件。

initramfs

  • 配置内核支持initramfs
  • 构建基本的initramfs
  • 将硬盘驱动编译为模块
  • 自动加载硬盘控制器驱动
  • 挂载切换到根目录系统

第一步中: initramfs是一个临时文件系统,它的存在是为了挂载真正的根文件系统。

第二步中:

  • initramfs需要用cpio以newc格式压缩
  • shell有两种模式——交互和非交互
  • `find .`输出当前文件夹(包括子文件)中所有文件

第三步中:

  • devtampfs
  • `modinfo -F depends`查看模块的依赖
  • `insmod`加载模块
  • `modprobe`自动加载/卸载模块依赖的其他模块

第四步中:

  • 我编译的是udev-174
  • 编译lspci时,在我的电脑上需要指定交叉编译器`crosscompile=i686-none-linux-gnu-gcc`,否则编译出来的是lspci会是64位,无法在最终的32位系统上运行。

第五步中:作者提供了一个switchroot程序,来切换到真正的根文件系统

构建根文件系统

  • SUID和EUID的知识,SUID是Set UserID,EUID是Effective UserID。SUID可以使本来没有相应权限的用户运行该程序时,可以访问他没有权限访问的资源。
  • `ip addr show`显示本机ip
  • `ip link show`查看网络端口
  • `ip addr add 192.168.1.103/24 dev eth0`设置网卡ip,注意这个表示方法`192.168.1.103/24`,子网掩码为24,即`255.255.255.0`,ip范围从`192.168.1.103`到`192.168.1.255`
  • 编译openssl时,用`setarch i386 ./config -m32`指定程序运行环境,在我的64位系统上编译32位程序。

书其后的内容是安装X窗口系统,构建桌面环境并且探讨了Linux图形原理。粗粗看了下,对我应该没什么用处,等到有需要再仔细看一遍吧。

草草的看了这书大部分的内容,说下这书让我觉得不错的几个地方

  • 讲解程序的编译过程
  • 内核映像的组成和构建过程
  • 配置内核的过程很有趣,哈哈

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK