您的位置:首页 > 运维架构 > Linux

古老编程环境展——LFS Linux篇

2016-04-09 21:18 381 查看
       “古老”打了个引号,因为linux的历史源于1991年,根本不算古老,更何况本座懒得很,linux 1.0以下的不成熟内核,除非用boches,还得做很多的修改,否则很难在vmware上顺利的跑起来,所以内核只做到比较成熟的1.2(1995年)。最重要的是,连最新的linux 3.4内核都有。


 
     而且吧,这个帖子是以内核为主线,“开发环境”体现的不突出,或者说unix like操作系统本身就是个开发环境,本来就不需要再装什么东西

我做出收集全系列操作系统虚拟机决定的时候,linux是最头疼的,发行版太多。还好,有LFS,这个完全定制的linux,我是个洁癖,对于有软件包管理的发行版上“编译安装软件”一直持反对态度,而LFS,反正一切都是我自己编译的,那我编译安装更多的东西也没什么丑陋的。

进入正题

 
     说明,LFS最低版本1.x,但我发现我还能往下移植内核,就擅自用了0.x的版本号

LFS 6.5之后才有64位,之前的64位版本我是参照6.5之后的做的,实际上我做的时候,尽量按新的教程
软件包不一定完全按照LFS文档,我希望能让软件的跨度更漂亮些,也能尽量使用软件包更高的bugfix版本

“-”链接的内核、软件包表示连续版本,跨度之内的都安装了,“,”表示非连续的,如2.6.27.62,2.6.16.62-2.6.4,就表示2.6.4到2.6.16所有的都装了,外加一个2.6.27
 
     当时做的时候,为增加挑战性,也为了能更深的理解一些技术的变化,我是用的是“向下移植”(Backport)的方式,即用新的内核和gcc制作LFS,再往前移植内核,按需安装旧的binutils和gcc

硬件我尽量选新的,vmware 7.x的硬盘控制器有LSISAS SCSI、LSI SCSI、BUSLOGIC、IDE四种,声卡有ES1371、Sound Blaster 16两种,网卡不算vmware tools的vmxnet,有Intel PRO/1000和AMD PCNET32两种,尽量选新的,好的
首先是一张表格



 
     时间已经过去几个月,有些细节我可能记不清了,我之前发过LFS的教程,里面有一些东西可以参考。
LFS 7.1这个版本的gcc和binutils比较特殊,我把能正常编译的都装了……其他版本都是按需安装的(某些内核和软件包需要)

这篇可能没有windows那篇好看,因为我只装了基础软件包,有些千篇一律

LFS 7.1
 
     grub启动界面,3.4.2-2.6.32.59
 
     向下移植的主要限制:udev版本要求,ext4文件系统,2.6.32以下内核udev造成启动失败,降点udev版本的话能做到2.6.28,但2.6.28和2.6.29的ext4是很不可靠的,如果用ext3和更低版本的udev,还可以向下移植,但内核的跨度并不是我的追求,我尽量让内核运行在能充分发挥特性的环境。
该版本我用3.2内核做的,2.6.32-3.2都很完美,但3.3、3.4内核,umount经常阻塞住,也不知道为什么,更新了E2fsprogs和Util-linux也不行
grub2背景从Debian上找的,vesafb和uvesafb的差别在于vesafb是内建的,初始状态即生效,能看到企鹅的logo,uvesafb得等到模块载入后才有高分辨率
 
     vmware-compact是我定制的最简化内核,没有一个多余的模块,完全匹配vmware;debian-xxx包括以后还会出现rhel、rh,是直接用的著名发行版的内核配置,通用性好,当然,里面scsi、ext4的驱动调整为内建了,否则得有个initrd,以前这么搞过,很烦人
一些内核不能用gcc 4.6.3,我在帖子最后会赋上所有内核所使用的gcc版本,对于老内核,你可理解为这是不改代码所能够使用的最高版本
我也充分体验到了bugfix不高的内核是多么的不靠谱,比如2.6.36.4,连xen支持(Debian默认打开)的代码有问题,build失败,这个问题从2.6.28就有,一直持续了多个内核,诸如2.6.28、2.6.29、2.6.30、2.6.36、2.6.37、2.6.38都出现过一些小问题,能定位到的就解决,要么就算了,还是2.6.32最稳定,3.0、3.2内核有望接班,貌似Debian Wheezy就打算用3.2吧





 
     vesafb启动界面,3.0.34内核,企鹅数量代表cpu内核数,因为我用的是1366x768的高分辨率,右边一块就牺牲掉了,反正我做LFS的原则是保证任意版本内核启动时,已安装的所有服务都得成功,所以都是绿色的[ok]啦



一些基础软件包



 
     vim,感谢linux区zmlovelx (帅得不敢出门群31843264)提供的扩展包



下面几个版本就不截那么多图了,因为都差不多

LFS 6.6
 
     内核2.6.32.59-2.6.16.62,主要限制:udev,如果用低版本udev,应该可以做2.6的全系列,而且2.6.32这个目前企业级Linux普遍使用的长期支持板可运行,基本上3.x也没问题,向上移植和向下移植难度是完全不同的,你如果追求高跨度,不装udev,以2.4内核为基础做LFS,一直装到3.x应该都可以,但这样的话2.6/3.x内核牺牲太大了
这个版本内核编译的情况比较复杂,经常得换gcc版本或者得改一些代码,不过linux内核的编译,我单一一次改的代码一般都只有几行,十几行,更多的是Makefile、一些脚本的修改,没有大动的,我也没这个能力,学生一个,老板的项目都是windows的。而且,相对于2.6.32以上内核的成熟,2.6.2x内核特性变化也比较大,一些驱动的支持变化,特性的变化,为了能够让所有内核都能完美跑起来(所有服务都成功,不同内核系统时间不能乱,都支持大分辨率等等等等),这个版本花了我最多的时间

 
     这个grub 1.98和Debian Stable上那个稳定的移植了许多1.99特性的grub不是一个概念,我被迫找了一些补丁(Gentoo/Debian/Redhat是我许多补丁和老软件包的来源),才解决调包括引导内核、分辨率、背景图像等一系列bug





 
     最低的2.6.16内核启动,你会发现启动时的计时是不准的,我可没花1000多秒来启动,差了100倍



LFS 6.3
 
     内核2.6.27.62,2.6.16.62-2.6.4,2.6.27能跑,2.6.3x一般都能跑,我说过了我不追求跨度
这个版本我装了两个udev,正好有两个版本的udev文件名基本全不一样,装一个目录都不冲突……,2.6.1x是udev逐渐走向成熟的时期,特性变化很大
 
     2.6.4以下内核,x86-64引导代码有问题,不认CPU,我就没改了,2.6.8以下内核各种问题,换gcc+改内核包的一些脚本基本能解决,印象中没直接改C源文件,但我用binutils版本太高,当时做的时候没有去编译低版本binutils,而是打了内核的汇编格式补丁解决了一些汇编代码问题





 
     2.6.11.12内核,我自己写的cleandisk脚本(调用dd),给磁盘剩余空间清零,方便vmware压缩磁盘(所有LFS都没装vmware tools),这个内核无论启动速度,还是I/O速度,比起前两个高版本都差得远,不过这个几百M的I/O速度是因为写全0文件造成的(这时候vmware不会真的去写磁盘),不是真的磁盘速度啦,高版本linux能飚到1G多呢



LFS 6.1.1
 
     内核2.6.16.62,2.4.37.11-2.4.26,这是一个难关了,2.4和2.6跨了大版本,而且我还是向下移植(用2.6.16做的LFS),不同于2.6和3.0,2.4和2.6之间的差别是非常大的,2.4不支持udev,glibc不能用nptl、kernel modules工具的问题……处处得小心,不过我运气好加上事先查的资料多,没犯大错误,一次成功,主要的向下移植限制是x86-64的启动代码,2.4.25以下有问题,2.4.20以下就不支持x64了
