#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
補齊剩下的dev,proc,tmp,var,lib,root和sys目錄
接著製作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,Kernel是 arch/powerpc/boot/bzImage
對arm,Kernel是 arch/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
沒有留言:
張貼留言