在2020年寻求Floppy-Linux是否搞错了什么

如果我有罪,应该让警察叔叔来抓我,而不是让我在2020年去编译一个可以塞进软盘里的Linux.

—我 自己说的

某课程在GCC命令的课后练习中的作业是编译一个可启动的以BusyBox为内核的在软盘上启动的Linux,(即所谓的FloppyLinux,本世纪初某些爱好者的小玩具,用来炫耀Linux的高度可定制性,与当前的Windows To Go高度相似且都具有极度羸弱的性能),因为Grub并不识别我挂载Loop设备作为软盘镜像,所以我只能用虚拟机虚拟一个软盘设备,才勉强成功.整个过程花费了好几天的时间,总结下写在下面.

  1. 实际上借助Makefile,编译反而是整个过程中最简单的部分,难点在于配置环境.由于软盘的大小不过是1.44M,但是比较新的内核很难剪裁到这种程度,因此教程推荐了 2.4.20版本.但是问题在于较老的Linux版本使用了很多过时的C语法并动态依赖了很多硬件相关头文件,导致在gcc4及以上版本不能编译通过,即使降级到gcc3,也会因为一些动态依赖库的问题而失败.
  2. Floppy-Linux的教程要求利用系统自身的grub完成配置,且要求版本为grub legacy

在得出这些经验的过程中,我先后实验了Ubuntu 20.10 / CentOS 6.5 /CentOS 5.6,最后的选择是Red Hat 2.4,(发行于2003年,NMD

在这种中古平台上操作有很多不便,比如系统的DHCP功能不能在虚拟机中正确使用需要手动指定IP信息,系统不内置yum在线包管理器,只能靠rpm管理….可想而知这种版本的Linux内核再精简的用户体验.

编译过程中仍然出现了几个Bug,例如在勾选了I2C驱动后会编译失败,Google得知是内核版本Bug,还有勾选了Network File System后如果未勾选网络也会失败(好像可以理解),跳过之后便完成了Floppy的编译.

一点个性化

  1. BusyBox 默认的终端是ash,在作为login shell时会读取用户目录下的.profile/etc/profile,但是作为FloppyLinux,默认是以non-login的模式启动的,在inittab中,BusyBox通过::askfirst=-/bin/ash配置项跳过登录程序,先行执行终端ash.因此我们向ash传递--login参数来使ash进入login shell 模式.
  2. ash通过读取PS1变量的内容来设置命令行提示符(即#或$),可以在profile文件中更改.
  3. 通过echo可以输出字符画,甚至支持8位颜色.
tag(s): none
show comments · back · home
Edit with markdown