Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119715
  • 博文数量: 41
  • 博客积分: 984
  • 博客等级: 军士长
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-12 09:57
文章分类

全部博文(41)

文章存档

2010年(41)

分类:

2010-05-17 16:53:54

第一次编译linux,学到东西是一定的!

从头开始编译是一个过程花费了三天时间,除去重复命令输入的无味,以及对编译过程error出错的担心,把系统成功运行起来还算欣慰。

在一台祼机上,自己编译个性的linux,确实觉得有点意思。

拿到一张LFS 6.2-5的LiveCD,借助其系统,以及光盘上提供的安装软件包,还有一份详细的安装文档,打造自己的linux系统就这么开始了,呵呵。。。

开始总是艰难的!
一是对编译系统没有一个完整的概念,二是对linux的了解有一定局限。

启动CD后,最开始要做的便是,修改主机硬盘的分区,一个完整的linux系统,怎么能少了root分区和swap分区。

根据磁盘类型进行分区:
fdisk /dev/hda    --IDE
分区后,重启后再格式化分区为ext3格式。mkfs.ext3 /dev/hda[x]

在linux系统上,对其它磁盘的访问,不像win那样直接在命令行下敲盘符就行,linux上对分区的定义是以文件的形式来管理的,不管分区多大,多小 也只是根目录下的一个文件,一旦看成是文件了,那么使用cd命令就可以轻松切换了。

借助的CD上的系统,把不同文件,作为本地文件来处理,就需要使用mount进行挂载了。
在CD系统上建立文件/mnt/lfs作为新系统的根目录的挂载点。
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS

注意:
mount命令加载的分区在重新启动后就失效了,所以在这其中重新启动则需要重新加载。
      加载必要的文件系统
  mount -vt proc proc $LFS/proc
  mount -vt sysfs sysfs $LFS/sys
  Chroot到 目标系统下
  chroot "$LFS" /tools/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin /tools/bin/bash --login +h

环境设置好了,当我们往/mnt/lfs中写入数据,实际就是写往分区hda2 中,当一个系统所需的数据编译并成功安装后,就OK了

LiveCD中lfs-sources里面所有源码包复制到$LFS/sources目录中。
cp -a /lfs-sources/* $LFS/sources

接下来的事就是按照,参考文档上的提示,从前往后一行行的输入指令。编译的过程中一定要细心,特别是在写配置文件的时候,
我一开始就把.bash_profile文件中的一个Path路径写错了,导致我在编译完gcc后,再利用编译后的gcc来编译glicb时出现库文件找 不着的错误,我想这就是gcc相就的库文件没有正确放置的问题吧,修改后还是有问题,只好重新编译,这才过去了。。。

当编译成功后,后面的安装包就顺利多了,只是命令输入的问题而已。

对内核的编译,只要前面的编译都正常通过,编译过去应该没问题,系统能不能启动就得看在make menuconfig里的设置了,起初编译过的好几次仍然是没有起来,总是提示cannot open devies root=hda,换成CD中的内核则可以正常起来....
最后,还是得高人指点,使用了Live CD中的.config文件,重新编译,终于成功...

配置网卡。。。

整个系统的完成不难,编译的目的也不在于是否编译成功,正常运行,重要的还是在于,如何通过编译来学习linux系统,认识系统的组成。

最开始的运行的是grub
把grub看成是一个微型的操作系统,因为其五脏具全,支持script,有文件系统,其中的stage1和stage1.5是引导程序,而stage2 则是一个操作系统,只不过是用来引导其它操作系统的一个操作系统。
从开机BIOS执行INT 0X19,这个指令从引导设备第一个扇区读取512字节,装入地址,加载mbr到0x7c00(磁盘第一扇区),这时cpu指令指针该地址 (JMP..._),并执行,stage1通常被写入mbr中,stage1开始执行时直接加载stage1.5或2并执行,stage2运行。
stage2这个小型操作系统,会把系统切入保护模式,设置好运行环境后,在menu.lst的配置下运行给出的shell命令。stage2加载其它系 统并将对机器硬件控制权转交给引导的系统,完成系统的启动。

root (hd0,2)//设置内核所在的根分区
kernel /boot/lfs-linux-vesion root=/dev/hda3     //内核的加载
boot    //启动运行

内核加载内存,一旦系统正常进入,则可以理解为机器是一直在等待用户指令的输入,根据用户不同的需求,执行相应的任务。

进一步要做的是,分析安装文档资料,深层次学习linux系统,分析源码。
阅读(1270) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

安何2010-05-19 21:22:56