另外,linux 2.4不能用gcc 4.x编译



 
     2.4.37.11内核下的SCSI硬盘设备节点,没有udev的后果就是这样,我哪有那么多硬盘和分区,2.6有udev,/dev是动态的,2.4的/dev是静态的,用一个脚本预先生成的,所以有不存在的设备,rhel 3、rh 9他们为了通用性,更夸张,预生成了好几百个硬盘节点



LFS 5.1.1
 
     内核2.4.37.11,2.4.27,2.4.25-2.4.24,2.4.22-2.4.16,纯粹的2.4版本了,grub也用的是1代0.97,我没研究过grub0.97怎么调初始分辨率和背景,反正2.4内核的分辨率我调上去了
主要向下移植限制:LSI SCSI驱动,2.4.20以下版本已经不靠谱了,我拿2.4.20的驱动替换的内核版本一些空洞的存在是因为这个版本只是非常小的bugfix,2,4以下版本不像2.6那样滚动开发,所以这种情况以后会越来越多,我基本是对着kernel.org的列表,看补丁和changelog大小,太小的内核的前一个版本就略过
 
     2.4内核包括一些低版本的2.6内核改附加字符串得直接改Makefile,安装的时候也要改文件名,我改疯了,最后写了个安装脚本,看来内核开发者应该也改疯了,才在2.6内核加入这个配置功能吧



 
     grub 0.97的menu.lst,不想grub2有脚本可以自动认内核,0.97得自行编辑menu.lst,Debian 5的grub 0.97是移植了grub2的特性的,不能比,从这里开始,我真正学会了vim,之前我一直对vim敬而远之,但是编写这种文件,不会用vim会死人的



LFS 4.1
 
     内核,剩余的2.4版本2.4.33.7,2.4.20,2.4.14-2.4.12,2.4.10-2.4.5
 
     这个版本换了Buslogic的scsi,我以前有个跟帖应该是记错了,不是2.4的buslogic发现了bug,而是2.0.x的。



 
     2.4内核的自动模块载入都是有问题的,写了个启动脚本,其实我每个LFS版本都有一个类似的脚本,主要是用与特性不同内核的兼容



LFS 3.3
 
     内核2.4.21,2.4.18,2.2.26-2.2.25,2.2.23-2.2.17,2.2与2.4的差别没有2.4和2.6大,这个跨版本比较简单,移植到2.2.17以下没有什么限制,只是我做到现在,想把每个LFS的内核规模控制在10个左右,这样我就能体验更多版本的软件包和LFS的乐趣



 
     总体来说这个版本是最顺利的,我的经验比较足了,2.2内核编译起来也快
 
     2.2.26内核,也是支持高分辨率的(图截了左边一半)



LFS 2.4.4
 
     内核2.2.26,2.2.16-2.2.10,2.2.8-2.2.6,主要包含低版本2.2,2.2内核许linux老鸟应该都没用过,2000年之前的东西,那时候接触linux的人很少



 
     2.2.10内核下我保存的内核包,一个绿色脚本就是为了附加字符串做的自动安装脚本,写的很烂,不敢给人看



LFS 1.3
 
     内核2.2.20,2.0.40-2.0.38,2.0.36-2.0.33,2.0.30-2.0.29,2.0.27,中古时期的2.0内核



 
     vesafb驱动没有了,分辨率640x480……egcs,是gcc发展过程中的一个分支,egcs后来取代了传统的gcc代码树,成为官方版本,即gcc 2.95,从那以后,gcc开始成为能与商业编译器抗衡的大牛项目,当然egcs不能用来编译2.0内核……不过LFS 1.3的其他软件包都是他编译的



LFS 0.9(不是真正的LFS版本)
 
     内核2.0.40,2.0.36,2.0.30,2.0.25,2.0.20,2.0.10,收录了几个2.0版本,用了更古老一些的软件包,没什么特色


 
     这个版本是最后一个使用elf可执行文件格式的,下一个版本就是传统的unix a.out格式了



