2012年9月13日 星期四

建linux系統

要用make menuconfig要先有ncurses
#sudo apt-get install libncurses5-dev

http://www.kernel.org/
http://www.busybox.net/downloads/

home目錄下建立;
rootfs
rootfs/etc
rootfs/www

在rootfs/etc目錄下分別建立 
######################/etc/inittab ######################
::sysinit:/etc/rcS
tty1::askfirst:-/bin/sh --login
tty2::askfirst:-/bin/sh --login
tty3::askfirst:-/bin/sh --login




busybox初始化配置 

<id>:<runlevels>:<action>:<process>

其中<id>指進程運行的tty。其內容是/dev下的tty設備或者別名
<runlevels>:busybox 已忽略,只需留空
有效的actions包括: sysinit, respawn, askfirst, wait,once,restart,ctrlaltdel, shutdown.
askfirst和respawn類似,在運行前,先打印一句"Please press Enter to activate this console."
<process>: 指定執行的進程和它的命令行

如果busybox沒有inittab將默認按以下處理:
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init

如果發現/dev/console不是一個串口設備,將執行:
tty2::askfirst:/bin/sh
tty3::askfirst:/bin/sh
tty4::askfirst:/bin/sh

在shell前加一個'-'前綴表示是一個登陸shell,比如:
tty2::askfirst:-/bin/sh
/sbin/getty可以指定選擇某個tty.比如:
tty4::respawn:/sbin/getty 38400 tty5   /*  /sbin/getty 波特率 tty號  */

將串口輸出到終端:
::respawn:/sbin/getty -L ttyS0 9600 vt100
串口輸出到modem:

::respawn:/sbin/getty 57600 ttyS2
######################/etc/profile ######################
#!/bin/sh

cat <<EOF

Welcome to Neo's Linux
EOF
export PATH=/bin:/sbin:/usr/bin:/usr/sbin

######################/etc/protocols ######################
# Internet (IP) protocols
#
ip    0    IP
icmp    1    ICMP
igmp    2    IGMP
ggp    3    GGP   
ipencap    4    IP-ENCAP
st    5    ST
tcp    6    TCP
egp    8    EGP
igp    9    IGP
pup    12    PUP
udp    17    UDP
hmp    20    HMP
xns-idp    22    XNS-IDP
rdp    27    RDP
iso-tp4    29    ISO-TP4
xtp    36    XTP   
ddp    37    DDP   
idpr-cmtp 38    IDPR-CMTP
idrp    45    IDRP
rsvp    46    RSVP
gre    47    GRE   
esp    50    IPSEC-ESP
ah    51    IPSEC-AH
skip    57    SKIP
rspf    73    RSPF CPHB
vmtp    81    VMTP
eigrp    88    EIGRP
ospf    89    OSPFIGP
ax.25    93    AX.25
ipip    94    IPIP
etherip    97    ETHERIP
encap    98    ENCAP
pim    103    PIM   
ipcomp    108    IPCOMP
vrrp    112    VRRP
l2tp    115    L2TP
isis    124    ISIS
sctp    132    SCTP
fc    133    FC

######################/etc/rcS ######################
#!/bin/sh

export PATH=/bin:/sbin:/usr/bin:/usr/sbin
mount -t proc none /proc
mount -t sysfs none /sys
mount -t tmpfs tmpfs /dev -o size=512K,mode=0755
echo NEOHOST > /proc/sys/kernel/hostname

mkdir -p /var/run /var/log /var/lock /var/state \
         /var/tmp /var/mnt /dev/pts /dev/shm
mount devpts /dev/pts -t devpts

echo /bin/mdev > /proc/sys/kernel/hotplug
mdev -s

ifconfig lo 127.0.0.1 up
ifconfig eth0 192.168.1.253 netmask 255.255.255.0 up

telnetd -l /bin/sh
httpd -h /www

###################/etc/services #################





rootfs/www目錄下建立一個index.html 
###################/www/index.html ################# 
<h1>Success!</h1> 
<p>Welcome to Neo's linux!</p>

接著編譯busybox 
 
#make menuconfig

Busybox Settings => Build Options選Build as a static binary
Busybox Settings => Installation Options  選../rootfs
存檔
make
make install 

原本有rootfs/etc,rootfs/www
現在busybox又加了rootfs/bin,rootfs/sbin,rootfs/usr/bin,rootfs/usr/sbin

 補齊剩下的devproctmpvarlibrootsys目錄

接著製作initrd
在home目錄下
#dd if=/dev/zero of=initrd bs=1024 count=8192
#mkfs.ext2 -F initrd

在home目錄下
#mkdir temp_initrd
#sudo mount -o loop initrd temp_initrd
#cp -fR rootfs/*  temp_initrd/
#sudo umount temp_initrd

編譯Linux Kernel
清除前次設定
#make mrproper
清除之前編譯的檔案
#make clean
#make menuconfig
存檔
make
即以下三步 
make vmlinux  <==未經壓縮的核心(放在source根目錄)
make modules  <==僅核心模組(insmod用) 
make bzImage  <==經壓縮過的核心(在arch/xxx/boot/bzimage)
通常把bzImage命名成vmlinuz (bzImage=vmlinuz,用bzip壓縮的kernel,zImagem用gzip壓縮的kernel,vmlinux就是沒有壓縮的kernel)
make module_install <==會幫忙拷貝module到目錄/lib/modules 

交叉編譯
make ARCH=arm CROSS_COMPILE=arm-linux-uclibc-
make ARCH=sh CROSS_COMPILE=sh4-linux-



x86,Kernel是 arch/x86/boot/bzImage
MIPS,Kernelarch/powerpc/boot/bzImage
arm,Kernelarch/arm/boot/bzImage

加載內核
bzImage和initrd拷貝到linux系統的/boot 

#vi /boot/grub/menu.lst  
title My OS
root (hd0,0)
kernel /boot/bzImage rw root=/dev/ram rootfs_size=8M 
initrd /boot/initrd

沒有留言:

張貼留言