免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1089 | 回复: 0
打印 上一主题 下一主题

How to construct a Linux system on a small disk [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-24 09:46 |只看该作者 |倒序浏览

                                                                               
       
       
       
       
       
       
注:目标系统是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
软件:各种开源软件
一、Building a
MiniLinux on a 64M DOM
1、基础知识与软件选择
一个完整的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。
【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上的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安装成功!
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系统搭建完成。
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/98692/showart_2058979.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP