内核编译流程和自动化安装

内核编译

        在特定的情况我们机器上面有些硬件特性需要利用起来,但是我们现成的这个内核没有开启这个功能,那就需要重新编译,把这个功能模块加进来,或者打到vmlinux中的核心文件里面。比如ntfs功能,默认系统没有启用此功能,但是系统是带这个功能的,编译的时候时候可以打开该功能,有些功能打开了,但是用不上,我们也可以在编译的时候关闭,实现完全定制的内核功能。

        针对硬件驱动的配置有模板,由于驱动数目太多(wc -l /boot/config*****,查看有4000+),且有些功能我们不了解,因此我们可以通过配置模板文件来对模块进行修改。

模板文件:/boot/config-2.6.32-642.el6.x86_64   通过该文件我们可以看到哪些功能模块打开,哪些没打开

                        # CONFIG_CRC32_SELFTEST is not set    表示没开启此模块功能       

                           CONFIG_LIBCRC32C=m  表示打到/lib/modules里面

                           CONFIG_ZLIB_INFLATE=y   表示打到核心里面

    内核编译:

            (1) 配置内核选项
                 支持“更新”模式进行配置: make help
                            (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
                            (b) make menuconfig:基于curses的文本窗口界面
                            (c) make gconfig:基于GTK (GNOME)环境窗口界面
                            (d) make xconfig:基于QT(KDE)环境的窗口界面

                支持“全新配置”模式进行配置
                            (a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置
                            (b) make allyesconfig: 所有选项均回答为“yes“
                            (c) make allnoconfig: 所有选项均回答为"no 
            (2) 编译
                    全编译:make [-j #]
                    编译内核的一部分功能:
                            (a) 只编译某子目录中的相关代码:
                                        # cd /usr/src/linux
                                        # make dir/
                            (b) 只编译一个特定的模块:
                                        # cd /usr/src/linux
                                        # make dir/file.ko
                        例如:只为e1000编译驱动:
                                #make drivers/net/ethernet/intel/e1000/e1000.ko (.ko文件目录中不存在需要自己写),编译完后将文件拷贝到对应的目录

            需要事先清理操作:
                        # make clean:清理大多数编译生成的文件,但会保留config文件等
                        # make mrproper: 清理所有编译生成的文件、 config及某些备份文件
                        # make distclean: mrproper、 patches以及编辑器备份文件

    编译应用举例:

            1、下载内核文件、准备模板,安装“开发工具“包组

            2、tar xvf liux-3.18.tar.xz -C /usr/src

             ln -s linux-3.18.41/ linux

            3、cp /boot/config-2.6.32-642.el6.x86_64 /usr/src/linux/.config

                            注意模板必须命名为“.config”,因为编译的是要读该文件,否则无法识别。

            4、cd /usr/src/linux  

                 make menuconfig 通过图形界面配置驱动模块(该命令依赖ncures包,首次执行需要yum安装 )            

                            [*]表示打到vmlinux的核心文件里面去了

                            [M]表示打到的/lib/modules中的.ko文件(驱动模块)

                            []表示不启用该功能

            5、全编译make -j #(cpu的数量,lscpu可以查看)

            6、cd linux 

                         make modules_install 安装模块,将模块拷贝到/lib/modules

            7、make install 生成核心文件vmlinuz initramfs 及grub.conf

            8、reboot

系统自动化安装

同时部署多台linux机器,需要依赖自动化安装
        MBR: /光盘/isolinux/boot.cat  二进制文件
        stage2: isolinux/isolinux.bin
                    配置文件: isolinux/isolinux.cfg

            label linux           ### 此处如果加rescue 就变成了 rescue模式
              menu label ^Install or upgrade an existing system
              menu default
              kernel vmlinuz   ### 加载内核
              append initrd=initrd.img  ###向内核传递参数         
            label vesa
              menu label Install system with ^basic video driver
              kernel vmlinuz
              append initrd=initrd.img nomodeset        ###nomodeset 内核参数
            label rescue
              menu label ^Rescue installed system
              kernel vmlinuz
              append initrd=initrd.img rescue        ###rescue 内核参数
            label local
              menu label Boot from ^local drive
              localboot 0xffff
            label memtest86
              menu label ^Memory test
              kernel memtest
              append -

                    每个对应的菜单选项:
                                加载内核: isolinuz/vmlinuz
                                向内核传递参数: append initrd=initrd.img …
        装载根文件系统,并启动anaconda
                    默认启动GUI接口
                    若是显式指定使用TUI接口: 向内核传递text参数即可
                    (1)按tab键,在后面增加text,启用字符界面安装
                    (2)按ESC键: boot: linux text  启动字符界面安装
                                          boot:linux   等同于 选择  Install or upgrade an existing system
                                          boot:rescue    等同于选择    Rescue installed system

1.png

        Anaconda安装系统分成三个阶段:
                安装前配置阶段
                            安装过程使用的语言
                            键盘类型
                            安装目标存储设备
                                        Basic Storage:本地磁盘
                                        特殊设备: iSCSI
                            设定主机名
                            配置网络接口
                            时区
                            管理员密码
                            设定分区方式及MBR的安装位置
                            创建一个普通用户
                            选定要安装的程序包
                 安装阶段
                            在目标磁盘创建分区,执行格式化操作等
                            将选定的程序包安装至目标位置
                            安装bootloader和initramfs
                 首次启动
                            iptables
                            selinux
                            core dump

         指明kickstart文件的位置: ks=
                DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
                Hard drive: ks=hd:device:/directory/KICKSTART_FILE
                HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
                FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
                HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
                NFS server:ks=nfs:host:/path/to/KICKSTART_FILE

        kickstart文件的格式:
                命令段:指明各种安装前配置,如键盘类型等;
                程序包段:指明要安装的程序包组或程序包,不安装的程序包等;
                        %packages
                        @group_name
                        package        ###指明要包组中要安装的包
                        -package        ###指明包组中不安装的包

                        %end

        脚本段:
                    %pre: 安装前脚本
                                运行环境:运行于安装介质上的微型Linux环境
                    %post: 安装后脚本
                                运行环境:安装完成的系统

       创建建kickstart文件的方式:
                (1) 直接手动编辑;
                            依据某模板修改
                (2) 可使用创建工具: system-config-kickstart
                            依据某模板修改并生成新配置;
        检查ks文件的语法错误: ksvalidator
                    # ksvalidator /PATH/TO/KICKSTART_FILE

手动指定安装源的安装方法:

                1、进入光盘启动界面,按ESC 进入"boot"界面输入:linux methmod,进入手动引导安装界面 ,选择安装方法。

1.png

                2、选择动态获取IP还是静态配置IP

2.png

                3、选择URL的安装路径

4.png

                4、进入交互式安装

5.png

            注意:也可以采取在boot命令行处输入多个选项:boot:linux askmethod ip=1.1.1.1 vnc vnc passwd="passwd"  ks=hd:sda:/root/ks.cfg

自动化安装方法:

                1、cp -r /光盘/isolinux/  /testdir/myks/  将光盘中的isolinux目录拷贝到myks目录下

                2、编辑vim /testdir/isolinux/isolinux.cfg 配置光盘启动的界面的选项,并指明ks模板文件的路径ks=ftp://192.168.1.103/pub/ks.cfg

abel kickstart
  menu label ^kickstart Install a system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=   ###指明ks路径 
label linux
  menu label ^Install or upgrade an existing system
  kernel vmlinuz
  append initrd=initrd.img 
label vesa
label vesa
  menu label Install system with ^basic video driver
  kernel vmlinuz
  append initrd=initrd.img nomodeset
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
  menu label Boot from ^local drive
  localboot 0xffff
label memtest86
  menu label ^Memory test
  kernel memtest
  append -

         3、 cd /testdir

                mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V "CentOS 6.8panlinux" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myks/

                创建光盘引导文件,保存到/root/boot.iso,注意该操作必须在myks的父目录下面进行。

         4、生成模板:system-config-kickstart ,并保存到/var/ftp/pub/目录下,注意如果模板在生成后如发现有需要变更的,直接更改生成的文件即可,不用重新用命令生成模板文件。

                      1474030568878553.png1474030627188981.png

1474032125853700.png                      1474032162445028.png

1474032196558951.png                      1474070183974227.png

1474070221380517.png                      1474070243500848.png

1474070274304094.png                      1474070294963505.png

         5、光盘启动即可

    

原创文章,作者:Naruto,如若转载,请注明出处:http://www.178linux.com/46227

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-23 11:11

    总结的很详细,也很实用,如果能有一个完整的示例来展示会更有说服力哦。