精简LFS-7.7

LFS到目的是从零开始编译一个Linux操作系统,主要思想是从一个宿主系统编译出一个独立的Linux操作系统,要达到这个目标,需要有如下几个步骤完成:

  1. 为新做系统分配磁盘分区并激活,创建一个环境变量几乎为空的编译用户lfs

  2. 在lfs用户下首先编译(第一次编译)出编译程序必须使用的工具:

Binutils

GCC

Linux API Headers

Glibc

此时的汇编器和链接程序还都依赖于宿主系统的环境

  1. 通过调整工具链来切断Binutils/GCC/Glibc对宿主系统环境的依赖,然后重新编译(第二次编译)Binutils、GCC、Glibc,然后利用这三个工具编译出一系列工具构造一个临时系统环境;

  2. 利用第3步编译(第三次编译)出的工具我们就可以编译出最新的系统

精简尝试:

尝试一:
Ncurses: 显示复杂文本,比如make menuconfig时的界面显示
CoreUtils: 包含系统基本命令,比如ls
Grub:启动管理工具,需要安装bison包和flex包
Kmod:加载内核模块的库和工具,需要pkg-config包
systemd:systemd 软件包包含用于控制启动、运行和关闭系统的程序,需要新的intltools,而intltools需要 XML::Parser包和 perl包,此外还需要gperf包
Kbd 软件包包含键表文件、控制台字体和键盘工具
libcap需要attr包

pkg-config 软件包包含一个在配置和 make 文件运行时把 include 路径和库路径
传递给编译工具的工具。

chroot失败,提示没有/bin/bash这个目录,猜测可能需要bash包

尝试二:
pkg-config no
Ncurses yes
coreutils yes
bash yes
bzip no
expat no
Perl no
Intltools no
XML::Parser no
Gperf no
bison yes
flex yes
kbd no
attr 可去掉
libcap 可去掉
systemd 失败
bc yes
autoconf no
automake no
grub yes

编译systemd失败,提示:configure: error: *** POSIX caps library not found,猜测是缺少libcap包的问题,结果不是,不影响最后结果

Perl包 安装出错,提示需要bzip包
XML::Parser包需要Perl包,expat包
编译内核失败,提示缺少bc命令,可能需要bc包
键盘上‘/’键不管用,正在查找原因,经查,可能是/etc/inputrc文件在粘贴时出现问题,所以仔细检查,确保文件内容正确即可。
bc包编译失败,提示:make[2]: yacc: Command not found,查阅资料得,需要安装bison来解决这个问题

总结:
在执行到6.10调整工具链后,只需安装以下7个包:

Ncurses:显示复杂文本,比如make menuconfig时的界面显示,必需
CoreUtils: 包含系统基本命令,比如ls,cd等,必需
bash:与命令行相关,若无,可能导致chroot出错,必需
bison:包含一个语法生成器,是bc包和grub包的依赖包,必需
flex:包括一个用于生成识别文本模式的程序的工具,是grub包的依赖包,必需
bc:包括一个任意精度数值处理的语言,在编译内核时被需要,必需
grub:包括与系统启动工具相关的工具,包括grub-install,update-grub等命令,必需

记住一切编译是在依赖/tools下的工具链,所以要使用第一次的chroot命令:
chroot $LFS /tools/bin/env -i \

HOME=/root TERM=$TERM PS1=’\u:\w$ ’ \

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \

/tools/bin/bash --login +h

make menuconfig时,要按照以下内容添加:(这是虚拟机中启动LFS必须的步骤)
1- scsi驱动没有编译到内核,检查如下的选项是否选择
→ Device Drivers→ SCSI device support
<> SCSI disk support
<
> SCSI generic support

→ Device Drivers→ SCSI device support→ SCSI low-level drivers
-- LSI MPT Fusion SAS 3.0 & SAS 2.0 Device Driver
(128) LSI MPT Fusion SAS 2.0 Max number of SG Entries (16 - 256)
(128) LSI MPT Fusion SAS 3.0 Max number of SG Entries (16 - 256)
<
> Legacy MPT2SAS config option

→ Device Drivers
[*] Fusion MPT device support —>

→ Device Drivers→ Fusion MPT device support
— Fusion MPT device support
<> Fusion MPT ScsiHost drivers for SPI
<
> Fusion MPT ScsiHost drivers for SAS
(128) Maximum number of scatter gather entries (16 - 128)
<> Fusion MPT misc device (ioctl) driver
[
] Fusion MPT logging facility

否则会导致启动时出现kernel panic -not syncing:VFS:Unable to mount root fs on unknown block(0,0)这样的错误。

grub.cfg文件内容:
cat > /boot/grub/grub.cfg << “EOF”

Begin /boot/grub/grub.cfg

set default=0

set timeout=5

insmod ext2

set root=(hd0,1)

menuentry “GNU/Linux, Linux 3.19-lfs-7.7-systemd” {

linux

/boot/vmlinuz-3.19-lfs-7.7-systemd root=/dev/sdb1 rootdelay=8

}

EOF

第七章只需执行7.8, 7.9的内容

第九章中的内容:
只需执行
9.1:
cat > /etc/os-release << “EOF”
NAME=“Linux From Scratch”
VERSION=“7.7-systemd”
ID=lfs
PRETTY_NAME=“Linux From Scratch 7.7-systemd”
EOF
以上内容用来显示grub中的系统选择信息,若没有该命令,grub的启动名单上只会显示unknown的系统

尝试三:
只安装 bash,coreutils,bison ,flex,grub这五个包,然后将在完整的LFS下的编译后的内核文件即/boot/vmlinuz-3.19-lfs-7.7-systemd和/boot/config-3.19拷贝到LFS的/boot目录下也能成功启动LFS
注意,在配置grub.cfg文件后要执行update-grub命令来更新grub。

grub.cfg文件的配置:

# Begin /boot/grub/grub.cfg
set default=0
set timeout=5
insmod ext2
set root=(hd0,1)
menuentry "GNU/Linux, Linux 3.19-lfs-7.7-systemd" {
linux
/boot/vmlinuz-3.19-lfs-7.7-systemd root=/dev/sdb1 rootdelay=8
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值