分类: LINUX
2009-09-24 09:46:21
注:目标系统是X86架构,所以此文并不涉及交叉编译;目标盘是DOM,所以此文不涉及固定于板子上从串口刷写BootLoader,从网线下载Kernel和FileSystem
在DOM盘上搭建一个小型Linux系统
硬件:嵌入式板子一块,PC一台,网线若干
架构: X86
CPU: PⅢ-Pentium M
内存: 128M RAM
硬盘: ATA接口 64M DOM盘
芯片: 815/852/855系列
显卡: 815/852/855 集成显卡
网卡: Intel系列
接口: 串口、PS/2、VGA、RJ45
软件:各种开源软件
一个完整的Linux系统组成如下:
引导加载程序 |
Kernel |
FileSystem |
包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。
引导加载程序是系统加电后运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统
【选择】OS BootLoader一般有LILO、GRUB等,而GRUB已经逐渐取代LILO,选择GRUB。
操作系统内核是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。下面列出了它的一些核心功能:
事件的调度和同步
进程间的通信(消息传递)
存储器管理
进程管理
输入输出例程的管理
【选择】
2.6.15
操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
包括根文件系统和建立于DOM盘之上文件系统。
Root FileSystem的基石是VFS,在这里就不多说。
【选择】根目录及配置文件自己创建,而命令由BusyBox提供。
DOM盘上的文件系统选择为EXT3
DOM大小为64M,分成两个区,一个给BOOT(10M),一个给其他(剩下的大小)。这样做有一个好处,就是根文件系统即使损坏了,不用再装一遍GRUB。
把DOM盘挂接到PC上,进入Linux系统,可以用
$cat /proc/partitions
或者
$fdisk –l
查看新硬盘是否被系统识别,在我的机器上识别为
sdb
在Linux下用cfdisk 或者fdisk来完成,这里就不多说
$mke2fs –j /dev/sdb1
$mke2fs –j /deb/sdb2
$mkdir /mnt/fakeboot
$mkdir /mnt/fakeroot
$mount /dev/sdb1 /mnt/fakeroot
$mount /dev/sdb2 /mnt/fakeboot
可以开机自动挂载,省去一些麻烦,编辑/etc/fstab,添加如下条目:
/dev/sdb1 /mnt/fakeboot ext3 defaults 0 0
/dev/sdb2 /mnt/fakeroot ext3 defaults 0 0
$mount -a
$mount /dev/sdb /boot
$grub-install /dev/sdb
可以看到GRUB已经成功安装到/dev/sdb这个磁盘上
主要是编写menu.lst,将其拷贝到
$cp /boot/grub/menu.lst /mnt/fakeboot/grub
在文件中添加:
title GUN/Linux Debian(2.6.25-6-686--DISK--)
root (hd0,0)
kernel /vmlinuz-2.6.25-6-686 ro root=/dev/sdb2
initrd /initrd.img-2.6.25-6-686
为了测试GRUB是否正常工作,可以将PC上的vmlinuz和initrd.img拷贝到/mnt/fakeroot下,重启,工作正常。
【注】如果需要GRUB启动原有Linux系统和XP,需要修改menu.lst,对于其他Linux系统,修改root一行,将root (hd0, X),修改成root (hd1, X);对于XP
rootnoverify (hd1,0)
chainloader (hd1,0)+1
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
boot
至于原因就不多说
这样就可以用/dev/sdb上的GRUB启动PC上的任何系统,当然DOM盘上的系统还没用完全搭建起来,但可以看到GRUB可以把引导权利交给了内核,由内核完成引导
至此,GRUB安装成功!
【原则】:
尽量将嵌入式板子没有的硬件选项都去掉,节省内核空间
【步骤】
下载2.6.15内核,解压
$make
menuconfig
# 定制
$make
$make modules_install
$mkinitramfs –o /mnt/fakeboot/initrd.img-2.6.15 2.6.15
$rm /mnt/fakeboot/initrd.img-2.6.25-6-686
$rm /mnt/fakeboot/vmlinuz-2.6.25-6.686
$cp $(PATH-TO-KERNEL2.6.15)/arch/i386/boot/bzImage /mnt/fakeboot/vmlinuz-2.6. 15
修改/mnt/fakeboot/grub/menu.lst
title MiniLinux (2.6.15--DOM--)
root (hd0,0)
kernel /vmlinuz-2.6.15 ro root=/dev/sdb2
initrd /initrd.img-2.6.15
创建最基本的目录
$cd /mnt/fakeroot
$mkdir etc root sbin bin initrd proc sys lib var dev usr home boot
拷贝几个重要文件
$cd /dev
$cp –dpR console null sda* sdb* tty0 tty1 tty2 ram* /mnt/fakeroot/dev
/dev文件的缺少会造成无法启动,报出一些奇怪的错误
【/etc/inittab】
::sysinit:/etc/init.d/rcS
::respawn:/sbin/getty 38400 tty1
::respawn:/sbin/getty 38400 tty2
tty2::respawn:-/bin/ash
tty2::askfirst:-/bin/ash
::ctrlaltdel:/bin/umount -a -r
::restart:/bin/init
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff –a
【/etc/fstab】
/dev/hdc2 / ext3 defaults 0 0
/dev/hdc1 /boot ext3 defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
【/etc/init.d/rc.S】
#! /bin/ash
export PATH=/sbin:/bin:/usr/bin:/usr/sbin
mount -n -t proc none /proc
mount -n -o remount,rw /
mount -n -o remount,rw -t proc none /proc
ifconfig eth0 192.168.2.1
ifconfig eth1 192.168.1.11
ifconfig eth2 192.168.3.1
route add default gw 192.168.1.1 netmask 0.0.0.0 dev eth1
echo “--------------------------------------------------------------------------“
echo "-------------Welcome To Li Cong’s Linux System-------------"
echo “--------------------------------------------------------------------------“
这里注意的是应该把rc.S的默认权限该为777,从而任何用户都可以执行
$chmod 777 /etc/init.d/rc.S
【/etc/passwd /etc/shadow /etc/group /etc/gshadow】
这几个文件可以从原DOM盘上拷贝过来,但注意把root密码清空,同时把root的登录SHELL改成/bin/ash
由于原始的/目录下子目录包含的可执行程序,相关的动态库以及配置文件都比较大(远远超过一个DOM 盘的64M 空间),所以我们自然而然应该去寻找一个占据较小空间但是又能替代Linux 的命令集的程序组,这就是BusyBox。BusyBox的最新版本是1.11.1,这个版本的BusyBox自带了tinyLogin。
【busybox】
$tar xjvf busybox-1.11.1.tar.bz2
$cd busybox-1.11.1
$make menuconfig
选择时要注意几项:
Build Options --->
中将
[*] Build BusyBox as a static binary (no shared libs)
选上
Installation Options --->
中将
[*] Don't use /usr
选上,其它的自己选择,
不过常见的命令都要选上哦,还有init 进程和ash。
同时在这个版本可以在make menuconfig选项中指定安装目录,可以写成/mnt/fakeroot
$make
$make install
可以看到在/mnt/fakeroot/bin和/mnt/fakeroot/sbin下生成了常用命令集。
【注:】这是在PC上已经可以从DOM盘上启动,也能进入定制的系统。
【/boot/grub/menu.lst】
NetST上只有一个DOM盘,没有其他系统,所以可以把其他系统显示的菜单都去掉,只留下自己制作的系统,同时进行如下修改:
title MiniLinux (2.6.15--DOM--)
root (hd0,0)
kernel /vmlinuz-2.6.15 ro root=/dev/hda2
initrd /initrd.img-2.6.15
【/etc/fstab】
/dev/hda2 / ext3 defaults 0 0
/dev/hda1 /boot ext3 defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
从GRUB进入内核,内核启动完后,会出现提示如下:
(none)login:
的提示符,敲入root,回车即可以看到
Login[2215]:root login on ‘tty1’
~ #
【注:】至此,这个MiniLinux系统搭建完成。