LFS 0.5(不是真正的LFS版本)
 
     内核1.2.13,1.2.11,1.2.9,不大改内核源代码,我目前的水平只能做到1.2
看了那么多次grub,审美疲劳,总该让lilo出场一次吧



 
     用linux的老鸟们,有几个用过这个版本呢?



 
     再往下我就没做了,1.0内核我试了换gcc、as、ld,编译出来的内核是坏的
http://www.oldlinux.org/index_cn.html 这个网站有人家改好并跑起来的linux 0.11等老版本虚拟机,有boches的,也有vmware的

最后是内核和匹配gcc版本清单
内核版本   gcc版本
3.2.19     4.6.3
3.1.10     4.6.3
3.0.34     4.6.3
2.6.39.4   4.6.3
2.6.38.8   4.6.3
2.6.37.6   4.5.3
2.6.36.4   4.5.3
2.6.35.14  4.6.3
2.6.34.12  4.6.3
2.6.33.20  4.6.3
2.6.32.59  4.6.3
2.6.31.14  4.4.6
2.6.30.10  4.4.6
2.6.29.6   4.4.6
2.6.28.10  4.4.6
2.6.27.62  4.4.6
2.6.26.8   4.4.6
2.6.25.20  4.4.6
2.6.24.7   4.3.6
2.6.23.17  4.3.6
2.6.22.19  4.3.6
2.6.21.7   4.3.6
2.6.20.21  4.3.6
2.6.19.7   4.3.6
2.6.18.8   4.3.6
2.6.17.14  4.3.6
2.6.16.62  4.2.4
2.6.15.7   4.2.4
2.6.14.7   4.2.4
2.6.13.5   4.2.4
2.6.12.6   4.2.4
2.6.11.12  3.4.6
2.6.10     3.4.6
2.6.9      3.4.6
2.6.8.1    3.4.6
2.6.7      3.4.6
2.6.6      3.3.6
2.6.5      3.3.6
2.6.4      3.3.6

2.4.37.11  3.4.6
2.4.36.9   3.4.6
2.4.35.5   3.4.6
2.4.34.6   3.4.6
2.4.33.7   3.4.6
2.4.32     3.4.6
2.4.31     3.4.6
2.4.30     3.4.6
2.4.29     3.4.6
2.4.28     3.3.6
2.4.27     3.3.6
2.4.26     3.3.6
2.4.25     3.3.6
2.4.24     3.3.6
2.4.22     3.3.6
2.4.21     3.3.6
2.4.20     3.2.3
2.4.19     3.2.3
2.4.18     3.2.3
2.4.17     2.95.3
2.4.16     2.95.3
2.4.14     2.95.3
2.4.13     2.95.3
2.4.12     2.95.3
2.4.10     2.95.3
2.4.9      2.95.3
2.4.8      2.95.3
2.4.7      2.95.3
2.4.6      2.95.3
2.4.5      2.95.3

2.2.26     2.95.3
2.2.25     2.95.3
2.2.23     2.95.3
2.2.22     2.95.3
2.2.21     2.95.3
2.2.20     2.95.3
2.2.19     2.95.3
2.2.18     2.95.3
2.2.17     2.95.3
2.2.16     2.95.3
2.2.15     2.95.3
2.2.14     2.95.3
2.2.13     2.95.3
2.2.12     2.95.3
2.2.11     2.95.3
2.2.10     2.95.3
2.2.8      2.95.3
2.2.7      2.95.3
2.2.6      2.95.3

2.0.40     2.7.2.3
2.0.39     2.7.2.3
2.0.38     2.7.2.3
2.0.36     2.7.2.3
2.0.35     2.7.2.3
2.0.34     2.7.2.3
2.0.33     2.7.2.3
2.0.30     2.7.2.3
2.0.29     2.7.2.3
2.0.27     2.7.2.3
2.0.25     2.7.2.3
2.0.20     2.7.2.3
2.0.10     2.7.2.3

1.2.13     2.6.3
1.2.11     2.6.3
1.2.9      2.6.3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: