Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316654
  • 博文数量: 79
  • 博客积分: 1480
  • 博客等级: 上尉
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-11 15:29
文章分类

全部博文(79)

文章存档

2012年(1)

2011年(5)

2010年(19)

2009年(54)

我的朋友

分类: 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/2VGA、RJ45

软件:各种开源软件


一、Building a MiniLinux on a 64M DOM

1、基础知识与软件选择

一个完整的Linux系统组成如下:

引导加载程序

Kernel

FileSystem

【引导加载程序】

包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。

引导加载程序是系统加电后运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILOGRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoaderBootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统

【选择】OS BootLoader一般有LILOGRUB等,而GRUB已经逐渐取代LILO,选择GRUB

【Kernel】

操作系统内核是指大多数操作系统的核心部分。它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。操作系统内核通常运行进程,并提供进程间的通信。下面列出了它的一些核心功能:

事件的调度和同步

进程间的通信(消息传递)

存储器管理

进程管理

输入输出例程的管理

【选择】

2.6.15

【FileSystem】

操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

包括根文件系统和建立于DOM盘之上文件系统。

Root FileSystem的基石是VFS,在这里就不多说。

【选择】根目录及配置文件自己创建,而命令由BusyBox提供。

DOM盘上的文件系统选择为EXT3

2、在DOM盘上划分分区

DOM大小为64M,分成两个区,一个给BOOT(10M),一个给其他(剩下的大小)。这样做有一个好处,就是根文件系统即使损坏了,不用再装一遍GRUB

【识别】

DOM盘挂接到PC上,进入Linux系统,可以用

$cat /proc/partitions

或者

$fdisk –l

查看新硬盘是否被系统识别,在我的机器上识别为

sdb

【格式化】

Linux下用cfdisk 或者fdisk来完成,这里就不多说

【EXT3】

$mke2fs –j /dev/sdb1

$mke2fs –j /deb/sdb2

3、安装GRUB

【挂载】

$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上的vmlinuzinitrd.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安装成功!

4、安装Kernel

【定制】

【原则】:

尽量将嵌入式板子没有的硬件选项都去掉,节省内核空间

【步骤】

下载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


5、安装根文件系统

【基本目录】

创建最基本的目录

$cd /mnt/fakeroot

$mkdir etc root sbin bin initrd proc sys lib var dev usr home boot

【/dev】

拷贝几个重要文件

$cd /dev

$cp –dpR console null sda* sdb* tty0 tty1 tty2 ram* /mnt/fakeroot/dev

/dev文件的缺少会造成无法启动,报出一些奇怪的错误

【/etc】

【/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

【/bin /sbin】

由于原始的/目录下子目录包含的可执行程序,相关的动态库以及配置文件都比较大(远远超过一个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盘上启动,也能进入定制的系统。


6、把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系统搭建完成。

阅读(1261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~