zoukankan      html  css  js  c++  java
  • 编译LFS

    成功编译并运行linux from scratch 7.7 system,有必要作下总结。
    本次用的编译LFS的环境是:
    虚拟机是virtalbox
    宿主系统为CentOS 7.0 x86_64 (core版本)
    LFS版本为 7.7 system
    我用两块硬盘,一块安装宿主系统,另一个作为LFS的编译安装盘,编译成功后,脱离宿主系统那块硬盘,单独引导启动LFS linux的那块硬盘,登录进入LFS linux。
    虚拟机上安装好centos后,在虚拟机上加一块硬盘,大小20G左右,分区如下

                               磁盘驱动器:/dev/sdb
                         大小:21474836480 字节,21.4 GB
            磁头数:255  每磁道扇区数:63        柱面数:2610
    
        名称        标志       分区类型   文件系统         [标签]         大小 (MB)
     ------------------------------------------------------------------------------
        sdb1        启动        主分区    ext2                               131.61
        sdb2                    主分区    swap                              1019.94
        sdb5                    逻辑分区  ext4                             20323.30*

    sdb1分100多M以后打算给/boot的单独分区,sdb2给swap分区,sdb5 作为系统根目录。
    然后根据LFS手册说明创建好文件系统,把sdb5挂载到/mnt/lfs作为工作目录。按手册下载源文件,创建目录,配置环境等,就开始编译工具链,编译工具链有几个地方需要注意
    1,手册中所有的软件编译命令都默认在解压出来的软件目录中进行,也就是说必须先用tar解压,再cd进行软件目录。
    2,编译完成后用"cd .. "退出软件目录,回到source目录
    3,除非特别说明,删除解压出来的目录和所有编译过程中生成的 <package>-build 目录。也就是说编译成功后把解压出来的源文件目录删除,如果有build目录,也要删除,以免影响下下编译。

    编译工具链的系统基础软件都很顺利。

    由于打算给/boot单独的分区,在编译内核之前,在chroot环境中,先挂载sdb1分区到/boot目录

    mount -t ext2 /dev/sdb1 /boot


    这样编译出来的kernel就会安装到sdb1分区上。

    接下配置grub启动

    cat > /boot/grub/grub.cfg << "EOF"
    # Begin /boot/grub/grub.cfg
    set default=0
    set timeout=5
    
    insmod ext2
    set root=(hd1,5)
    
    menuentry "GNU/Linux, Linux 3.19-lfs-7.7-systemd" {
    linux /vmlinuz-3.19-lfs-7.7-systemd root=/dev/sdb5 ro
    }
    EOF

    完成后,一切看上去已经很OK,于是把宿主系统的那块硬盘卸掉,单独启动LFS linux,也成功出现了系统菜单选择,选择后回车后傻眼了,提示找不到分区。

    通过grub命令发现,硬盘是hd0,而不是hd1,原因很简单,原来宿主系统还是,宿主系统那块盘是hd0,LFS 系统的那块盘是hd1,而现在已经把宿主系统的硬盘卸掉了,只剩下一块LFS linux,理所当然是hd0。

    于是在grub命令下,于是手动设置root和加载linux内核
    set root=(hd0,5)
    linux /vmlinuz-3.19-lfs-7.7-systemd root=/dev/sda5 ro
    boot

    成功加载内核并启动后,报他个错误,也是没发现sdb硬盘,这让我想到了/etc/fstab 的配置,里面还是sdb,没办在,登录不进系统。

    于是关闭虚拟机,重新把宿主系统的那块硬盘加入,引导进入宿主系统,用chroot进入lfs环境,修改/etc/fstab文件如下:

    # Begin /etc/fstab
    /dev/sda5 / ext4 defaults 1 1
    /dev/sda1 /boot ext2 defaults 0 0
    /dev/sda2 swap swap pri=1 0 0
    # End /etc/fstab

    在chroot环境中,把lfa linux的/boot分区挂进来,修改/boot/grub/grub.cfg文件,修改后内容如下

    set default=0
    set timeout=5
    
    insmod ext2
    set root=(hd0,5)
    
    menuentry "GNU/Linux, Linux 3.19-lfs-7.7-systemd" {
    linux (hd0,1)/vmlinuz-3.19-lfs-7.7-systemd root=/dev/sda5 ro
    }

    保存退出。

    关闭系统,把宿主系统卸掉,只引导LFS linux盘,成功进入系统,用root登录,各功能都正常。

    文章出处

  • 相关阅读:
    现在转战c++的领域,纯幼儿园
    LeetCode:Majority Element
    LeetCode:Partition List
    LeetCode:Balanced Binary Tree(判断是否为二叉平衡树)
    LeetCode:Binary Tree Zigzag Level Order Traversal
    LeetCode:Binary Tree Level Order Traversal II (按层遍历)
    LeetCode:Binary Tree Postorder Traversal(二叉树的后序遍历)
    LeetCode:BInary Tree Inorder Traversal(二叉树的中序遍历)
    LeetCode:Binary Tree Preorder Traversal(二叉树的先序遍历)
    LeetCode:Implement Queue using Stacks
  • 原文地址:https://www.cnblogs.com/lycokcc/p/5168641.html
Copyright © 2011-2022 走看看