Build your own linux system by yourself

来源:互联网 发布:彩票遗漏数据分析 编辑:程序博客网 时间:2024/04/30 11:58
Build Your Own Linux System By Yourself
Jimsu,shanghai,10/14/2005

1,#cd /usr/src/linux-2.4;
2,#make mrproper;
3,#make menuconfig;
4,修改Makefile中的版本信息;
5,#make dep;
6,#make clean;
7,#make bzImage;
8,#make modules;
9,#make modules_install;
10,#make install;

分步解释各个命令含义和作用:
make menuconfig:配置内核。
make dep:编译相关的文件。
make clean:清除上次编译的目标文件。
make bzImage:编译一个压缩的内核,开始编译。
make modules:编译modules。
make modules_install:将modules等拷贝到/lib/modules下面。
make install:将bzImage,initrd等拷贝到/boot下,并更新lilo、grub。
不过,完成之后还必须将/etc/lilo.conf或者/etc/grub.conf中的root=/修改成对应的物理磁盘位置,比如:root=/dev/sda2 或者root=/dev/ram

vmware下的Scsi磁盘是BusLogic的,不过,建议编译成module,不然容易和/etc/modules.conf中的冲突。
vmware里面的设备基本上都是虚拟设备,网卡用的是AMD PCNET32网卡。
lib/modules/2.4.21/build/drivers/net,里面的pcnet32.c便是。
生成/lib/moduels/2.4.xxxx/下的驱动,modules和modules.dep文件。
当然modules.dep文件也可以执行#depmod 2.4.xx

当前kernel的编译config文件:一般位于/boot下,比如/boot/config-2.4.xxxxx;,我们使用make bzImage的时候都是使用的当前配置文件,比如:/usr/src/linux-2.4xx/.config

redhat主要组件:
kernel: vmlinuz-2.4.x.img.gz
root_fs:initrd-2.4.x.img.gz

linux启动步骤:
...;
bootloader;
kernel;
initrd.img->init进程->run /linuxrc script->mount real root device;
root_fs: maybe in real disk device or RAMDisk;
/etc/inittab->rc.S->fork mingetty;
login(PAM);
bash shell;
...;

root fs与root device:
root fs是最终运行程序的起点.
root device是只最终运行的root fs所在的设备,比如是/dev/ram,或者/dev/sda2,甚至是通过tftp,nfs等网络启动设备。

loadbooter: lilo与grub
linux常用的就是lilo和grub,在服务器平台和嵌入式平台上还有类似的miniboot,uboot,ppcboot等。
Firmware:服务器一般都有自己的firmware来加强服务器的安全功能,比如监视系统硬件故障,维护RAID磁盘阵列等。
lilo用在早期的linux发行版本中,一般使用/etc/lilo.conf来配置,然后执行#lilo即可让当前的配置生效。
grub使用/etc/grub.conf文件,执行#grub-install /dev/sda命令让当前设置生效,当然也可以直接用grub的命令来设置grub.


RAMDisk制作:
ramdisk是将磁盘中常使用的一些文件放在内存中,这样可以提高系统运行的性能,不过如果你系统的物理内存不是很多就不要考虑了;
这里假设制作一个initrd的RAMDISK镜像文件,过程如下:
#dd if=/dev/zero of=/tmp/myram bs=1k count=16000
#mke2fs /tmp/myram
#mount -o loop  /tmp/myram /mnt
#cd /mnt;
然后进行制作initrd.img RAMDISK的内容,制作结束后#cd /;
#sync
#umount /mnt
#cd /tmp/myram
#gzip -9 /tmp/myram ####生成myram.gz文件
#cp /tmp/myram.gz /boot/initrd-2.4.x-y.img
#修改/etc/lilo.conf
#lilo
#reboot

initrd.img.gz介绍:
这是linux init初始化的镜像文件。你可以通过#gzip -d initrd.img.gz; mount -o loop initrd.img mnt来查看到底里面有哪些文件。
里面的文件内容与你要作什么有关系,我们可以进行定制。
linuxrc:这个是最先被执行的脚本,一般驱动可在此加载。
/initrd
/etc/
/lib/
/bin,/sbin
/dev
举个/linuxrc的例子:
#!/bin/ash
/bin/mount -t proc /proc /proc
/bin/insmod /lib/ext3.o
/bin/insmod /lib/scsi_mod.o
/bin/echo 0x0100 > /proc/sys/kernel/real-root-dev  ##不改变root fs,如果是磁盘上的root fs,则还需要修改root fs位置,继续执行#/bin/pivot_root / /initrd;

终端说明:
虚拟控制台:6 tty
串口console:

shell说明:
bash,ash,csh

重要文件说明:
/etc/modules.conf
/etc/lilo.conf
/etc/grub.conf
/etc/issue;
/etc/pam.d/...
/etc/rc.S
/etc/inittab
/etc/fstab
/etc/passwd,shadow
/etc/termcap(vi需要的)

