Build your own linux system by yourself

转载 2007年10月08日 14:23:00
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 
 

(原创)Linux设备轮询机制分析

一、设备轮询机制的基本思想所谓的设备轮询机制实际上就是利用网卡驱动程序提供的NAPI机制加快网卡处理数据包的速度,因为在大流量的网络环境当中,标准的网卡中断加上逐层的数据拷贝和系统调用会占用大量的CP...
  • joshua_yu
  • joshua_yu
  • 2006-01-27 21:49:00
  • 6203

linux RT_PREEMPT 高CPU负载下的驱动稳定性?

kubuntu 14.04 kernel 3.10.101-rt111 i386 同时运行rt-test1.0 (https://lwn.net/Articles/687446/) 套件的  cycl...
  • exat500g
  • exat500g
  • 2017-10-27 23:42:24
  • 141

rt5350 中断初始化

linux 下的中断初始化,实际就是对i
  • SUKHOI27SMK
  • SUKHOI27SMK
  • 2014-07-16 14:34:44
  • 1825

Build Your Own Angularjs 读书笔记(AngularJS牛逼的地方在于它内嵌了一个表达式到Function对象的编译器。。。当然还有DI框架)

Build Your Own Angularjs 读书笔记 目录  [隐藏]  1 项目配置2 作用域3 表达式与过滤器4 模块与依赖注入5 辅助函数6 指令 项目配置[编辑] npm ...
  • cteng
  • cteng
  • 2017-05-31 19:41:06
  • 1582

Build Your Own Angularjs完整版

  • 2016年08月26日 11:52
  • 2.73MB
  • 下载

[RK3288][Android6.0] WiFi的驱动初始化过程小结

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 用的是AP6335, SDIO接口。 电源相关部分: rfkill_wlan_i...
  • kris_fei
  • kris_fei
  • 2017-06-22 10:28:42
  • 2450

init_task

版权声明:本文为博主原创文章,未经博主允许不得转载。 init_task是kernel的第一个进程,0号进程,当kernel初始化完成后,它便化身为idle进程出现在我们的面前。 一init_...
  • zll5258
  • zll5258
  • 2017-01-16 17:46:07
  • 916

build your own lisp ch5

lisp
  • lantiancaiyun
  • lantiancaiyun
  • 2016-06-12 23:36:44
  • 527

build_your_own_angularjs

  • 2016年07月10日 11:10
  • 1.9MB
  • 下载

rt2860v2源码分析三

在rt2860_probe函数中调用了RtmpPhyNetDevInit为无线网络设备进行初始化,实质是分配建立了pNetDevHook结构体:PNET_DEV RtmpPhyNetDevInit( ...
  • viewsky11
  • viewsky11
  • 2017-02-26 23:53:07
  • 1107
收藏助手
不良信息举报
您举报文章:Build your own linux system by yourself
举报原因:
原因补充:

(最多只允许输入30个字)