天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧系统 >> 正文

BabyLinux操作系统的制作过程(下)

2008-4-8ChinaITLab佚名

  接下来的Charcter devices是很重要的一项,他和Bloack devices一样重要,我将重点讲述。

  除了Virtual terminal和Support for console on terminal两项,其他全选N。Virtual terminal 即虚拟终端,这是一般Linux必备选项。否则你的Linux启动后,在屏幕看不到任何东西。另外还负责键盘输入信息等等。只有在某些嵌入式Linux应用场合才会不要这个选项,因为这些Linux通常都不用操作。 Support for console on terminal 在虚拟终端上的控制台。他支持在终端上各种信息的输出,这也是必备的。接下来的几个大项:

  Multimedia devices
Crypto Hardware support

  全部选择N。

  再接下来的那部分File sytems可是重头戏喔。这部分不用我太罗嗦了吧,自己需要支持什么就选什么。但是其中有三个是你必需选的:

  /proc file system support 缺了他,很多命令和软件就不能运行。

  Second extended fs support BabyLinux的基本文件系统。

  ISO 9660 CDROM filesytem support 除非你不想用光盘。

  另外,诸如磁盘限额(Quota support),Reiserfs的DEBUG模式(Enable reiserfs debug mode)

  等就不用编译进去了。这些东西意义不大,确要无端的增大内核大小。请牢记一点:编译出来的内核大小不要超过900K。 最后一个Console drivers,这是支持Linux在字符模式下高分辨率显示的内核模块。前面三个全部选择Y,Frame-buffer support按钮是灰色的不能选,别急,回到第一个大选项:

  Code maturity level options 选择Y,就可以激活这个按钮了。

  下面几个选项需要选择Y:

  Support for framebuffer devices
VESA VGA graphics console

  你也可以选择其他的显卡驱动,比如nVidia的,但是VESA和VGA是通用性最好的,只要不是几十年前的黑白显卡(我只听说过,没见过),都兼容VESA和VGA,因此,为了制作好的BabyLinux的通用性,请选择这个驱动。

  Support only 8 pixels wide fonts,这个一定要选,否当你给内核传递vga=788参数,让Linux在字符界面下高分辨率显示的时候,系统会因为找不到合适的小字体而返回到低分辨率模式。 好了!所有内核的配置工作到这里就全部完成了,剩下的几个大项全部选N就行了。保存后退出,配置程序会自动生成一个隐藏的配置文件。config 下面是我配置好的。config文件内容。如果你懒的自己去配置,那么直接把这个。config拷贝到你的源代码目录下就能直接用了。(已经去掉了#开头的注释行)

  CONFIG_X86=y
CONFIG_UID16=y
CONFIG_EXPERIMENTAL=y
CONFIG_M586=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_CMPXCHG=y
CONFIG_X86_XADD=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_X86_L1_CACHE_SHIFT=5
CONFIG_X86_USE_STRING_486=y
CONFIG_X86_ALIGNMENT_16=y
CONFIG_X86_PPRO_FENCE=y
CONFIG_NOHIGHMEM=y
CONFIG_NET=y
CONFIG_PCI=y
CONFIG_PCI_GODIRECT=y
CONFIG_PCI_DIRECT=y
CONFIG_SYSVIPC=y
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
CONFIG_BINFMT_ELF=y
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_PACKET=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y
CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_IDE_MODES=y
CONFIG_NETDEVICES=y
CONFIG_NET_ETHERNET=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_REISERFS_FS=y
CONFIG_EXT3_FS=y
CONFIG_JBD=y
CONFIG_FAT_FS=y
CONFIG_VFAT_FS=y
CONFIG_RAMFS=y
CONFIG_ISO9660_FS=y
CONFIG_JFS_FS=y
CONFIG_NTFS_FS=y
CONFIG_PROC_FS=y
CONFIG_EXT2_FS=y
CONFIG_MSDOS_PARTITION=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_VGA_CONSOLE=y
CONFIG_VIDEO_SELECT=y
CONFIG_VIDEO_IGNORE_BAD_MODE=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FB_VESA=y
CONFIG_VIDEO_SELECT=y
CONFIG_FBCON_CFB8=y
CONFIG_FBCON_CFB16=y
CONFIG_FBCON_CFB24=y
CONFIG_FBCON_CFB32=y
CONFIG_FBCON_FONTWIDTH8_ONLY=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y

  5 编译内核

  #make dep
#make bzImage

  下面是最后编译结果:

  Boot sector 512 bytes
Setup is 4733 bytes
System is 845 kB
make[1]: Leaving directory `/usr/src/Linux-2.4。20-8/arch/i386/boot'

  我用上面的配置得到了一个845k的内核。编译好的内核放在/usr/src/Linux-2.4。20-8/arch/i386/boot下。将他拷贝在一个安全的地方备用。建立一个专放babyLinux材料的目录:

  #mkdir /babyLinux

  建立一个做babyLinux根文件系统的目录:

  #mkdir /babyLinux/rootfs

  备份内核:

  #cp /usr/src/Linux-2.4.20-8/arch/i386/boot/bzImage /babyLinux/

  七、编译busybox

  1 busybox简介

  busybox是一个集成了一百多个最常用Linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小。我们平时用的那些Linux命令就好比是分力式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式Linux应用中,busybox有非常广的应用,另外,大多数Linux发行版的安装程序中都有busybox的身影,安装Linux的时候案ctrl+alt+F2就能得到一个控制台,而这个控制台中的所有命令都是指向busybox的链接。

  Busybox的小身材大作用的特性,给制作一张软盘的Linux带来了及大方便。

  2 busybox的用法

  可以这样用busybox

  #busybox ls

  他的功能就相当运行ls命令。

  最常用的用法是建立指向busybox的链接,不同的链接名完成不同的功能。

  #ln -s busybox ls
#ln -s busybox rm
#ln -s busybox mkdir

  然后分别运行这三个链接:

  #./ls
#./rm
#./mkdir

  就可以分别完成了ls rm 和mkdir命令的功能。虽然他们都指向同一个可执行程序busybox。但是只要链接名不同,完成的功能就不同,busybox就是这么的神奇。很多Linux网站都提供busybox的源代码下载。目前版本是busybox1。0正式版。

  3 配置busybox

  busybox的配置程序和Linux内核菜单配置方式简直一模一样。熟悉用make menuconfig方式配置Linux内核的朋友很容易上手。

  #cp busybox-1.00.tar.gz /babyLinux
#cd /babyLinux
#tar xvfz busybox-1.00.tar.gz
#cd busybox-1.00
#make menuconfig

  下面是需要编译进busybox的功能选项,其他的可以根据需要自选,但是同样不要太贪心。

  General Configuration应该选的选项:

  Show verbose applet usage messages
Runtime SUID/SGID configuration via /etc/busybox.conf
Build Options
Build BusyBox as a static binary (no shared libs)

  这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库。否则必需要其他库文件才能运行,在单一个Linux内核不能使他正常工作。

  Installation Options
Don't use /usr

这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令。选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接。 其他选项都是一些Linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了。配置好后退出并保存。

  4 编译并安装busybox

  #make
#make install

  编译好后在busybox目录下生成子目录_install,里面的内容:

  drwxr-xr-x 2 root root 4096 11月 24 15:28 bin
lrwxrwxrwx 1 root root 11 11月 24 15:28 Linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4096 11月 24 15:28 sbin

  其中可执行文件busybox在bin目录下,其他的都是指向他的符号链接。我编译出来的busybox可执行文件是935K,加上符号链接,整个_install目录是952K。加上845K的内核不是已经超过1440K了吗?别担心,我们将对整个根文件系统做大幅度的压缩。

  八、制作根文件系统

  1 基本目录结构

  #cd /babyLinux/rootfs
#mkdir etc usr var tmp proc home root dev

  其中etc,proc和dev是一定要建的,bin和sbin不用建,因为busybox中已经有了。其他的可以象征性的建几个就可以了。拷贝busybox:

  #cp -R /babyLinux/busybox-1.00/_install/* /babyLinux/rootfs/

  2 建立设备文件名

  #cd /babyLinux/rootfs/dev

  你可以用mknod手工建立,也可以直接从原系统的/dev目录下拷贝过来。

  手工建立的方法:

  #ls -l /dev/console
crw------- 1 root root 5, 1 11月 30 09:02 /dev/console

  这样就查看到了console设备的主设备号是5,辅设备号是1,是一个标记为C的字符设备。于是,我们可以用mknod建立一个同样的设备文件:

  #mknod console c 5 1

  但是手工方法建立太麻烦了,通常直接从/dev下把需要的设备文件拷贝过来。这些设备文件是特殊文件,在拷贝时一定要加上-R参数才能拷贝。

  #cp -R /dev/console ./
#cp -R /dev/null ./
#cp -R /dev/zero ./
...

  以下是我认为需要的设备名:

  cdrom fd0 hda14 hda4 hdb11 hdb19 hdc hdc16 hdc6 hdd13 hdd3 loop2 ram2
console fd0H1440 hda15 hda5 hdb12 hdb2 hdc1 hdc17 hdc7 hdd14 hdd4 loop3 tty0
fb hda hda16 hda6 hdb13 hdb3 hdc10 hdc18 hdc8 hdd15 hdd5 loop4 tty1
fb0 hda1 hda17 hda7 hdb14 hdb4 hdc11 hdc19 hdd hdd16 hdd6 loop5 tty2
fb1 hda10 hda18 hda8 hdb15 hdb5 hdc12 hdc2 hdd1 hdd17 hdd7 null tty3
fb2 hda11 hda19 hdb hdb16 hdb6 hdc13 hdc3 hdd10 hdd18 hdd8 ram tty4
fb3 hda12 hda2 hdb1 hdb17 hdb7 hdc14 hdc4 hdd11 hdd19 initctl ram0 tty5
fb4 hda13 hda3 hdb10 hdb18 hdb8 hdc15 hdc5 hdd12 hdd2 loop1 ram1 zero

  其中,fd0,hda,ram,ram1,tty1,null,zero,loop1,fb0,fb等是必备的。其它的hda,hda1,hdb等可以根据实际需要决定。但是上表中的选择是比较合理的,即能满足大部分的需要,有没有不用的设备浪费空间。注意,千万不要把/dev下的设备全拷贝过来,那将产生大约420K的/dev目录,这对babyLinux来说太大了。

  3 建立etc目录下的配置文件

  busybox.conf group inittab motd passwd resolv.conf shadow-
fstab init.d issue mtab profile shadow

  其中init。d是一个目录,从busybox-1。00源代码目录下拷贝过来。

  #cp -R /babyLinux/busybox-1.00/examples/bootflopyp
/etc/init.d /babyLinux/rootfs/etc/

  Busybox.conf是一个空文件。其他文件的内容如下:

  fstab
/dev/fd0 / ext2 defaults 0 0
none /proc proc defaults 0 0
/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
group
root:x:0:root
inittab
::sysinit:/etc/init.d/rcS
:first:/bin/sh
tty2::respawn:/bin/getty 38400 tty2
tty3::respawn:/bin/getty 38400 tty3
tty4::respawn:/bin/getty 38400 tty4
# Stuff to do when restarting the init process
::restart:/bin/init
# Stuff to do before rebooting
::ctrlaltdel:/bin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/bin/swapoff -a
issue
Baby Linux release 0.1
motd
mtab
passwd
root::0:0:root:/root:/bin/ash
profile
# /etc/profile: system-wide .profile file for the Bourne shells
echo
echo
export PS1="[\u@\h \w]\$"
echo "Done"
alias ll='ls -l'
alias du='du -h'
alias df='df -h'
alias rm='rm -i'
echo
resolv.conf
nameserver 202.96.209.5
nameserver 202.96.209.6
shadow
root:$1$$adltAB9Sr/MSKqylIvSJT/:12705:0:99999:7:::
shadow-
root:$1$DWU.tenP$B7ANiXoGoiZMwJR6Ih8810:12705:0:99999:7:::

其中有很多是从原系统的/etc下拷贝过来修改的,如果你是一个具有中等以上水平的Linux爱好者,那么应该一看就明白了,当然,你也可以根据自己的需要修改这些文件。其中最重要的是fstab和inittab,busybox内建的init程序用到的inittab文件的语法和一般的不一样,不能直接把原系统/etc下inittab文件拷贝过来。可以把busybox-1.00目录下的示例文件拷贝过来修改用。具体请看busybox的文档。busybox的init也可以不用inittab。但是在我制作babyLinux过程中有一个非常奇怪的bug。所有/sbin下的busybox链接在做成压缩的根文件系统,解压后都不能正常运行,显示找不到该命令。只有当我在/bin下做这些链接时才能运行。具体原因还不太清除,所以你需要做下面的工作:

  #cd /babyLinux/rootfs/sbin
#ls
chroot getty ifconfig losetup pivot_root reboot swapoff sysctl
fdisk halt init mkswap poweroff route swapon telnetd

  查看到sbin下有上述链接,转到bin下:

  #cd /babyLinux/rootfs/bin

  重新做这些链接:

  #ln -s busybox chroot
#ln -s busybox getty
#ln -s busybox ifconfig

  然后把sbin下的链接删除,以节省空间:

  #rm -rf /babyLinux/rootfs/sbin/*

  再把原先inittab中所有的sbin改成bin ,Init.d下的文件:rcS。请确保这个文件是可执行的,否则请改成可执行的:

  #chmod u+x rcS

  rcS的内容:

  #! /bin/sh
mount -o remount,rw /
/bin/mount -a
>/etc/mtab
echo
echo
echo
echo
echo -en "\t\tWelcom to \\033[0;32mBabyLinux\\033[0;39m\n"
echo -en "\\033[0;36m\n"
echo
echo -en "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\t\t\n"
echo -en "+ This is a tiny Linux system based on a floppy.It contains \t\t\n"
echo -en "+ more than 100 basic Linux commands and tools.The kernel of \t\t\n"
echo -en "+ this tiny system support all kinds of normal filesystems. \t\t\n"
echo -en "+ Linux ext2,ext3,jfs,reiserfs and Windows fat,vfat,ntfs[readonly]\t\t\n"
echo -en "+ is supported! So it is a powerful small system you can use it \t\t\n"
echo -en "+ as a Linux and Windows rescue disk.Beside this,the kernel also\t\t\n"
echo -en "+ contains the drivers of Reltek8139,NE2000,via-rhine ethernet\t\t\n"
echo -en "+ adpater. you can configure the IPaddress and netmask with tools\t\t\n"
echo -en "+ 'ifconfig' and config the default gateway with command 'route'. \t\t\n"
echo -en "+ Is there anything else? Haha,this is a telnet server build-in\t\t\n"
echo -en "+ you can type 'telnetd' to startd it and thus your friends can\t\t\n"
echo -en "+ logon to your system to help you solve the problem.\t\t\n"
echo -en "+ \\033[0;32mAll these great features
are powered by BusyBox 1.0\\033[0;36m\t\t\n"
echo -en "+ This is a free system tool developed by GuCuiwen.\t\t\n"
echo -en "+ RUN YOUR OWN RISK of using it ! if you have any problem please\t\t\n"
echo -en "+ mailto : win2Linux@163.com Enjoy!!\t\t\n"
echo -en "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\t\t\n"
echo -en "\\033[0;39m\n"
hostname BabyLinux

  可以自己作相应的修改。

  以上是babyLinux根文件系统的所有内容,他的总大小应该在1M左右。

  我还计划做一个live CD,但是目前已经有很多live CD了,而且都做的非常好。但是我会自己做一个作为学习Linux的一种手段。如果有时间,可能写一个做U盘Linux和live CD的教程。但是,我想不会写的和这个文档一样详细了,我的时间有限。可能大概讲一下原理和步骤。有经验的Linux爱好者应该可以通过阅读文档完成制作。

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛https://bbs.txwb.com

关注天下网吧微信,了解网吧网咖经营管理,安装维护:


本文来源:ChinaITLab 作者:佚名

声明
本文来源地址:0
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系Email:support@txwb.com.,本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行