troubleshooting:
can’t mount root fs:
insmod failed:
PAM:

如何跳过login过程:
在嵌入式系统中,有时候需要跳过登录过程,只要在/etc/inittab里面直接调用bash,而不去启动虚拟终端程序mingetty和login即可。(不过这样是不太友好!!!!)
/etc/inittab做如下修改:
id:3:initdefault:
si::sysinit:/etc/rc.S
1:2345:respawn:/bin/bash  #直接启动shell,tty1是第一个虚拟终端;
###格式:终端id:运行等级:动作:命令及其参数###

----------------------------------------
对于2.4.x升级到2.6.x,则麻烦一些。
2.6的内核比2.4要强大,这是不争的事实。在make menuconfig时可选中如下项:
处理器:建议使用Intel xeon,关于"Processor type and features"选项, 选上"Preemptible Kernel"选项, 这是2.6.x抢占式内核优于2.4.x内核的重要原因之一。
网卡:建议使用intel e1000,选中NAPI。
建议给2.6打上RTIRQ补丁,对设备性能有所提升。

升级2.6内核,你必须将ext3编译到内核,而不能是module,而且grub/lilo中的root=lable=/也必须修改成真实的设备。

在编译之前,必须下载module-init-tools,因为2.6与2.4的modules处理方式不一样,2.6中所有驱动都是.ko。
如果不安装module-init-tools,在升级2.6内核,make modules_install时会提示depmod不对,必须先安装module-init-tools,建议安装module-init-tools-3.1-0.pre5.3.i386.rpm,不过一定要注意备份原来modutils,必须也下载一个modutils的rpm包,我的系统是redhat EL3,其对应的modutils是modutils-2.4.25-9.EL,这可以通过rpm -qa|grep modutils看到当前2.4.x下安装的modutils版本到底是多少。
#rpm -e --nodeps modutils
#rpm -ivh module-init-tools
如果下次要使用2.4,则必须在2.6下面删除module-init-tools重新安装modutils-2.4.25。

在make install时,有可能出现:
"all of your loopback devices in use"
则需要加载loop.o模块,执行:
#insmod /lib/modules/old-kernel-version/fs/blocks/loop.o
old-kernel-version是指当前运行的kernel版本,如果是在2.4下面编译的,则表示是2.4.x。

关于:SOCKET filter option
有人提到2.4里面有"CONFIG_FILTER"而2.6.x里面没有"CONFIG_FILTER",其实2.6.X内核里面此项设置默认就是=yes的。

从2.4升级到2.6后,原来的2.4可能就启动不来了(我的服务器启不来),但是我在vmware倒是启来了。
启动后的/boot/System.map会自动链接到对应内核版本的System.map。

*********举例**********************

------------------/linuxrc--------------------
#!/bin/ash
/bin/mount -t proc /proc /proc
/bin/echo 0x0100 > /proc/sys/kernel/real-root-dev

-----------------etc/rc.S---------------------
#!/bin/bash
/bin/mount -a
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 192.168.0.211

-----------------etc/inittab--------------------
id:3:initdefault:
si::sysinit:/etc/rc.S
1:2345:respawn:/bin/bash 
 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 1adac连接线坏了怎么办 4g的标志没有了怎么办 苹果手机亏电了怎么办 苹果手机亏电了充不进电怎么办 比值审敛法 ρ=1怎么办 比值审敛法中p=1怎么办 电脑被老友重装系统搞坏了怎么办 vivo手机听筒声音小怎么办 小孩调皮幼儿园不收怎么办 小孩听力残疾幼儿园不收怎么办 幼儿园不收外省小孩怎么办 孩子刚上幼儿园哭闹老师怎么办 孕妇糖耐指标高怎么办 貂蝉经常没蓝怎么办 儿童声导抗c型怎么办 酱牛肉不烂怎么办拯救 卤牛肉一切就碎怎么办 牛肉煮的太烂了怎么办 牛肉卤的太烂怎么办 牛肉炖得太软怎么办 牛肉炖的很硬怎么办 牛肉做的有点硬怎么办 牛肉做老了还能怎么办 牛肉粒 炒老了怎么办 牛肉炖出来很硬怎么办 煮的牛肉太硬怎么办 在产蛋鸡体重偏轻怎么办 产蛋鸡不上高峰怎么办 蛋鸡天热下蛋少怎么办 成年鸡嗉子鼓涨怎么办 黄牛拼失败了钱怎么办 磁力泥粘衣服上怎么办 鼻涕泥弄衣服上怎么办 水晶橡皮泥弄在衣服上怎么办 橡皮泥弄到衣服上怎么办 橡皮泥弄在衣服上怎么办 磁力泥弄衣服上怎么办 苹果7p按键坏了怎么办 苹果手机内存满了怎么办 来微信消息手机上面没提示怎么办 苹果手机储存空间满了怎么办