专利名称:一种Linux操作系统的定制方法及系统的制作方法
技术领域:
本发明涉及Linux操作系统,尤其涉及一种Linux操作系统的定制方法及系统。
背景技术:
在进行Linux操作系统定制时,一般采用的是LFS(Linux From kratch,一切从源 码开始定制Iinux系统)方式。它提供了一种系统定制的思想一切从源代码开始。最终 的系统由源码编译而成,管理员可以指定在哪里安装,什么时候安装,为什么安装以及怎样 安装每一个程序。管理员也可以控制系统的所有特征目录布局、脚本设置、安全设置以及 工具管理等等。LFS的好处就是管理员可以掌控整个系统。LFS需要一个宿主系统来挂载LFS分区,在分区上构建一个临时的编译系统,然后 才能编译LFS系统。但是,现有的LFS定制过程比较复杂,定制周期比较长,需要手动输入各源码的编 译命令,对初学者有一定的困难,而且维护起来比较困难,特别是在企业中需要频繁地定制 系统或者增加/删除功能模块时,对管理成本和维护成本要求都是很高。
发明内容
本发明所要解决的技术问题是需要提供一种Linux操作系统的定制技术,以降低 定制Linux操作系统的难度。为了解决上述技术问题,本发明首先提供了一种Linux操作系统的定制方法,包 括如下步骤将Linux操作系统划分为内核部分、初始系统部分、基础操作系统(OS)部分和附 加OS部分;在宿主系统中存储待构建的所述Linux操作系统的目标源码和目标脚本;将上述四个部分的编译过程写入到所述目标脚本中;在所述Linux操作系统的定制过程中,根据用户需求配置所述附加OS部分以及所 述内核部分的选项,配置动态配置文件,执行所述目标脚本;其中所述内核部分为配置选项确定后就不需要再重新编译的部分;所述初始系统部分为所述Linux操作系统启动时在内存中模拟的一个根文件系 统,与所述内核部分捆绑在一起;所述基础OS部分包含工具程序、所述实际根文件系统所包含的目录布局、已经确 定就不会修改的固定配置、库文件以及模块文件;所述附加OS部分包含后期可能需要修改的非稳配置及工具程序。优选地,所述基础OS部分包含基础子目录和新建子目录,其中所述基础子目录用 于保存初始rpm包,所述新建子目录用于保存新增加的rpm包。优选地,所述基础OS部分进一步包含自定义的可执行脚本和/或文件。
优选地,将所述四个部分的编译过程写入到所述脚本中的步骤,包括对于所述内核部分,保存一份Linux操作系统源码、一份内核选项配置文件以及 为Linux源码打补丁的目录;对于所述初始系统部分,保存一份原始初始系统文件,以及需要在初始系统启动 时加载的模块的源码;对于所述基础OS部分,保存所述Linux操作系统中常用工具的rpm包文件及其动 态配置文件、所述Linux操作系统的目录布局。优选地,该方法进一步包括往所述构建系统添加通用模块时,将所述通用模块添加到所述基础OS部分,并将 所述通用模块的源码的文件名添加到所述动态配置;往所述构建系统添加用户自定义模块时,将所述自定义模块添加到所述附加OS 部分,将所述自定义模块的源码编译过程作为自定义函数或自定义脚本添加到所述目标脚 本中,将所述自定义模块的源码的文件名添加到所述动态配置。为了解决上述技术问题,本发明还提供了一种Linux操作系统的定制系统,包括 划分模块、存储模块、写入模块以及配置模块,其中所述划分模块,用于将Linux操作系统划分为内核部分、初始系统部分、基础操作 系统(OS)部分和附加OS部分;所述存储模块,用于在宿主系统中存储待构建的所述Linux操作系统的目标源码 和目标脚本;所述写入模块,用于将上述四个部分的编译过程写入到所述目标脚本中;所述配置模块,用于在所述Linux操作系统的定制过程中,根据用户需求配置所 述附加OS部分以及所述内核部分的选项,配置动态配置文件,执行所述目标脚本;其中所述内核部分为配置选项确定后就不需要再重新编译的部分;所述初始系统部分为所述Linux操作系统启动时在内存中模拟的一个根文件系 统,与所述内核部分捆绑在一起;所述基础OS部分包含工具程序、所述实际根文件系统所包含的目录布局、已经确 定就不会修改的固定配置、库文件以及模块文件;所述附加OS部分包含后期可能需要修改的非稳配置及工具程序。优选地,所述划分模块划分的所述基础OS部分包含基础子目录和新建子目录,其 中所述基础子目录用于保存初始rpm包,所述新建子目录用于保存新增加的rpm包。优选地,所述划分模块划分的所述基础OS部分进一步包含自定义的可执行脚本 和/或文件。优选地,对于所述内核部分,所述写入模块用于保存一份Linux操作系统源码、一 份内核选项配置文件以及为Linux源码打补丁的目录;对于所述初始系统部分,所述写入 模块用于保存一份原始初始系统文件,以及需要在初始系统启动时加载的模块的源码;对 于所述基础OS部分,所述写入模块用于保存所述Linux操作系统中常用工具的rpm包文件 及其动态配置文件、所述Linux操作系统的目录布局。优选地,所述配置模块进一步用于往所述构建系统添加通用模块时,将所述通用模块添加到所述基础OS部分,并将所述通用模块的源码的文件名添加到所述动态配置;所 述配置模块进一步用于往所述构建系统添加用户自定义模块时,将所述自定义模块添加到 所述附加OS部分,将所述自定义模块的源码编译过程作为自定义函数或自定义脚本添加 到所述目标脚本中,将所述自定义模块的源码的文件名添加到所述动态配置。与现有技术相比,本发明提供了一种简单、高效、智能并且有利于维护的Linux操 作系统的定制技术,不需要管理者在发布定制的操作系统时花费大量时间和精力,特别适 用于针对Linux操作系统开发的需要频繁发布系统的应用。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变 得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利 要求书以及附图中所特别指出的结构来实现和获得。
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实 施例一起用于解释本发明,并不构成对本发明的限制。在附图中图1是本发明实施例的Linux操作系统的定制方法的流程示意图;图2是本实施例定制流程的参考示意图;图3是本发明实施例的Linux操作系统的定制系统的组成示意图。
具体实施例方式以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用 技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。实施例一、一种Linux操作系统的定制方法图1是本实施例的流程示意图,图2是本实施例定制流程的参考示意图。如图1 所示,本实施例主要包括如下步骤步骤S110,将Linux操作系统划分为四个组成部分,分别为内核(kernel)部分,初 始系统(initrd. gz)部分,基础操作系统(Operating System, OS)部分和附加OS部分。本步骤中,在将Linux操作系统划分为上述四个部分时,遵循如下规则(1)尽可能使得划分后得到的部分最少;(2)各部分内有很强的关联性;(3)尽量减少编译程序和工具时的步骤;(4)尽量有利于功能的添加和删除;(5)尽量能很好地完成一键式脚本(以下也称目标脚本)的编写;(6)尽量能选择性地构建某些功能。将上述的内核(kernel)作为一个单独的部分,是因为内核编译时会占用大量的 时间,而且一旦内核配置选项确定后,就不需要再重新编译。上述的初始系统(Initrd. gz)可以存储在一初始RAM磁盘中,做为在构建后的 Linux操作系统启动时,真正的根文件系统还不可用之前,在内存中模拟的一个根文件系 统,与内核捆绑在一起,作为内核引导过程的一部分进行加载。上述基础OS包含若干工具程序(如vim,gcc, openssh等),实际根文件系统所包含的目录布局(如/proc,/root, /home等),若干一经确定就不会修改的固定配置(如 php. ini, httpd. conf, passwd等一经确定就不会修改的配置),以及若干库(lib)文件,模 块(module)文件等等,还可以包含若干自定义的可执行脚本和/或文件等;其中,工具程序 一般采用rpm包的形式存在,区别于源码的最大好处是方便安装,不需要每个工具写一个 构建的脚本函数,可以通过动态配置读取需安装的rpm包文件。上述附加OS包含非稳配置(即并不稳定的,后续开发或者维护过程中需要经常修 改的配置)以及工具程序等,该非稳配置包括在开发过程和后期维护时可能需要经常修改 源码、更新文件,以及不确定是否在每个系统中都会需要的模块等。步骤S120,通过上述划分后,在宿主系统中建立一个目录来存放构建系统的目标 源码和一键式脚本(也即目标脚本,暂命名为0S_build目录)一键式脚本放在一个子目 录中,四个组成部分的源码、配置文件、rpm包文件等都存放在各自的目录中,这样方便查看 和维护各子部分。通过上述的系统划分后,将Linux操作系统划分为4个内部联系极其紧密,外部基 本无太大联系的部分。步骤S130,将前述四个组成部分的编译过程写入到一键式脚本中。本步骤具体的写入规则如下kernel部分,kernel子目录将保存一份Linux操作系统源码,一份内核选项配置 文件,以及保留为Linux源码打补丁(patch)的目录。相应的,一键式脚本中实现的功能就是拷贝内核源码到临时编译目录,将配置好 的内核配置文件拷贝到临时源码目录中,通过读取内核patch动态配置文件来给内核打 patch,然后编译内核和模块,编译完成后,将内核拷贝到生成目录中,将模块安装到指定的 临时目录,等待基础OS部分来集成到基础OS中。initrd. gz部分,initrd. gz子目录将保存一份原始initrd. gz文件,以及一些需 要在initrd. gz启动时加载的模块的源码,如一些驱动模块等。编译功能的实现流程为读取配置来获取需要编译的驱动模块,解压挂载 initrd. gz文件,将驱动模块和一些可执行脚本加入到initrd中,然后卸载压缩为initrd. gz文件,拷贝到生成目录中。基础OS部分基础OS部分将保存待构建的Linux操作系统中常用工具的rpm包文 件及其动态配置文件、待构建的Linux操作系统的目录布局以及相关工具的配置文件(一 些不采用默认的配置,而采用经过修改后的配置)等。rpm包存放包含两个子目录,一个是基础(base)子目录,一个是新建(new)子目 录,base子目录保存最初的初始rpm包,如果是新增加的rpm包,则保存在new子目录下 (也即new子目录保存新增加的rpm包),这样存放的好处就是若只安装新增加的rpm包, 则只需要安装new子目录下的rpm包,因为rpm包安装也会花费大量的时间。编译功能的实现流程为先通过配置来获取构建系统的目录布局,创建各目录,再 判断编译的rpm包类型,若是全编译,则读取base子目录下的动态配置,全安装该动态配 置中的rpm包;若不是则只安装new目录中的rpm包,base中的rpm包文件采用上一次安 装的结果来实现安装,然后删除rpm包中安装的一些man文件,以及一些不常用的工具等, 减少系统的大小;当然,若系统盘大小不是太拮据,也可以不执行这步,然后将相关工具的配置文件安装到相应的目录中,然后将kernel部分编译的系统模块拷贝到相应的lib和 modules目录下,建立链接等,最后将整个目录打包存放到生成目录中。附加OS部分通过以上三个部分的编译安装后,系统是可以正常运行起来的;而 这一部分存在的意义是实现构建的系统的差异性。上述三部分保证了一个基础的系统,而这一部分将添加自己所需要定制的功能和 个性化的模块;该目录下存放的是自己开发的程序,或者脚本,或者一些很特殊的工具,以 及这些工具的配置文件目录等。编译功能的实现流程为判断各模块源码包更改情况以及新的源码包添加,然后 获取到管理员所需要添加功能的配置,与之对比出一个所需要编译的模块的动态配置文 件,依据该动态配置文件调用相应的编译函数来实现各模块的编译,安装到相应的临时目 录中,然后拷贝相应的模块配置文件到临时目录,所有模块编译完后,将临时目录整过打包 并拷贝到生成目录中。以上内容就是一键式脚本的基础实现流程,以及四个组成部分各自的目录里所保 存的文件。步骤S140,完成一键式脚本后,在以后的定制操作系统过程中,根据用户需求配置 附加OS部分,配置内核选项,配置rpm动态配置文件,然后执行该一键式脚本来完成整个系 统定制过程,方便简洁高效。若是在构建系统搭建之后需要添加某个通用模块,比如需要添加一个通用rpm包 文件,则只需要将其添加到基础OS部分的I3ase子目录或者new子目录中,然后将rpm包 文件名称(对应于通用模块的文件名)添加到动态配置中即可;若是要在构建系统搭建之 后添加一个用户自己实现的某个自定义模块(如快照等),则添加该自定义模块的源码到 附加OS部分的子目录中,然后将该自定义模块的源码编译过程作为一个自定义函数或自 定义脚本添加到目标脚本中,再将该自定义模块的源码的文件名写入到动态配置中,下次 编译时即可单独编译该模块。因此,对于新增加模块,无论是已有的模块还是用户自定义模 块,均有着很好的扩展性。完成一键式脚本后,对各大部分进行编译。该编译可以全编译,也可以只编译某一 个部分中的某一个模块,具体如下kernel编译因为kernel编译需要耗费大量的时间,所以在确定了内核配置选项 以及编译了一次内核后,再发布系统就不需要再次编译内核了。在本发明的实例中,kernel编译的命令为#build kernel。initrd. gz编译因为initrd. gz是实际根文件系统挂载之前的一个临时初始根 文件系统,因此在确定initrd. gz中需要确定加载的模块和执行的操作后,initrd. gz也只需要编译一次。在本发明的实例中,initrd. gz的编译命令为#build initrd. gz。基础OS编译因为基础OS中包含了系统所需的大量工具、脚本、库以及模块等,所 以在编译时也会耗费大量的时间,但是这些也是很稳定,不会轻易修改的,故一般也只编译 一次即可,且主要的工具采用的是rpm包安装,而不采用源码(因为源码包安装太多的工具时会比较繁琐)。在本发明的实例中,基础OS编译命令为#build baseos < new | all >。附加OS编译在一个系统中,需要经常更改的程序和工具一般会比较少,因此在 此时会将每个程序的编译脚本写为一个函数,在进行编译时会先在脚本中判断出哪些程序 做出了改动,然后生成一个动态的编译模块文件,再由编译脚本根据这些模块来调用各自 的编译函数,这样就可以在只修改了一个程序的时候,只编译这一个程序,而不用去编译其 它的程序;也可以在所有程序都更改后,再去编译所有的程序。在本发明的实例中,附加OS编译命令为#build extra < all | 模块 11 模块 2 | 模块 3 | 模块......>。通过读取动态配置文件,调用命令接口来完成需要的模块编译。也可以一键式编译,即执行以下脚本#build all来实现全编译前述四个组成部分中需要编译的部分。在操作系统安装与启动的过程中,编译后的kernel和initrd. gz都以各自的形式 存在,而基础OS部分和附加OS部分则以压缩包的形式存在。通过Iivecd灌装的形式完成 系统的安装。在操作系统的启动流程中,进入grub后加载内核,当操作系统启动进入到 initrd. gz时,会加载各个需要在主系统启动前加载的驱动,以及挂载包含各模块的磁盘分 区,然后将各压缩包解压到内存中,再进入实际根文件系统,即完成一次操作系统的启动。实施例二、一种Linux操作系统的定制系统结合前述的实施例一,如图3所示的本实施例主要包括划分模块310、存储模块 320、写入模块330以及配置模块;340,其中划分模块310,用于将Linux操作系统划分为内核部分、初始系统部分、基础操作 系统(OS)部分和附加OS部分;存储模块320,用于在宿主系统中存储构建系统的目标源码和目标脚本;写入模块330,与划分模块310及存储模块320相连,用于将上述四个部分的编译 过程写入到目标脚本中;配置模块340,与写入模块330相连,用于在Linux操作系统的定制过程中,根据用 户需求配置附加OS部分以及内核部分的选项,配置动态配置文件,执行目标脚本;其中内核部分为配置选项确定后就不需要再重新编译的部分;初始系统部分为所述Linux操作系统启动时在内存中模拟的一个根文件系统,与 内核部分捆绑在一起;基础OS部分包含工具程序、实际根文件系统所包含的目录布局、已经确定就不会 修改的固定配置、库文件以及模块文件;附加OS部分包含后期可能需要修改的非稳配置以及工具程序等。上述划分模块310划分的基础OS部分包含基础子目录和新建子目录,其中基础子 目录用于保存初始rpm包,新建子目录用于保存新增加的rpm包。
上述划分模块310划分的基础OS部分进一步包含自定义的可执行脚本和/或文 件。对于内核部分,写入模块330用于保存一份Linux操作系统源码、一份内核选项配 置文件以及为Linux源码打补丁的目录;对于初始系统部分,写入模块330用于保存一份原始初始系统文件,以及需要在 初始系统启动时加载的模块的源码;对于基础OS部分,写入模块330用于保存所述Linux操作系统中常用工具的rpm 包文件及其动态配置文件、所述Linux操作系统的目录布局。上述配置模块340进一步用于往构建系统添加通用模块时,将通用模块添加到基 础OS部分,并将通用模块的源码的文件名添加到动态配置;上述配置模块340进一步用于往构建系统添加用户自定义模块时,将自定义模块 添加到附加OS部分,将自定义模块的源码编译过程作为自定义函数或自定义脚本添加到 目标脚本中,将自定义模块的源码的文件名添加到动态配置。由本发明的实施例可见,本发明的技术方案继承了 LFS对整个操作系统良好掌控 的优点,在一个稳定的宿主系统中利用一键式脚本,通过动态配置,选择性地编译某些模块 和功能,将不需要每次都重新编译的功能在系统定制时不进行编译,只引用上一次的编译 结果,这样在每一次定制操作系统的过程中,尽可能少地编译模块和程序,充分减少了操作 系统的发布周期。虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采 用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本 发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化, 但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
权利要求
1.一种Linux操作系统的定制方法,其特征在于,包括如下步骤将Linux操作系统划分为内核部分、初始系统部分、基础操作系统(OS)部分和附加OS 部分;在宿主系统中存储待构建的所述Linux操作系统的目标源码和目标脚本; 将上述四个部分的编译过程写入到所述目标脚本中;在所述Linux操作系统的定制过程中,根据用户需求配置所述附加OS部分以及所述内 核部分的选项,配置动态配置文件,执行所述目标脚本; 其中所述内核部分为配置选项确定后就不需要再重新编译的部分; 所述初始系统部分为所述Linux操作系统启动时在内存中模拟的一个根文件系统,与 所述内核部分捆绑在一起;所述基础OS部分包含工具程序、所述实际根文件系统所包含的目录布局、已经确定就 不会修改的固定配置、库文件以及模块文件;所述附加OS部分包含后期可能需要修改的非稳配置及工具程序。
2.根据权利要求1所述的方法,其特征在于所述基础OS部分包含基础子目录和新建子目录,其中所述基础子目录用于保存初始 rpm包,所述新建子目录用于保存新增加的rpm包。
3.根据权利要求1或2所述的方法,其特征在于所述基础OS部分进一步包含自定义的可执行脚本和/或文件。
4.根据权利要求1所述的方法,其特征在于,将所述四个部分的编译过程写入到所述 脚本中的步骤,包括对于所述内核部分,保存一份Linux操作系统源码、一份内核选项配置文件以及为 Linux源码打补丁的目录;对于所述初始系统部分,保存一份原始初始系统文件,以及需要在初始系统启动时加 载的模块的源码;对于所述基础OS部分,保存所述Linux操作系统中常用工具的rpm包文件及其动态配 置文件、所述Linux操作系统的目录布局。
5.根据权利要求1所述的方法,其特征在于,该方法进一步包括往所述构建系统添加通用模块时,将所述通用模块添加到所述基础OS部分,并将所述 通用模块的源码的文件名添加到所述动态配置;往所述构建系统添加用户自定义模块时,将所述自定义模块添加到所述附加OS部分, 将所述自定义模块的源码编译过程作为自定义函数或自定义脚本添加到所述目标脚本中, 将所述自定义模块的源码的文件名添加到所述动态配置。
6.一种Linux操作系统的定制系统,其特征在于,包括划分模块、存储模块、写入模块 以及配置模块,其中所述划分模块,用于将Linux操作系统划分为内核部分、初始系统部分、基础操作系统 (OS)部分和附加OS部分;所述存储模块,用于在宿主系统中存储待构建的所述Linux操作系统的目标源码和目 标脚本;所述写入模块,用于将上述四个部分的编译过程写入到所述目标脚本中; 所述配置模块,用于在所述Linux操作系统的定制过程中,根据用户需求配置所述附 加OS部分以及所述内核部分的选项,配置动态配置文件,执行所述目标脚本; 其中所述内核部分为配置选项确定后就不需要再重新编译的部分; 所述初始系统部分为所述Linux操作系统启动时在内存中模拟的一个根文件系统,与 所述内核部分捆绑在一起;所述基础OS部分包含工具程序、所述实际根文件系统所包含的目录布局、已经确定就 不会修改的固定配置、库文件以及模块文件;所述附加OS部分包含后期可能需要修改的非稳配置及工具程序。
7.根据权利要求6所述的系统,其特征在于所述划分模块划分的所述基础OS部分包含基础子目录和新建子目录,其中所述基础 子目录用于保存初始rpm包,所述新建子目录用于保存新增加的rpm包。
8.根据权利要求6或7所述的系统,其特征在于所述划分模块划分的所述基础OS部分进一步包含自定义的可执行脚本和/或文件。
9.根据权利要求6所述的系统,其特征在于对于所述内核部分,所述写入模块用于保存一份Linux操作系统源码、一份内核选项 配置文件以及为Linux源码打补丁的目录;对于所述初始系统部分,所述写入模块用于保存一份原始初始系统文件,以及需要在 初始系统启动时加载的模块的源码;对于所述基础OS部分,所述写入模块用于保存所述Linux操作系统中常用工具的rpm 包文件及其动态配置文件、所述Linux操作系统的目录布局。
10.根据权利要求6所述的系统,其特征在于所述配置模块进一步用于往所述构建系统添加通用模块时,将所述通用模块添加到所 述基础OS部分,并将所述通用模块的源码的文件名添加到所述动态配置;所述配置模块进一步用于往所述构建系统添加用户自定义模块时,将所述自定义模块 添加到所述附加OS部分,将所述自定义模块的源码编译过程作为自定义函数或自定义脚 本添加到所述目标脚本中,将所述自定义模块的源码的文件名添加到所述动态配置。
全文摘要
本发明公开了一种Linux操作系统的定制方法及系统,以降低定制Linux操作系统的难度,其中该方法包括将Linux操作系统划分为内核部分、初始系统部分、基础OS部分和附加OS部分;在宿主系统中存储待构建的Linux操作系统的目标源码和目标脚本;将上述四个部分的编译过程写入到目标脚本中;在Linux操作系统的定制过程中,根据用户需求配置附加OS部分以及内核部分的选项,配置动态配置文件,执行目标脚本。本发明提供了一种简单、高效、智能并且有利于维护的Linux操作系统的定制技术,不需要管理者在发布定制的操作系统时花费大量时间和精力,特别适用于针对Linux操作系统开发的需要频繁发布系统的应用。
文档编号G06F9/44GK102053831SQ20101059584
公开日2011年5月11日 申请日期2010年12月10日 优先权日2010年12月10日
发明者唐金荣, 施培任 申请人:浪潮(北京)电子信息产业有限公司