热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

编译内核的一点点经验

文章标题:编译内核的一点点经验。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  最开始听说编译核心时都吓了一跳, 心想LINUX那么可怕, 一上来就是要自已编译核心...
  后来自己试了一下, 其实也不复杂, 主要是找些文档来看就行了.
  
  1.核心的源程序:
  我现在在用TLC, REDHAT也用过, SLACKWARE也用过. 无论哪一种, 都是把核心源程序放到 /usr/src/linux 下, 因为有些别的应用程序在编译时好像也会从这个路径来引用一些头文件之类. 一般来说这个 linux 目录都只是个符号连接, 有一点点像WIN下的Shortcut, 而实际上它对应的目录可能是 /usr/src/linux-2.0.35 之类. RedHat的缺省安装好像并不装源程序, 只有些头文件.
  以现在的2.2.5 核心为例, 我装的时候就是这样(其实什么版本都一样 :)
  cd /usr/src
  rm linux
  # 这个linux只是个符号连接, 删掉它没事的. 可以 ls -l 看看, 如果看到这个:
  # linux -> linux-XXXXX, 就表示它是个连接而已. 原来的源程序在箭头后的目录.
  tar zxvf XXXXXXX/linux-2.2.5.tar.gz
  # 这个包解开后, 新核心的源程序就放在了新建立的linux目录下, 这可是个货真价
  # 实的目录.
  mv linux linux-2.2.5
  ln -s linux-2.2.5 linux
  # 按照惯例, 还是把目录另命个名, 再重新做个linux的符号连接
  好了, 现在源程序放好了.
  
  2.准备编译:
  现在要做一些准备工作. 对于新释放出来的核心源程序也没啥好做的, 就打一个:
  cd /usr/src/linux
  make menuconfig
  
  然后就会看到一个很友好的界面(在LINUX下...已经是很友好的了), 大致上有点像WIN 9X安装时的选择安装项目. 这就是在配置核心, 选择哪些内容要, 哪些不要.
  慢慢道来:
  
  Code maturity ......
  按回车进去后只有一项, 是问是否在后面的选项中列出开发中/或未完成的代码/
  驱动程序. 不管它, 不选它就行了
  
  Processor type ......
  选择CPU类型, 进去后有四项:
  Processor family: 按回车, 在里面选CPU类型(我不懂为什么把PPro和6x86MX列在
  一起);
  Math emulation: 协处理器仿真, 当然不选(你不会还在用没有FPU的386吧);
  MTRR: 搞不懂 :PP, 不管它, 缺省是不选的;
  Symmetric......: 如果你富到有两个或以上的CPU并且装在同一块主板上, 就选;
  
  Loadable module support:
  对模块的支持. 模块可是好东西, 网卡声卡的驱动问题很多朋友都在问, 有模块
  其实很好办. 这里面有三项:
  Enable loadable .....: 当然要选;
  Set version.....: 好像是为了使核心可以装入不同版本的模块, 可以不选它;
  Kernel module.....: 让核心在启动时有自己装入必需模块的能力, 选上吧;
  
  General setup:
  里面东西不少, 我的办法是一项也不改, 用缺省的;
  
  Plug and Play........:
  著名的Plug and "Pray", 嘿嘿. 选上吧;
  
  Block devices:
  选择某些设备驱动, 按缺省的不变就可以了(如果你没有什么过于古旧的设备如
  IDE卡的话), 不过我是把"CMD640"及"RZ1000"两项去掉, 因为我不认得它们, 它
  们也不认得我. 还有就是不妨把 "Loopback device" 也加上, 做成核心内包含
  或模块都可以.
  
  现场解释:
  在每一个选项前都有个括号, 但有的是中括号有的是尖括号. 用空格键选择时可以发现, 中括号里要么是空, 要么是"*", 而尖括号里可以是空, "*"和"M". 这表
  示前者对应的项要么不要, 要么做在核心里; 后者则多一样选择, 可以做成模块.
  
  模块: 我的直观理解是, 模块就是像*.SYS那样的驱动程序, 可以在核心启动后加载,能有效减小核心尺寸, 并有更多的灵活性. 关于灵活性, 后面再说.
  
  Networking options:
  主要是有关TCP/IP的设置. 一般机器用缺省的就行了, 别的如果要作防火墙啊
  路由什么的可以自己选, 我没选过, 不敢乱说 :PP;
  
  SCSI support:
  我是没有SCSI设备的, 所以我一项也不选. 你有吗? 不妨把你要的都做成模块,
  这样内核会比较小. 像16.8就选了"low-level drivers" 里的"AIC7xxx",因为
  有一个SCSI 的 CDR 光驱, 有时候可能会接上来用;
  
  Netword device support:
  这里就是网卡的设置.
  进去以后第一项, Netword device support选上先(没网卡? 也选!)
  
  ARCnet support:
  小的不知此为何物, 不选它;
  
  Dummy net driver support:
  哑(或空)网络驱动支持. 照缺省的, M.
  
  EQL ........:
  不懂. 不选.
  
  Ethernet (10 or 100Mbit):
  你是用网卡上网就把它选上吧.
  
  3COM cards:
  如果你用3COM的卡, 选上. 下面会有多的选项, 选择你的卡那一项吧.
  
  AMD LANCE .....:
  Western Digital......:
  Racal-Interlan......:
  看起来都像是某种卡, 不管他.
  
  Other ISA cards:
  其他的用ISA网卡的玩家们(尤其是UMC 9008这种XX卡), 选上.
  别的卡我是没用过, NE2000兼容的卡就选上 NE2000/NE1000 support, 最好是选成
  M. 把网卡驱动做成模块会有利于你装网卡驱动的.
  
  如果已经选出了你用的卡, 下面的可以全部不管了. 统统可以不选. 如果不是的话,
  就照着列出来的项目选. 例如是拨号上网就要把PPP 选上. 下面的这些没有一样我用
  过, 不敢胡说 :PP
  
  出来, 然后是 Amateur Radio Support, 不选;
  
  然后是ISDN...你富到了用ISDN上网?
  
  下面是 Old CD-ROM drivers, 如果你还在用古老的非IDE或SCSI接口的光驱, 就进去
  自己选吧.
  
  Character devices:
  基本上可以全都不变. 如果用的是串口鼠标, "Mouse Support(not serial mouse)"
  就可以不选了. 有游戏手柄的可以在 Joystick support 里选. 一般的模拟手柄(不好
  下精确的定义, 总之你能用60块钱以下买到的4键6键8键之类都是模拟型的)就选第一
  项"Classic PC ....". 我用的Creative Cobra里面是没有的. 不过, LINUX下把手柄
  驱动起来好像也没什么意义...
  
  Filesystems:
  文件系统支持.
  Quota support:
  不用选了, 如果你的机器不是像16.8这样做个人主页服务器的话. 如果你要实验如何
  限制用户使用的硬盘空间, 就选上.
  
  Kernel automounter support 可以选上, 虽然我没发现选不选有什么区别.
  DOS FAT fs support 最好要选上, 如果要在LINUX下读写DOS分区. 下面有三个选项,把
  "MSDOS fs support" 与 "VFAT(Windows-95) fs support"选上就可以了. VFAT 即
  FAT32.
  
  ISO 9660 .....: ISO 9660格式光盘(现在的软件光盘..X版的光盘..都是这个格式)支
  持, 当然选上.
  
  Microsoft Joliet......: 选上以后没发现有什么用.
  
  以下的可以统统保持缺省. 如果装了NT或OS/2, 可以选上NTFS ....及 OS/2 ....., 都
  是只读访问.
  
  Network File Systems 子项里缺省选上了NFS, 可以不要. SMB可以选上, 用来访问局
  域网中的WINDOWS共享目录. 如果要访问Netware卷, 就选上"NCP .....".
  
  出来以后是 Console drivers, 可以不管它.
  然后是 Sound...这一块东西很多, 实在没力气一一写下来. 不过有几个建议:
  1. 能用OSS驱动还是用OSS驱动, 又方便, 支持的卡也多;
  2. 如果用OSS驱动, 在SOUND里就不要选任何东西;
  3. OSS不支持的卡(如ALS007), 才在核心里想办法. 可以参考上面我POST的"ALS007发声经过".
  4. OSS指Open Sound System, 是 4 Front Tech 的商业产品, 在16.8上可以找得到, 但有时间限制. 某高人作了工作将其注册, 大家自己下载了回去研究. 核心里的那个"OSS sound modules(NEW)" 只是OSS的一部分. 我也用过这个来驱动YAMAHA 719卡.
  
  Kernel hacking: 不管它啦......
  
  好了, 全部设完了, 选EXIT退出来, 问是否保存修改时答YES.
  然后会有一些提示. 如果看到了有叫你"make dep", 就一定要打"make dep"先.
  完了后就打 make bzImage. 如果提示信息中没有叫你"make dep", 只有叫你
  "make zImage", "make zdisk" 或 "make zlilo" 的, 就直接打 make bzImage 就行了.
  
  一点说明: make dep 是作一些准备工作, make bzImage 则是开始编译生成核心. 而
  make bzImage与make zImage的区别在于, 作成bzImage的核心压缩率比zImage高, 核心就更小一些. make zdisk 与 make zlilo 是做别的用处的核心的.
  
  然后就等吧(有得你等的). 一般从5分钟到半个钟头不等, 看你的机器了. 第一次编译会比较慢. 以后再改了配置后make就会快很多了.
  
  等这个完了后一定还要 make modules 和 make modules_install.
  
  make bzImage 完后会显示核心放在什么地方, 一般是/usr/src/linux/arch/i386/boot/
  下. 把bzImage拷到根下. 然后修改 /etc/lilo.conf, 照着原来的image = XXXXX来加上
  image = /bzImage
  root = /dev/hda1 (这里视你的LINUX安装而定, 照你原有的改)
  label = linux
  read-only
  把原来的 label = linux 改一下, 如 label = oldlinux.
  把image = /bzImage 这一节加在原来的前面, 这样会自动作为
推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
author-avatar
羚瑞聪羊奶粉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有