linux内核编译_linux内核编译步骤 - CSDN
精华内容
参与话题
  • 非常好的Linux编译内核详解 - -

    万次阅读 2018-03-21 15:58:36
    转载: http://blog.chinaunix.net/uid-263488-id-2138150.html非常好的Linux编译内核详解 - -一、内核简介 内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统...

    转载: http://blog.chinaunix.net/uid-263488-id-2138150.html


    非常好的Linux编译内核详解 - -

    一、内核简介 
      内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 
      Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用。而Linux的内核则是这些特点的最直接的代表。 
      想象一下,拥有了内核的源程序对你来说意味着什么?首先,我们可以了解系统是如何工作的。通过通读源代码,我们就可以了解系统的工作原理,这在Windows下简直是天方夜谭。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新编译内核。在Windows下是什么情况呢?相信很多人都被越来越庞大的Windows整得莫名其妙过。再次,我们可以对内核进行修改,以符合自己的需要。这意味着什么?没错,相当于自己开发了一个操作系统,但是大部分的工作已经做好了,你所要做的就是要增加并实现自己需要的功能。在Windows下,除非你是微软的核心技术人员,否则就不用痴心妄想了。

    二、内核版本号

      由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。Linux的开发采用的是集市模型(bazaar,与cathedral--教堂模型--对应),为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。一个树是稳定树(stable tree),另一个树是非稳定树(unstable tree)或者开发树(development tree)。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式为x.y.z:对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数)。到目前为止,稳定树的最高版本是2.4.18;开发树的最新版本是2.5.10。下载内核版本请访问http://www.kernel.org

    三、为什么重新编译内核

      Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。 
      通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。 
      为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑: 
      l 自己定制编译的内核运行更快(具有更少的代码) 
      l 系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中) 
      l 不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞 
      l 将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些

    四、内核编译模式

      要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module),动态调用。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。

    五、新版本内核的获取和更新

      Linux内核版本发布的官方网站是http://www.kernel.org。新版本的内核...问剑?恢质荈ull Source版本,另外一种是patch文件,即补丁。完整的内核版本比较大,一般是tar.gz或者是.bz2文件,二者分别是使用gzip或者bzip2进行压缩的文件,使用时需要解压缩。patch文件则比较小,一般只有几十K到几百K,但是patch文件是针对于特定的版本的,你需要找到自己对应的版本才能使用。 
      编译内核需要root权限,以下操作都假定你是root用户。请把你需要升级的内核拷贝到/usr/src/下(下文中以2.4.18的内核的linux-2.4.18.tar.gz为例),命令为

    #cp linux-2.4.18.tar.gz /usr/src

      让我们先来查看一下当前/usr/src的内容,注意到有一个linux-2.4的符号链接,指向一个linux-2.4.7-10(以REDHAT7.2为例)的目录。这就是你所装linux的kernel源代码,删除这个链接。

      现在解压我们下载的源程序文件。如果所下载的是.tar.gz(.tgz)文件,请使用下面的命令:

    #tar -zxvf linux-2.4.18.tar.gz.tar.gz

      如果你所下载的是.bz2文件,例如linux-2.4.0test8.tar.bz2,请使用下面的命令

    #bzip2 -d linux-2.4.18.tar.bz2 
    #tar -xvf linux-2.4.18.tar

      文件将解压到/usr/src/linux目录中,我们把它稍作修改:

    #mv linux linux-2.4.18 
    #ln -s linux-2.4.18 linux

      如果下载的是patch文件,就可以进行patch操作(下面假设patch-2.4.18已经位于/usr/src目录下了,否则你需要先把该文件拷贝到/usr/src下):

    #patch -p0 < patch-2.4.18

       
    六、内核编译

      通常要运行的第一个命令是:

    #cd /usr/src/linux 
    #make mrproper

      该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。由于我们使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。 
      确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。它们分别链向源代码目录下的真正的、该计算机体系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目录。如:asm指向/usr/src/linux/include/asm-i386等。若没有这些链接,就需要手工创建,按照下面的步骤进行:

    # cd /usr/include/ 
    # rm -r asm linux scsi 
    # ln -s /usr/src/linux/include/asm-i386 asm 
    # ln -s /usr/src/linux/include/linux linux 
    # ln -s /usr/src/linux/include/scsi scsi

      这是配置非常重要的一部分。删除掉/usr/include下的asm、linux和scsi链接后,再创建新的链接指向新内核源代码目录下的同名的目录。这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。现在你应该明白为什么我们上面又在/usr/src下"多余"地创建了个名为linux的链接了吧?

      接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。 
       
    配置内核可以根据需要与爱好使用下面命令中的一个:

    #make config(基于文本的最为传统的配置界面,不推荐使用) 
    #make menuconfig(基于文本选单的配置界面,字符终端下推荐使用) 
    #make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用) 
    #make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)

      这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令,界面如下:

      如果你不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了,下图为make menuconfig的界面:


      选择相应的配置时,有三种选择,它们分别代表的含义如下: 
      Y--将该功能编译进内核 
      N--不将该功能编译进内核 
      M--将该功能编译成可以在需要时动态插入到内核中的模块 
      如果使用的是make xconfig,使用鼠标就可以选择对应的选项。如果使用的是make menuconfig,则需要使用空格键进行选取。你会发现在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。 用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里可以是空,"*"和"M"这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中选择一项。 
      在编译内核的过程中,最烦杂的事情就是这步配置工作了,很多新手都不清楚到底该如何选取这些选项。实际上在配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。

    至于选项,因为比较复杂,只是简单做一介绍,编译时应视具体情况,参考帮助的内容再加以选择。

    1. Code maturity level options 
      代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。

    2. Loadable module support 
      对模块的支持。这里面有三项:

      Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。 
      Set version inFORMation on all module symbols:可以不选它。 
      Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。

    3. Processor type and features 
      CPU类型。内容蛮多的,不一一介绍了,有关的几个如下:

      Processor family:根据你自己的情况选择CPU类型。 
      High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。 
      Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。 
      MTTR support:MTTR支持。可不选。 
      Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。

    4. General setup 
      这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:

      Networking support:网络支持。必须,没有网卡也建议你选上。 
      PCI support:PCI支持。如果使用了PCI的卡,当然必选。 
      PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。 
      Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。 
      PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。 
      System V IPC 
      BSD Process Accounting 
      Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。 
      Power Management support:电源管理支持。 
      Advanced Power Management BIOS support:高级电源管理BIOS支持。

    5. Memory Technology Device(MTD) 
      MTD设备支持。可不选。

    6. Parallel port support 
      并口支持。如果不打算使用串口,就别选了。

    7. Plug and Play configuration 
      即插即用支持。虽然Linux对即插即用目前支持的不如Windows好,但是还是选上吧,这样你可以拔下鼠标之类的体验一下Linux下即插即用的感觉。

    8. Block devices 
      块设备支持。这个就得针对自己的情况来选了,简单说明一下吧:

      Normal PC floppy disk support:普通PC软盘支持。这个应该必选。 
      XT hard disk support: 
      Compaq SMART2 support: 
      Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。 
      Loopback device support: 
      Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。 
      Logical volume manager(LVM)support:逻辑卷管理支持。 
      Multiple devices driver support:多设备驱动支持。 
      RAM disk support:RAM盘支持。

    9. Networking options 
      网络选项。这里配置的是网络协议。内容太多了,不一一介绍了,自己看吧,如果你对网络协议有所了解的话,应该可以看懂的。如果懒得看,使用缺省选项(肯定要选中TCP/IP networking哦)就可以了。让我们看看,TCP/IP、ATM、IPX、DECnet、Appletalk……支持的协议好多哦,IPv6也支持了,Qos and/or fair queueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都还在实验阶段。

    10. Telephony Support 
      电话支持。Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。记住,电话卡可和modem没有任何关系哦。

    11. ATA/IDE/MFM/RLL support 
      这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。

    12. SCSI support 
      SCSI设备的支持。我没有SCSI的设备,所以根本就不用选,如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了。

    13. Fusion MPT device support 
      需要Fusion MPT兼容PCI适配器,不用选。

    14. I2O device support 
      需要I2O接口适配器支持,在智能Input/Output(I2O)体系接口中使用。

    15. Network device support 
      网络设备支持。上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。还好还好,里面大概分类了,有ARCnet设备、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support几大类。我用的是10/100M的以太网,看来只需要选则这个了。还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去要驱动了。

    16. Amateur Radio support 
      配置业余无线广播。

    17. IrDA(infrared)support 
      红外线支持。

    18. ISDN subsystem 
      如果你使用ISDN上网,这个就必不可少了。

    19. Old CD-ROM drivers(not SCSI、not IDE) 
      做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,用IDE的CD-ROM不用选。

    20. Character devices 
      字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改。把大类介绍一下吧:

      I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。 
      Mice:鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根据需要选择。 
      Joysticks:手柄。即使在Linux下把手柄驱动起来意义也不是太大,游戏太少了。 
      Watchdog Cards:虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。 
      Video For Linux:支持有关的音频/视频卡。 
      Ftape, the floppy tape device driver: 
      PCMCIA character device support:

    21. File systems 
      文件系统。内容又太多了,老法子,在缺省选项的基础上进行修改。介绍以下几项:

      Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。 
      DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。 
      ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。 
      NTFS file system support:ntfs是NT使用的文件格式。 
      /proc file system support:/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。

      还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、Partition Types(分区类型)、Native Language Support(本地语言支持)。值得一提的是Network File Systems里面的两种:NFS和SMB分别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。

    22. Console drivers 
      控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。

    23. Sound 
      声卡驱动。如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。

    24. USB supprot 
      USB支持。很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在Linux都可以得到支持,根据需要自行选择。

    25. Kernel hacking 
      配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。

      配置完后,存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。

    接下来是编译,输入以下命令。

    #make dep 
    #make clean 
    #make bzImage或make zImage 
    #make modules 
    #make modules_install 
    #depmod -a

      第一个命令make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令make clean完成删除前面步骤留下的文件,以避免出现一些错误;make zImage和make bzImage则实现完全编译内核,二者生成的内核都是使用gzip压缩的,只要使用一个就够了,它们的区别在于使用make bzImage可以生成大一点的内核。建议大家使用make bzImage命令。 
      后面三个命令只有在你进行配置的过程中,在回答Enable loadable module support (CONFIG_MODULES)时选了"Yes"才是必要的,make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中。 
      严格说来,depmod -a命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。

    更新

      经过以上的步骤,我们终于得到了新版本的内核。为了能够使用新版本的内核,我们还需要做一些改动:

    #cp /usr/src/linux/System.map /boot/System.map-2.4.18 
    #cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.18

      以上这两个文件是我们刚才编译时新生成的。下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件:

    #cd /boot;rm -f System.map vmlinuz 
    #ln -s vmlinuz-2.4.18 vmlinuz 
    #ln -s System.map-2.4.18 System.map

    七、修改启动管理器

      如果用LILO,修改/etc/lilo.conf,添加以下项:

    image=/boot/vmlinuz-2.4.18 
    label=linux240 
    read-only 
    root=/dev/hda2

      其中root=/dev/hda2一行要根据需要自行加以修改。 
      运行:

    #/sbin/lilo -v

      确认对/etc/lilo.conf的编辑无误,现在重新启动系统:

    #shutdown -r now

    如果是用Grub启动管理器,则添加如下几项即可。

    title Red Hat Linux (2.4.18) 
    root (hd0,0) 
    kernel /vmlinuz-2.4.18 ro root=/dev/hda2

    Grub不需再次调用命令,自动生效。

    重启以后就可以用新内核了。 


    展开全文
  • Linux内核编译详细总结

    千次阅读 2018-03-12 16:16:31
    学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。 &nbsp; 二、实验内容 在Linux操作系统环境下重新编译内核。实验主要内容: A.&nbsp;查找并且下载一份内核源代码,本实验使用最新的Linux内核...
    一、实验目的
    

    学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。

     

    二、实验内容

    Linux操作系统环境下重新编译内核。实验主要内容:

    A. 查找并且下载一份内核源代码,本实验使用最新的Linux内核2.6.36

    B. 配置内核。

    C. 编译内核和模块。

    D. 配置启动文件。

    本次实验环境是Linux2.6.35内核的环境下,下载并重新编译内核源代码(2.6.36);然后,配置GNU的启动引导工具grub,成功运行编译成功的内核。

     

    三、主要仪器设备(必填)

    Linux环境:utuntu10.10linux内核2.6.35

    待编译内核:linux2.6.36

     

    四、操作方法和实验步骤

    1】下载内核源代码

    http://os.zju.edu.cn/newlinux/files/jijiangmin网站上下载最新的Linux内核2.6.36

     

    2】部署内核源代码

    打开终端,更改用户权限为root。具体做法是在终端输入sudo su,然后按提示输入密码。判断是否是root用户是使用whoami命令,若输出为root则已经切换到root账户。

    输入mv linux-2.6.36.tar.gz  /usr/src,目的是把下载的内核源代码文件移到/usr/src目录。

    输入cd /usr/src切换到该目录下。

    输入tar zxvf linux-2.6.36.tar.gz,目的是解压内核包,生成的源代码放在linux-2.6.36目录下。

    输入cd linux-2.6.36,切换到该目录下。

    输入cp /boot/config-,然后按下Tab键,系统会自动填上该目录下符合条件的文件名,然后继续输入 .config,目的是使用在boot目录下的原配置文件。

     

    3】配置内核

    配置内核的方法很多,主要有如下几种:

    #make menuconfig  //基于ncurse库编制的图形工具界面

    #make config  //基于文本命令行工具,不推荐使用

    #make xconfig  //基于X11图形工具界面

    #make gconfig  //基于gtk+的图形工具界面

    由于对Linux还处在初学阶段,所以选择了简单的配置内核方法,即make menuconfig。在终端输入make menuconfig,等待几秒后,终端变成图形化的内核配置界面。进行配置时,大部分选项使用其缺省值,只有一小部分需要根据不同的需要选择。

    对每一个配置选项,用户有三种选择,它们分别代表的含义如下:

    <*>[*]——将该功能编译进内核

    []——不将该功能编译进内核

    [M]——将该功能编译成可以在需要时动态插入到内核中的代码

    本实验在make menuconfig后,把ext2ext3文件系统编译进内核。如果用户是在虚拟机下编译的,那么一般要把SCSI设备编译进内核。不是在虚拟机下编译的也可以把它编译进去,不会有什么影响的。

     

    4】编译内核

    这步是时间最长的一个步骤,一般在3个小时左右。

    编译内核只需在终端输入make,然后等待编译的完成。

     

    5】编译和安装内核模块

    输入make modules_install,这步很快能完成。

     

    6】安装内核

    输入make install

     

    7】生成启动

    依次输入:

    sudo mkinitramfs -o /boot/initrd.img-2.6.36

    sudo update-initramfs -c -k 2.6.36

    sudo update-grub2  //自动修改系统引导配置,产生grub.cfg启动文件。

     

    五、实验结果和分析

    把内核源代码移动到目录/usr/src,如下图

     

    在成功执行语句

    sudo mkinitramfs -o /boot/initrd.img-2.6.36

    sudo update-initramfs -c -k 2.6.36

    后的boot目录,如下图

     

    在成功执行语句

    sudo update-grub2

    grub.cfg文件中增加了新内核的启动项,如下图

     

    在所有的实验步骤成功完成后,重新启动,可以发现在启动项中多了两项,分别为Linux2.6.36模式和Linux2.6.36 recovery模式,选择Linux2.6.36模式,进入新的内核,若在启动过程中没有跳出错误提示,表示已经成功了。

    进入系统后,打开终端,输入uname -a,输出如下图,表明现在已经是2.6.36的内核了

     

     

    六、讨论、心得

    1、本次实验,共编译了两次内核,在第一次编译时,对内核的配置这块没有把ext2ext3文件系统编译进内核,导致了编译完的内核无法成功启动。在第二次编译中,经过仔细的对内核的配置,把ext2ext3已经SCSI编译进内核,终于成功了。这让我觉得内核编译后能否成功启动的关键是内核的配置。

    2、编译后的每一个步骤执行后,可以通过查看相关目录是否生成了预期的文件来判断过程的正确与否。

    3Linux通过在系统引导后从/boot 目录下读取内核映像到内存中来完成启动。

    4initrd.imgLinux启动过程中很重要的一个文件,如果你编译内核时将一部分功能编译为可加载模块。如果系统的一些设备的驱动编译为可加载模,那么启动时如果没有指定INITRD=/path_to_initrd.img,那么系统启动或者会失败,或者启动后会有设备无法使用(像网卡或者其 它设备)。
    如果没指定initrd.img或者指定的initrd.img中并没有包含正确的驱动模块,则系统启动时会挂起,并报告“kernel panic: VFS: Unable to mount root fs on 08:06”的错误。

    5grub.cfg文件保存着系统引导配置信息,记录着系统的启动项。新编译后的内核信息必须包含到该文件中,这样在系统启动时才会出现新的启动项的选项。

     

    参考了linuxsir和水母的linux版的精华区,本人不保留任何版权。
    经过归纳整理,看看上面的就可以了,包括补丁如何打。具体的一些选项可以往下看,一些一看就懂的白痴选项,并没有选进来,因此适合对电脑软硬件都有所了解的人参考。
    基本以2.6.5内核为例,虽然2.6的内核编译有更为方便的过程,但这里还是按照最经典的方式,这样最保险。一些过程说明经过了本人的精简,相关的疑问请自行用网络搜索答案,只保证本人看的懂;)一些设置按照自己的情况调整,不要完全照搬。对于编译内核造成的损失(比如LP跑了,再也不回来),本人不负任何责任:)仅供参考。
    1.download linux-2.6.5.tar.gz
    2.cp linux-2.6.5.tar.gz /usr/src
    3.cd /usr/src
    4.mv linux linux_old
    5.tar xvzf linux-2.6.5.tar.gz
    bzip2 -d linux-2.6.5.tar.bz2
    tar -xvf linux-2.6.5.tar
    或者tar jxvf linux-2.6.5.tar.bz2
    6.cd /usr/include
    rm -rf asm linux scsi
    ln -s /usr/src/linux/include/asm-i386 asm
    ln -s /usr/src/linux/include/linux linux
    ln -s /usr/src/linux/include/scsi scsi
    7.cd /usr/src/linux
    make mrproper (检查有无不正确的.o文件和依赖关系,使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。 )
    8.make config 或
    make menuconfig (推荐) 或
    make xconfig
    选择完返回MainMenu,选择save and exit,退出配置窗口并关闭超级用户终端。现在可以退出xwindows了,回到文本环境(这样做可以加快内核编译速度)执行最后操作
    9.make dep
    10.make zImage
    若想做成启动盘的形式可 make zdisk,若kernel大于512K,应用make bzImage (推荐)
    11.make modules make modules_install depmod -a
    12.cp /usr/src/linux/arch/i386/boot/zImage /boot (用的是make zImage) 或cp /usr/src/linux/arch/i386/boot/bzImage /boot (用的是make bzImage)
    13.修改lilo.conf 或grub.conf(添加)
    image=/boot/zImage(或bzImage)
    label=new
    root=…
    14. lilo & grub
    lilo -v 使改动生效。建议保留旧内核的项目,避免编译失败。通常 grub 配置文件在下面三个地方(根据发行版的不同):
    /etc/grub.conf
    /boot/grub/menu.lst
    /boot/grub/grub.conf
    15. shutdown -r now
    如果你的 kernel 支持内存镜像,就用 mkinitrd 命令制作一个镜像文件,然后拷贝到 /boot 路径下。要这么做,也要记得在 make menu 的时候记得选择内核镜像 ram image,并且不能安装为模块,否则 initrd 就不会运作。生成映像文件,否则有时系统启动时会找不到/根分区。
    mkinitrd /boot/initrd-.2.4.20-8.img 2.4.20-8
    initrd.img就是initrd-2.4.20-8.img文件的链接
    #ln -s initrd-2.4.20-8.img initrd.img
    有的时候 mkinitrd 失败,只要加上:–without-scsi-module 就可以通过了。
    把旧内核源文件下的.config文件拷贝到新内核源文件下,
    如cp /usr/src/linux-2.4.22/.config /usr/src/linux-2.6.5/
    然后在新内核目录下运行make oldconfig,如果想改动什么,可以
    make menuconfig,但是一定要先make oldconfig。然后就编译内核,很容易:make bzImage make modules make modules_install make install
    然后到/boot 看看是不是已经有新内核文件了,再看/boot/grub/grub.conf是否已经加载了新内核。shutdown -r now
    cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.5(新内核的bzImage的位置也有可能在/usr/src/linux/i386/下)
    cp /usr/src/linux/System.map /boot/System.map-2.6.5
    make clean
    没有 make clean 之前,如果增加了新的模块,可以直接 make menuconfig && make moduels && make modules_install,不需要全部重新来过。如果你以后还要利用这次编译的成果,也可以省略这一步,如果你想直接删除源代码目录,也可以省略这一步。
    一些升级内核前的备份过程:
    cd /boot/
    mv System.map System.map.old
    mv vmlinuz vmlinuz.old
    cd /usr/src/
    ln -s linux-2.6.5 linux
    进入/usr/include目录下,将asm、scsi、linux三个目录改名 
    [root@localhost /usr/include]# mv asm asm.OFF 
    [root@localhost /usr/include]# mv scsi scsi.OFF 
    [root@localhost /usr/include]# mv linux linux.OFF 
    建立指向新内核的位置到第三步中被改名的原目录 
    [root@localhost /usr/include]# ln -s /usr/src/linux/include/asm-i386 asm 
    [root@localhost /usr/include]# ln -s /usr/src/linux/include/scsi scsi 
    [root@localhost /usr/include]# ln -s /usr/src/linux/include/linux linux
    检验 # ls /boot
    如果看到了 vmlinuz-2.6.0 和 System.map-2.6.0 ,那么恭喜你,成功了!
    如果你是用 make install 安装的,还会看到个 config-2.6.0 文件
    cd /boot/
    ln -s vmlinuz-2.6.5 vmlinuz
    ln -s System.map-2.6.5 System.map
    (上面的两步的作用是保护真正的内核镜像不受损坏)
    vmlinuz是压缩的内核二进制可执行文件
    #du -sh vmlinuz-2.6.5 用来查看新的内核有多大
    如果你的Kernel 配置支持Modules的话,解决那些问题是比较简单的
    只要编译那些.o文件就可以啦.
    比如我的声卡经常Irq 和 IO 不对, 我就到 /usr/src/linux/drivers/sound目录下
    gcc -o configure configure.c
    ./configure
    选好IO,IRQ 等等,
    make
    cp sound.o /lib/modules/2.0.34/misc
    rmmod sound
    insmod sound init_trace=1
    测试一下.直到成功为止.比在 /usr/src/linux 下, make menuconfig ;
    make dep;make clean;make zImage;…. 好多了.
    怎么给内核打补丁?
    # cd /usr/src/linux
    # bzip2 -dc patch-xxx.bz2 | patch
    PATCH文件拷贝到/usr/src下: 
    #patch -p0 < patch-2.2.16
    #gzip -cd patch-2.4.x-pre2-ac1.gz|patch -p1 -s -N -E -d 源码目录
    可以使用这种方式来安装任何补丁,而不用管它的文件名了
    用lsmod看当前装入的module, insmod/rmmod增删module. 对于fs,network方面的module, kernel是可以自动动态装载的(通过kerneld, 要用时自动insmod) 而对于与硬件相关的module(如网卡,SCSI卡等), 则需自己手工加入, 或用RedHat Control Panel中的kernelcfg来选择module(写于/etc/conf.modules(?), 那样则boot kernel时会自动加入
    自己定制编译的内核运行更快(具有更少的代码) 
    系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中) 
    不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞 
    将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些 
    查看swap有没有打开(用free指令)。此外,最好不要超频,不然很有可能会发生signal 11的错误,使得编到一半的核心停了下来
    1. Code maturity level options 
    代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。 
    2. Loadable module support 
    Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。 
    Set version inFORMation on all module symbols:可以不选它。 
    Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。 
    3. Processor type and features 
    High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。
    Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。 
    MTTR (memory type range register)support——选择该选项,系统将生成/proc/mtrr文件对MTRR进行管理,供X server使用。同时用来启动pentinum pro和pentinum II 的特殊功能,如果你用的不是这类CPU就选N,否则也仅仅是使内核变大而已。
    Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。 
    4. General setup 
    一般使用缺省设置就可以了。
    Networking support:网络支持。必须,没有网卡也建议你选上。 
    PCI support:PCI支持。如果使用了PCI的卡,当然必选。 
    PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。 
    Support for hot-pluggabel devices:热插拔设备支持。
    PCMCIA/CardBus support:PCMCIA/CardBus支持。
    System V IPC 
    BSD Process Accounting 
    Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。 
    Power Management support:电源管理支持。 
    Advanced Power Management BIOS support:高级电源管理BIOS支持。 
    5. Memory Technology Device(MTD) 
    MTD设备支持。可不选。 
    6. Parallel port support 
    并口支持。如果不打算使用串口,就别选了。 
    7. Plug and Play configuration 
    还是选上吧,可以拔下鼠标之类的体验一下Linux下即插即用的感觉。 
    8. Block devices 
    Normal PC floppy disk support:普通PC软盘支持。这个应该必选。 
    Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。 
    Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。 
    10. Telephony Support 
    Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。记住,电话卡可和modem没有任何关系哦。 
    11. ATA/IDE/MFM/RLL support 
    这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。 
    12. SCSI support 
    13. Fusion MPT device support 
    14. I2O device support 
    需要I2O接口适配器支持,在智能Input/Output(I2O)体系接口中使用。 
    15. Network device support 
    网络设备支持。编译到内核里面好了,不选M了,选Y。
    16. Amateur Radio support 
    配置业余无线广播。 
    17. IrDA(infrared)support 
    红外线支持。 
    18. ISDN subsystem 
    如果你使用ISDN上网,这个就必不可少了。 
    19. Old CD-ROM drivers(not SCSI、not IDE) 
    做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,用IDE的CD-ROM不用选。 
    20. Character devices 
    字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改。把大类介绍一下吧: 
    I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。 
    Mice:鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根据需要选择。 
    Watchdog Cards:虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。 
    21. File systems 
    22. Console drivers 
    控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。 
    23. Sound 
    声卡驱动。如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。 
    24. USB supprot 
    25. Kernel hacking 
    配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。 配置完后,存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。 接下来是编译。 
    #make dep 
    #make clean 
    #make bzImage或make zImage 
    #make modules 
    #make modules_install 
    #depmod -a 
    make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令make clean完成删除前面步骤留下的文件,以避免出现一些错误;在回答Enable loadable module support (CONFIG_MODULES)时选了”Yes”才是必要的,make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中。严格说来,depmod -a命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。 
    #cp /usr/src/linux/System.map /boot/System.map-2.4.18 
    #cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.18 
    #cd /boot;rm -f System.map vmlinuz 
    #ln -s vmlinuz-2.4.18 vmlinuz 
    #ln -s System.map-2.4.18 System.map 
    如果用LILO,修改/etc/lilo.conf,添加以下项: 
    image=/boot/vmlinuz-2.4.18 
    label=linux240 
    read-only 
    root=/dev/hda2 
    其中root=/dev/hda2一行要根据需要自行加以修改。 
    #/sbin/lilo -v 
    #shutdown -r now 
    用Grub启动管理器,则添加如下几项即可。 
    title Red Hat Linux (2.4.18) 
    root (hd0,0) 
    kernel /vmlinuz-2.4.18 ro root=/dev/hda2 
    装过显卡驱动,比如Nvidia的话,你可以这样办
    rpm -e NVIDIA_GLX_XXX(XXX为你的显卡驱动对应的版本号,比如我的是NVIDIA_GLX-1.0-3123)
    rpm -e NVIDIA_kernel_XXXX(同上)
    把以前安装的驱动删去。
    rpmbuild –rebuild NVIDIA_kernel_XXXX,重新编译你的显卡驱动。编译好的放在/usr/src/redhat/RPMS/i386/下
    然后安装就是了、、、
    rpm -Uvh NVIDIA_kernel_XXXX.i386.rpm
    rpm -Uvh NVIDIA_GLX_XXXX.i386.rpm
    搞定,重起。
    将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。
    核心在保护空间运行,但模块并不是。这么说,并不经常使用我的设备,把它编译成只支持ext2,ide和elf。而一直使用的网卡,把其它的编译成模块:如a.out, java, floppy, iso9960, msdos, minix, vfat,smb,nfs,smcultra(ethernetcard),serial,printer,sound,ppp,等等。它们许多只是在这或那用上那么几分钟。在需要用的时候才用insmod这个指令加入核心,不用的时候也能rmmod把它从核心移除,或是用lsmod察看目前所载入的模块。这里面有三项:
    #Set version information on all module symbols——通常,我们更新核心版本之后,模块耍重新的编译。这个选项使您不必更新编译模块而能使用以前的模块。可以不选它。但如果您选y,则按照它的说明,您必须有genksyms这个程序(可用whereis指令查看有无此程序)。
    #Kernel module loader——让内核在启动时有自己装入必需模块的能力,建议选上。注意:在开机就会 mount 上来的 partition 的 FS 、device driver 记得要 compiler 进 kernel,不能把它弄成 modules。请不要夸张到为了完全模组化而忘了把ext2fs和IDE dirver compiler 进 kernel 里。
    #System V IPC 如果将来想编译dosemu(DOS模拟器),则这个选项一定要选,它是一个让各个程序(process)同步且能彼此交换数据的函数库和一些系统的调用,没它,很多的程序将会无法执行。
    #Sysctl support——除非你的内存少的可怜,否则你应该启动这个功能,启用该选项后内核会大8K,但能让你直接改变内核的参数而不必重新开机。
    #Kernel support for A.OUT binaries ——a.out的执行文件是比较古老的可执行码,用在比较早期的UNIX系统上。Linux最初也是使用这种码来执行程序,一直到ELF格式的可执行码出来后,有愈来俞多的程序码随着ELF格式的优点而变成了ELF的可执码。将来势必完全取代a.out格式的可执行码。但目前由于沿有许多的程序还没有取代过来,所以只好选择Y,等将来有一天,全部的程序都变成了ELF的天下时,那时再disable掉。
    #Kernel support for Linux/Intel ELF binaries ——由上所述,这个当然y哩,因为目前gcc-2.7.0以上的都有支持ELF了,如果没有选择这一项,可能会使用相当多的程序因此无法执行。为大多机器制作一张紧急启动盘,最好在386下编译,而386并不能运行在Pentium下编译的核心。不能同时把 a.out 和 ELF 支援编译成 modules,否则当你为了能够使用 insmod 而用 insmod 来载入 a.out/ELF modules 时会有 Catch/22 状况发生。如果你的系统主要是 ELF 而你偶尔会需要用到a.out,你可以把 a.out 支援编译为modules,否则你最好把它直接放入 kernel 之中。如果你还没进入 ELF 的世纪,在 compiler kernel 时可以直接把 ELF 支援去掉。
    ##Advanced Power Management BIOS support——高级电源管理BIOS支持。这通常是用在笔记本电脑上的东西,如果您有APM的BIOS,支持省电的设备的(有电池的那种),那么您可以选上这项,一般人这一项是选n,以避免一些可能会发生的问题。后有8个选项。
    #CMD640 chipset bugfix/support—— 很多 486和 586的主机板都是用 CMD640的芯片,它是Neptune芯片和 SIS芯片的结合。不过,这种芯片有它的缺点,在许多的情形下,它会造成数据的流失和错误。如果您选了这一项,则Linux核心会为您小心的寻找这些 错误并修正它。而且,它会打开对二个IDE界面的支持。不过,在它的说明文件中提到,如果您的主机板没有PCI界面只有VESA总线界面却希望有这项功能的话,则您必须传一些 参数给核心(ideo=cmd640_vlb)。如果不确定上面所说的,选择Y。
    #CMD640 enhanced support——一般来说,对于硬盘的存取速度来说,有所谓的 PIO MODES值设定,现今的 IDE界面及 BIOS应该都能侦测到正确的硬盘PIO MODE值了。此值愈高表示硬盘的存取的速度愈快。可是,有些主机板的B10S还是旧式的,不能抓到比较高的 PIO MODE值,如此一来,便不能发挥整台硬盘的效率。这个设定告诉读者说:如果您的IDE界面是CMD640为基础*1*7和586的主机板都在使用它。可以查查主机板的说明书或是 IDE接口卡的说明书做确定。文件上提到,选择这个将会降低一些速度,但是数据能百分之百的正确。
    #Intel 82371 PIIX(Triton I/II) DMA support——对于586的Pentium电脑来说,有相当多的主机板都是用Intel的Triton芯片,使用这种芯片的最大好处是支持直接内存存取DMA,而节省您的CPU时间。必须您的硬盘和主机板有同时支持 DMA的 IDE界面的芯片,直接与它们做沟通而节省了大量的 CPU时间。
    #Loopback device support——大部分的人这一个选项都选N,因为没有必要。但是如果你要mount iso文件的话,你得选上Y。这个选项的意思是说,可以将一个文件挂成一个文件系统。如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符合您的需求。而且,可以对这个文件系统加以保护。不过,如果您想做到这点的话,您必须有最新的mount程序,版本是在2.5X版以上的。而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz这个程序。注意:此处与网络无关。 
    #Multlnle devices driver support——这个选项可以让把整个硬盘分区变成一个单独的区块设备,您必须有md035.tgz这个程序。而且在做这件事之前请将您的硬盘备份,因为它尚在测试阶段。一般人对这个选项是选N。
    #Packet socket —— 选择“Y”,一些应用程序将使用Packet协议直接同网络设备通讯,而不通过内核中的其它中介协议。
    #Kernel/User Network link driver——这个是在测试中的程序码,一般人不需要用。依它的说明,它允许在核心、模块或程序间的某些部分间,彼此做双向的沟通。如果想使用arpd,则这个程序码就要加进核心里。
    #TCP/IP networking——选择“Y”,内核将支持TCP/IP协议。这个选项无论如何请您选择Y,即使没有网络卡,或是没有连到网络上的设备,在linux上仍有所谓的lookback设备而且有些程序需要这个选项。在说明文件中提到,如果您没有打开这个设定,则X-window system可能会有问题(回为它也需要 TCP/IP)。
    #Network firewalls——选择“Y”,内核将支持防火墙。等一下有个IP firewalling的选项也要选y;但下面的forwarding/gatewaying要选n,如此才能让它正常动作。大部分的人这个选项选N。
    #Network alasing——允许有多个IP地址。
    #IP:forwarding/gatewaying —— 和 Firewall相反,这个选项是用来疏导网络的。一个gateway(也就是router),要帮忙疏导两个网络间的数据传送。这台机器必须要有两张网络卡,连接两个个同的网络,做疏导网络的工作。如果选择了这个选项,则表示想让这台负责做router。那么,就必须有两张网络卡了。另外有一种情形是,如果您有MODEM(通过串列界面以 SLIP和 PPP协议)和网络卡,并用它们来连上Internet。这时您也一样可以执行IP-routing服务,也需把这个选项打开。
    #IP:multicasting——所谓的multicasting是群组广播,它是用在视频会议上的协议,如果想送一个网络封包(网络的数据),同样的一份数据将送往十部机器上。您可以连续送十次给十台机器(点对点的传送),也可以同时送一次,然后让十台机器同时接收到。当然后者比前者好,由于视频会议要求是最好每个人都能同时收到同一份信息,所以如果您有类似的需要,这个选项就要打开。同时您还必须去找相关的软件。
    #IP: accounting——如果您打开这个选项,您就可以在/proc/net下看到系统对于整个网络状况的纪录。所以一般的人这个选项都是选y。而且,如果您设计把这台Linux机器当router用,那么读者可以因为这个选项而获得许多有关于网络lP控制的信息和它的输送情形。
    #IP:aliasing support——经由这个设定,您可以拥有数个IP地址。假设您已经有一个lP地址了,您还想再加入其他的IP地址,这时,您可以依下面的程序来做。
    在 shell下键入:
    #ifconfig eth0:0其他的IP地址(这个IP地址不能与其他机器重复)
    # route-add-host其他的IP地址 dev eth0:0 
    #Probe a11 LUNs on each SCSI device——通常这个选项大部分的人都不会选。我们举个例子来说,如果您的SCSI光驱是那种多片装的,就是一台光驱,但可以一次放好几片光盘片的那种。这种我们叫做Lun。 
    #Dummy net driver support——如果有SLIP或PPP的传输协议,那么要把这一项打开。因为一来它不会让您的Linux核心增大。二来,对某些应用程序来说,它可以让我们模拟出来的TCP/IP环境更像TCP/IP环境。如果您没有SLIP或PPP协议,就不用打开了。
    #EQL(serial line load balancing) support——如果有两个MODEM,两条电话线,而且用SLIP或PPP协议,可以用这个Driver以便让您的MODEM有两倍的速度。当然,在网络的另一端也要有同样的设备。
    #PLIP(parallel port) support——依字面上看,它是一种利用打印机的接口(平行接口),然后利用点对点来模拟TCP/IP的环境。它和 SLIP/PPP全都属于点对点通讯,您可以把两台电脑利用打印机的连接接口串联起来,然后,加入此通讯协议。如此一来,这两部电脑就等于一个小小的网络了。不过,如果电脑有提供打印服务的话,这个选项最好不要打开,不然可能会有问题(因为都是用平行接口)。
    #PPP(point-to-point)support——点对点协议,近年来,PPP协议已经慢慢的取代SLIP的规定了,原因是PPP协议可以获取相同的IP地址,而SLIP则一直在改变IP地址,在许多的方面,PPP都胜过SLIP协议。
    #SLIP(serial line) support——这是MODEM族常用的一种通讯协议,必须通过一台Server(叫ISP)获取一个IP地址,然后利用这个IP地址,可以模拟以太网络,使用有关TCP/IP的程序。
    # EISA, VLB, PCI and on board controllers ——选择网络卡,包括直接附在主机板上的那种。如果选择y,则底下会列出其他的网络卡让您做选择,这些卡对于一般人来说很少会去用到。所以大部分的人这项是选N的。 
    #Pocket and portable adaptors——通常用在可携式的电脑上,这类型的网络卡(口袋型的),由于体积很小在安装和取下方面很方便,因此笔记本相关电脑上便常常采用这种网络卡。
    #Token Ring driver support——Token Ring是 IBM电脑上的网络。它叫令牌环网络,和以太网络是很类似的东西。如果您希望使用的Token Ring网络卡以便连接到这种网络,那么选Y,一般人都选N。
    12. Amateur Radio support 业余无线广播
    可以用来启动无线网络的基本支持,目前的无线网络可以通过公众频率传输数据,如果你有此类设备就可以启用,具体请参考AX25和HAM HOWTO 文档。
    #Standard/generic (dumb) serial support——-选择“y”,内核将支持串行口。标准序列接口的选定。如果您是用serial的鼠标(大部分的人都是用这个),或是MODEM的话,则这一项一定要选。大部分的人这一项都选y。
    #Support for console on serial port——选择“y”,内核可将一个串行口用作系统控制台。
    ##I2C support——I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。
    #Mice鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad——根据需要选择。非串行的鼠标,支持象PS/2。看一看你鼠标的键。许多双键鼠标是PS/2,即使它们的连接看起来象串行的.。
    #Digiboard PC/Xx Support——这是一张叫 Digiboard PC/XX卡的 driver,这种卡上面有很多个 serial port的插槽(一般来说只有两个),可以用来连接很多个MODEM,在民间的BBS站很常用到,如果您有这样的东西,您必须选这项为y。有兴趣的读者可以读读Documentation/digiboard.txt的内容。
    #Cyclades async mux support——同上,这也是一种能接很多个serial port插槽的卡的驱动程序。
    #Stallion multlport serial support——同上,这也是其中一种卡。
    #SDL RISCom/8 card support——这也是其中的一个支持muti-serial卡的driver。
    #Parallel printer support——有打印机的或是使用到并行接口的人这一项一定要选。除非是用serial的打印机。还有如果您有使用PLIP,那么这项也请选上。
    #Mouse support——大部分的人这一项并不用选y。因为大部分的人是用serial的鼠标,除非有些人是用一种附有接口卡的鼠标,这时这个选项才要选上,如果您选y,则底下会列出您的BUS鼠标所用的接口卡。
    #support for user misc device modules——除非您有所谓的触摸式显示器或是光笔等东西,否则这一项选n。
    #Watchdog Timer support——一般人不需要这个选项,如果您选上这个选项,则您要用mknod在/dev下建一个watchdog的文件。请看Documentation/watchlog.txt的解释。
    #Enhanced Real Time Clock Support——关于系统上Clock的东西,您必须自己用mknod在/dev/下建立一个文件叫rtc。如此一来,在/proc/下将可以看到rtc的信息。有关于rtc的内容请看Documentation/rtc.txt。一般是选n。
    #Kernel automounter support——选择“y”,内核将提供对automounter的支持,使系统在启动时自动 mount远程文件系统。
    #Standard( minix )——新的套件不再建立 minix 文件系统,而且很多人不使用它,但是把它配置在核心里仍然是个好主意。某些″rescue-disk ″ 程序会用到它,而且仍然有许多磁片可能用 minix 文件系统,因为 minix 文件系统对于处理磁片方面是最好的。Minix文件系统通常用在磁盘上,有时会用到它。
    #Extended fs —— 这是扩充文件系统的第一版,现在已经不再使用。
    #Second extented fs——这是现在新发行的套件所广泛采用的文件系统,你可能会有其中一种。这个是linux文件系统,请务必选y。
    #xiafs filesystem—–这个文件系统曾经一度很普遍,但是在写这份文件时,我已经不知道有任何人在使用它了。
    #umsdos: UNIX like fs on top of std MSDOS FAT fs —— 如果把Linux装进DOS的一个目录下那么您则要选择这一项。不建议这样做,因为如此一来,就不能看到长文件名了。而且效率上,井不是很好。
    #ums-dos——相当 slick 的文件系统,它能使 MS-DOS 文件系统拥有更多的特性,像是长档名等等。这对那些不使用 MS-DOS 的人(像我)并不是很有用。
    #System V and Coherent——这是为 System V 以及 Coherent 的分割区而设的。如果希望支持System V或Xenix的相关UNIX系统的FS并读取它们的数据,那么才有必要选这个,否则一般来说这个选项是选n的。
    #Mandatory lock support——有些很特殊的database应用软件会用到它,一般人这个选项是选n。而且,如果选y的话,必须有最新版的NFS软件,最新版的samba软件等。
    #NCP filesystem support——NCP是一种网络的通讯协议,用在跑IPX协议上,它可以利用IPX协议让两台电脑之间的文件共享,并做沟通。如果您想挂上有关Novell的Netware文件系统,那么这个选项就选上去吧。
    #/dev/dsp and/dev/audio support—— 这个选项通常是必要的。因此大部分的人选y,如果没有这选项,则很多的游戏将没有声音效果。
    #MIDI interface support——支持MIDI界面。
    #I/O base for SB Check from manual of the card——声卡的I/O地址。括号是常用的选项。
    #Sound Blaster IRQ Check from manual of the card—–声卡的IRQ,通常是1或5。
    #Sound Blaster DMA 0,1 for 3—–声卡的DMA,通常是1。
    #Sound Blaster 16 bit DMA 5, 6 or 7(usel for 8 bitcards)(SB.DMA2)—–5
    ##Additional low level drivers——如有其他种类的声卡,则这项要选上去,以下会列出其他的声卡供选择。
    kernel profiling support(v1.3)
    这个选项可以开启内核做效率统计的功能,并且会提供其他在为
    系统侦错时有用的信息。这些功能会需要付出一些代价并造成系
    统执行得较为缓慢,除非你正在研究内核的某个问题,否则你应
    该回答N。
    21. Kernel hacking安全模式 
    通俗的说,这是windows安全模式,找不到明确解释,就引用这个说法。>这是从 Linus的README里摘录的:″kernel hacking ″配置的细节通常会产生一个更大或是更慢的核心(或者是又大又慢),而且可能因为将一些常式配置成很活跃地去尝试中断一些不良的程序码以便找出核心里的问题,而使得核心变得比较不稳定。所以要产生一个核心″产品 ″的话,你在这
    #shutdown -r now
    不建议使用热启动或ctrl+Alt+del键。在一些情况下,文件系统不完全卸栽会损坏打开的文件。如果你没看见启动提示,你可以试用shift或ctrl键,这样启动提示就出现了。一旦出现,按tab看核心标签。输入标签和可选参数启动。在机器重启后出现LILO时按TAB键,输入linux2.6.5,新内核发挥作用了。
    以太网的默认值是PCI的以太网卡,对ne2000的默认支持方式是build-in,即没有设成模块,所以如果你的网卡是ISA的,那么务必要选择其中的other ISA card,最好把PCI intel pro选项去掉,另外把ne2000 support选项改成module。

     
     
     





    展开全文
  • Linux 内核编译(三天吐血经历!)

    万次阅读 多人点赞 2016-03-21 19:59:50
    前几天做一个实验:编译Linux内核并向其增加一个系统调用。这个实验实在是太让人无语了,各种坑!昨天这个时候,我还在苦苦煎熬中。在今天凌晨四点才做好。为了让其他人少走一些弯路,鄙人就把自己的经验以及教训写...
    写在前面的话:
    本人大二,东南大学一个软工狗,正在修一门名为《操作系统原理》的坑爹课!前几天做一个实验:编译Linux内核并向其增加一个系统调用。这个实验实在是太让人无语了,各种坑!昨天这个时候,我还在苦苦煎熬中。在今天凌晨四点才做好。为了让其他人少走一些弯路,鄙人就把自己的经验以及教训写下来。里面会有一些不足,希望大家多多指教~

    废话不多说,那就开始吧:

    一、实验前的准备:

    Vmware + ubuntu10.10 (32位)+ linux-2.6.32.71.tar.xz
    安装虚拟机教程:http://jingyan.baidu.com/article/90895e0f95a07564ec6b0bc7.html
    说明:ubuntu 10.10是我试验的最后一个,也是最后成功的那个。当然,更推荐ubuntu 10.04,因为这个支持sudo apt-update 少了一些麻烦。 而由于10.10不支持更新,故我另外新下了linux 2.6.32.71 先将这个文件拖入虚拟机桌面。

    附: ubuntu10.10百度网盘分享:链接:http://pan.baidu.com/s/1bnNr8dD 密码:ybg3
            linux-2.6.32.71.tar.xz 百度网盘分享:链接:http://pan.baidu.com/s/1c1cOOtq 密码:epu9(可能已经失效,大家可以去某度上面进行下载。网上资源很多,造成的不便,很抱歉~)

    二、解压内核

    1、先打开安装好的ubuntu 进入终端 :在桌面按ctrl+alt+T
    2、输入sudo su 获取root权限:(会出现一个输入密码的一个命令行,在终端输入密码时,是不显示星号的。你只管把密码输入回车就行了!用惯了window的小伙伴可能会有些不适应)最后如图:

    3、先把下载好的内核复制到 /usr/src 文件夹中 : 
          终端输入 cd Desktop(定位到桌面) 回车 ; cp  linux-2.6.32.71.tar.xz  /usr/src 回车
    4、解压内核 依次输入以下命令回车执行
          cd /usr/src ;
       xz -d linux-2.6.32.71.tar.xz

         tar xvf  linux-2.6.32.71.tar

    三、增加系统调用

    1、

    打开sys.c文件。

    gedit /usr/src/linux-2.6.32.71/kernel/sys.c

    2、

    在文件末尾增加系统调用。

    asmlinkage intsys_mycall(int number)

    {

     printk("My Student No. is XXXXX,and My Name is XXXXX*** !");

     return number;

    }

    注:printk就是系统调用输出一行文字,你可以自定义里面内容,便于最终检验。

    3、

     注册系统调用:

    gedit /usr/src/linux-2.6.32.71/arch/x86/kernel/syscall_table_32.S

    在.long 类型文件末尾添加:

    .longsys_mycall

    并且按照顺序记住它属于第几个系统调用,在本机中为337。

    4、

    gedit /usr/src/linux-2.6.32.71/arch/x86/include/asm/unistd_32.h

    在一系列#define __NR_之后添加:

     

    # define __NR_mycall 337

    在这里就需要用到之前记住的数字了。


    四、编译内核

    ps:深吸一口气,前面做的只是准备工作!下面才是真正的开始!打好精神,真正的挑战在下面!
    下面的记得一定要一步一步都要做!不要漏掉一步!!!!

    进入解压目录:

    cd /usr/src/linux-2.6.32.71

    make mrproper

    make clean

    make oldconfig

    make bzImage  (这个过程和下面的过程非常非常非常长,亲测,建议泡杯茶,或是看个电影,没有两个小时不行

    make modules

    make modules_install


    五、拷贝内核

    经过了漫长的等待,我们终于到了这一步。
    先检验一下我们的结果:

     


     首先查看一下编译好的内核版本,以便命名 打开 /lib/modules  里面应该多了一个纯数字不带"generic"的文件夹,那就是新内核版本号,我们的是2.62.32.71 如下所示:

    有了这个就代表前面的没有什么错误了。

    接着,就在终端输入: 

    cp /usr/src/linux-2.6.32.71/arch/i386/boot/bzImage  /boot/vmlinuz-2.6.32.71-mykernel


    六、创建initrd文件

    mkinitramfs-o /boot/initrd.img-2.6.32.71


    七、更新grub引导表

    进行到这一步,也许你感觉到自己差不多了,毕竟都这么久了,你也许有些困了,有些疲惫,但是,我告诉你,最难最容易出错的,就在当前这一步!建议你先休息一下,下面需要你投入百分之百的注意力去做,若是出错,你可是要全部重新开始的!
    1.

    gedit /boot/grub/grub.cfg


    2.
    在打开的文件中找到类似如下的字段,并复制并粘贴在前面:

    但必须在同一个

    ### BEGIN /etc/grub.d/10_linux ### 

           ……  

    ### END /etc/grub.d/10_linux ###

    里面

    字段如下:
    menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9
    linux /boot/vmlinuz-2.6.35-22-generic root=UUID=0efd72ba-ba85-470f-8c21-ab68730ca8c9 ro   quiet splash
    initrd /boot/initrd.img-2.6.35-22-generic
    }
    menuentry 'Ubuntu, with Linux 2.6.35-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set 0efd72ba-ba85-470f-8c21-ab68730ca8c9
    echo 'Loading Linux 2.6.35-22-generic ...'
    linux /boot/vmlinuz-2.6.35-22-generic root=UUID=0efd72ba-ba85-470f-8c21-ab68730ca8c9 ro single 
    echo 'Loading initial ramdisk ...'
    initrd /boot/initrd.img-2.6.35-22-generic
    }


    将粘贴后字段里面的
     linux    /boot/vmlinuz-2.6.35-22-generic      initrd    /boot/initrd.img-2.6.35-22-generic  改成你的内核文件地址和initrd 地址:
     linux   /boot/vmlinuz-2.6.32.71-mykernel    initrd    /boot/initrd.img-2.6.32.71

    这一步特别无聊但又必须认认真真做,要不然你就前功尽弃,别问我怎么知道的,我要是牢记这句话,不会到四点才睡觉 ( ╯□╰ )!! 建议全部改完之后,检查几遍。笔者以及室友们都在这步出错,以至于不得不重新开始。全部完成如图所示:

     红框是改过之后的,篮框里面的是你需要复制的内容 可以看到 ,两者在同一个###BEGIN /etc/**** 里面 黄色下划线部分
    (图丑见谅)


    八、收尾工作

    好了,你若已经检查完毕上面的一切工作,那么,扫尾工作就开始了,这时候,也莫要放松 一步一步来,喝点开水,长呼口气,一步一步来,下面的一步一步落实:

    cd /boot

    cp initrd.img-2.6.32.71 initrd-2.6.32.71.old

    depmod–a

    update-initramfs-k 2.6.32.71 –c

    cd /tmp

    gzip-dc /boot/initrd.img-2.6.32.71| cpio –id

    touch lib/modules/2.6.32.71/modules.dep

    find./ | cpio -H newc -o > /boot/initrd.img-2.6.32.71.new

    gzip /boot/initrd.img-2.6.32.71.new

    cd /boot

    mvinitrd.img-2.6.32.71.new.gz initrd.img-2.6.32.71


    九、重启

    终于到了验证结果的一步了,此时你要克制一下自己的激动心情,在终端键入 reboot 点击回车。慢慢等待一会,若是你重启成功,那么恭喜你,你已经要看到胜利的曙光啦!
    重新进入终端,获取权限,过程前面有讲,不再重复。在终端键入 uname -a 回车
    此时若是看到

    linux-2.6.32.71,说明已经成功!

    如下:

    若是看到这个,你就可以大叫一声庆祝一下了,你已经成功啦!!!!

    十、测试自定义系统调用

    打开终端,键入gedit,打开gedit工具,继续键入如下代码:

    #include<stdio.h>

    int main()

    {

           syscall(337, 1);

           return 0;

    }

    保存为mytest.c

    再继续在终端中键入

    gcc-o mytest mytest.c(编译C程序)

    之后 ./mytest

    点击运行编译出来的程序,此时并不会显示出效果,在终端中键入dmesg –c查看系统调用信息。

    此时,你可以看到



    说明之前写的sys_mycall调用成功!
    到这一步,算是全部成功啦!!庆祝一下,去装个逼吧~~~~
     
    写在最后的话:

    由于笔者是新手,里面的步骤有些显得很笨重,希望大手们看到之后多多指教!谢谢!!
    另外,做这个实验一定要有耐心,若是你做的时候一直很小心,每一步都认真做,那么你一次就可以成功!!别像笔者这样做了不知多少遍。
    最后,祝大家成功!!   有不足,也希望大家指出,谢谢@~@
     
    ps:
    参考文档:http://wenku.baidu.com/view/40af3b6727d3240c8447efd8.html?qq-pf-to=pcqq.c2c

    第一篇博文,谢谢大家的浏览o(^▽^)o


    展开全文
  • linux内核编译详解

    万次阅读 2018-04-28 04:36:26
    前言Linux内核是Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。Linux内核是单内核设计,但却采用了微...

    前言

    Linux内核是Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。Linux内核是单内核设计,但却采用了微内核的模块化设计,支持内核线程以及动态装载内核模块的能力。

    Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统定制一个更高效、更稳定的内核,就需要手动编译Linux内核。那么如何编译内核呢?本文将讲解Linux内核编译的详细程。

    内核编译之内核获取

    编译内核的前提是需要有新内核的源码包,获取源码包的渠道有很多,这里就不详细介绍了,建议直接去官方网站(www.kernel.org)下载。我这里准备的是3.10.10版本的源码包,尽量不要直接编译最新版本的内核,可能会造成不兼容等问题。

    wKioL1UaSeix-dlFAAB3S3Uwx1o412.jpg

    内核编译之解压源码包

    编译内核时,一般把源码解压到/usr/src目录下,解压完成后会在该目录下生成一个与源码包版本号一致的目录,为了方便起见,我们可将它做一个链接,链接为linux目录。

    wKioL1UZObaD1N9mAADOlNJL-GI139.jpg

    内核编译之配置内核

    编译内核首先需要安装开发环境(Development Tools和Server Platform Development),配置内核之前可以查看当前系统的设备信息,了解系统详细配置。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    查看CPU信息:
    cat /proc/cpuinfo
    x86info             #此工具需手动安装
    lscpu
    查看PCI:
    lspci               #可用选项-v查看详细信息
    查看USB:
    lsusb               #可用选项-v查看详细信息
    查看块设备:
    lsblk

    配置内核可选用多种方法

    1
    2
    3
    4
    5
    6
    7
    make config           #遍历选择编译内核功能
    make allyesconfig     #启用内核全部功能
    make allnoconfig      #内核功能选项全部为否
    make menuconfig       #开启文本菜单选项,对窗口有限制,尽量调大窗口,否则会出错
                          #使用此命令需安装gcc和ncurses-devel
    make gconfig          #依赖GNome桌面环境及GNome的图形开发环境,gtk2
    make kconfig          #依赖KDE桌面环境及KDE的图形开发环境,qt

    内核功能选项

    1
    2
    3
    [*]                   #编译进内核本体
    [M]                   #编译成内核模块
    [ ]                   #不选择使用

    使用make menuconfig开启菜单选项,手动选择内核功能

    wKiom1UZS_mQcZATAAGp8Z-ylds766.jpg

    wKiom1UaSBbSK5j_AAKk9Mde6bQ979.jpg

    配置完成后,配置信息会存储于名为.config的隐藏文件,如果想方便配置,可复制/boot/config文件覆盖.config文件,直接修改即可。

    wKiom1UZVKuyxUOXAAFOCCVYQ9U514.jpg

    内核编译之编译安装

    编译时如果是远程连接,一旦断开连接,编译就会出问题。所以我们可使用screen命令(需安装),启动多个窗口,即使连接中断,编译也不会终止。

    1
    2
    3
    4
    screen                 #开启窗口
    Ctrl+A+D               #隐藏窗口
    screen -ls             #查看运行的窗口
    screen -r SCREEN_ID    #返回窗口

    开始编译

    wKiom1UZWlnDO1pnAAHn6i3p1lA232.jpg

    安装模块

    wKiom1UZcTaDivctAALuw61O1-4433.jpg

    安装完成后在/lib/modules/目录下会生成一个同内核版本好的目录,目录下便是新内核的模块了

    wKioL1UZdD7RFD6QAABPZqs116Q968.jpg

    安装内核

    wKioL1UZeP7BdH0hAABvYzZfOu0521.jpg

    安装完成后会在/boot目录下生成几个新内核的文件

    wKioL1UZesfwiq9gAAD--Bmu7UA122.jpg

    查看grub.conf配置文件,会发现新内核的信息已经写入了

    wKiom1UZeoCi5rZFAAJM5_x-2kI391.jpg

    以新内核启动

    wKiom1UZe2mwohXHAAE6f6Dd9Hc576.jpg

    查看新内核版本

    wKiom1UZe__CW2gxAAAd_NmD9KU403.jpg

    补充:

    如果前面多次编译过,在编译开始之前可进行清理

    1
    2
    3
     make clean       #清理编译的文件,但保留配置文件
     make mrproper    #移除所有编译生成的文件、配置文件和备份文件
     make distclean   #完全清理

    如果想快速编译,可进行如下操作

    1
    make -j *         #*为cup核心数

    如果想将编译生成的文件保存至别处,可进行如下操作

    1
    2
    3
    mkdir /path/to/somewhere               #创建存放目录
    cd /path/to/somewhere                  #进入目录
    ./configure --ksource=/usr/src/linux   #指定源目录

    如何只编译内核的部分代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    只编译某子目录中的相关代码:
    cd /usr/src/linux
    make  path/to/dir/
    只编译部分模块:
    make M=path/to/dir
    只编译一个模块:
    make path/to/dir/MOD_NAME.ko
    将编译生成的文件保存至别处:
    make O=/path/to/somewhere

    The end

    好了,内核编译的过程就是这样了,其中麻烦的地方除了需要消耗大量时间,也就是配置内核菜单了(英文伤不起...),想详细了解每个项目的意思请自行查资料。

    以上仅为个人总结,如有错漏,大神勿喷~~~

    关于作者

    目前在一家半导体公司从事GPU编译器研发,未来打算写一些关于计算机基础和计算机热点文章,欢迎大家关注我的公众号(程序芯世界)。 

    展开全文
  • linux内核编译过程的最终总结版

    万次阅读 2018-09-15 19:01:28
    学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。   二、实验内容 在Linux操作系统环境下重新编译内核。实验主要内容: A. 查找并且下载一份内核源代码,本实验使用最新的Linux内核2.6.36。 B....
  • Linux内核编译与安装:4.4.0-21→4.14.0

    万次阅读 2018-03-11 11:07:39
    1. 背景从事Linux环境下开发...2. 编译环境zg-Linux etc # uname–a(查看内核Linux zg-Linux 4.4.0-21-generic #37-UbuntuSMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU/Linuxzg-Linux etc # lsb_re...
  • Linux配置并编译内核

    万次阅读 2018-08-03 16:29:36
     配置内核代码并不会花费太长时间。配置工具会询问许多问题并且允许开发者配置内核的每个方面。如果你有不确定的问题或者特性,你最好使用配置工具提供的默认值。本系列教程会使读者逐步了解配置内核的整个过程。 ...
  • linux 内核 编译详解

    2019-08-05 09:56:48
     Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为...
  • Linux内核编译

    万次阅读 2018-09-03 15:38:41
    下面简单介绍一下Linux内核编译过程。(附注:本博客所讲的内容是在Ubuntu上进行操作的,Cent OS并未验证) 1、下载内核源码,可以到kernel.org上进行下载。 2、解压内核源文件(注意:要先使用cd命令进入压缩包...
  • 嵌入式Linux内核编译

    千次阅读 2019-04-10 11:16:49
    实验环境 VMware Workstation Player Ubuntu16.04 s5p4418-kitkat.tar.bz2.aa 、 s5p4418-kitkat.tar.bz2.ab、android-patch.tgz、arm-2009q3.tar.bz2系统源码...Linux内核配置与编译 将系统源码(s5p4418-kitka...
  • Linux 内核编译选项详解

    千次阅读 2015-07-09 15:31:32
    linux内核编译选项详解(一):General setup [*]Prompt for development and/or incomplete code/drivers 显示尚在开发中或尚未完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,...
  • Linux内核编译流程(Menuconfig图形化方式)Menuconfig配置内核原理:在Linux里面我们所看到的menuconfig界面是通过配置内核顶层的Kconfig产生的,而当输入make menuconfig命令的时候系统会读取Makefile来解析...
  • Linux内核编译及添加系统调用

    万次阅读 2017-05-26 17:10:29
    Linux内核编译及添加系统调用接下来的几篇博客会详细记录总结在Linux实践课程中的问题和感悟,这是第一篇。内容要求 编译一个干净的Linux内核并加载成功,不需要对内核进行修改。 在1中新编译的内核中,添加一个系统...
  • Linux开发六_linux内核编译运行

    千次阅读 2016-09-28 09:46:07
    Linux是一个非商业化的产品,任何人都可以获得源代码并研究它。这吸引了很多开发者对其代码进行修改和完善,因此变得越来越流行。从小到手表,大到超级计算机...笔者此处就Linux内核编译以及运行作一个简单的介绍。
  • linux 内核编译原理

    千次阅读 2017-01-20 23:54:56
    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码...我们在进行linux内核配置的时候经常会执行make men
  • Linux内核编译——修改版本号 参考文章 一.实验环境
  • 定制linux和linux内核编译

    千次阅读 2018-01-07 22:02:37
    自制linux系统 分区并创建文件系统 可以用u盘或者硬盘来安装制作一个精简版linux 将要安装linux的u盘或设备分区 fdisk /dev/sdb 分两个必要的分区 /dev/sdb1对应/boot /dev/sdb2对应根 / mkfs.ext4 /dev/...
  • 基于arm的Linux内核编译

    千次阅读 2018-08-04 16:34:35
    1、在官网下载Linux内核源码  官网地址:https://www.kernel.org/ 2、解压Linux内核源码 3、安装arm-gcc交叉编译工具链:sudo apt-get install arm-linux-gnueabi 4、内核版本大于3.0的方法:(2.6的版本好像更...
  • Linux内核编译路径指定

    千次阅读 2011-05-23 10:37:00
     lib/modules/`uname -r`/build
  • 树莓派Linux内核编译

    千次阅读 2018-10-30 17:29:31
    1、获取编译所需源码1)下载地址: 官方网址:https://github.com/raspberrypi 上面列出了树莓派所有的开源软件: firmware:树莓派的交叉编译好的二进制内核、模块、库、bootloader。 linux:内核源码,可以在...
1 2 3 4 5 ... 20
收藏数 227,089
精华内容 90,835
关键字:

linux内核编译