转自*_* [http://63874823.qzone.qq.com]
一、第一篇:构建基于X86的小型内存Linux操作系统
我也用自己的东东写了点东西:(黑体部分)
这里需要什么东西:
linux OS:
1.上http://www.kernel.orgdownload kernel full_source(PS:最好跟宿主机版本配对或者一致,那样可以省去很多麻烦)
2.上BusyBox,用于构建linux OS(它含有很多linux工具命令)
3.从Bash - GNU Project - Free Software Foundation 下载source,它可以使你的linux OS有强大的bash命令,当然也可不必
4.弄个grub4dos最好,可以引导多个系统,用于后期测试
5. 一个1G左右的U盘或者闪存(为什么1G以上,可以自己定制呗,多点空间可以游刃有余)
好了,差不多,我也是依葫芦画瓢:
------------------------------start-------------
-----------2011-01-04 19:40:24---------------
root@xh-virtual-machine:~# umount /dev/sdb1
root@xh-virtual-machine:~# mke2fs -j /dev/sdb1
root@xh-virtual-machine:~# cd /mnt/
croot@xh-virtual-machine:/mnt# mkdir sdb1
root@xh-virtual-machine:/mnt# mount -vt ext3 /dev/sdb1 sdb1
root@xh-virtual-machine:/mnt# cd sdb1
root@xh-virtual-machine:/mnt/sdb1# dd if=/dev/zero of=initrd.img bs=1M count=1000
root@xh-virtual-machine:/mnt/sdb1# mke2fs -F initrd.img
root@xh-virtual-machine:/mnt/sdb1# mkdir initrd boot
root@xh-virtual-machine:/mnt/sdb1# mount -o loop initrd.img initrd
root@xh-virtual-machine:/mnt/sdb1# cd initrd
root@xh-virtual-machine:/mnt/sdb1/initrd# mkdir -pv bin dev etc home mnt proc root sbin sys tmp My_xh
root@xh-virtual-machine:/mnt/sdb1/initrd# mkdir -pv lib/modules usr/{lib,bin,sbin} var boot
....about kernel....
root@xh-virtual-machine:/opt/modules_tmp/lib/modules#cp -Rfva 2.6.35.5 /mnt/sdb1/initrd/lib/modules/
root@xh-virtual-machine:/opt/linux-2.6.35.5# cp -v arch/x86/boot/bzImage /mnt/sdb1/boot/
root@xh-virtual-machine:/opt/busybox-1.18.1/_install# cp -Rfva bin/* /mnt/sdb1/initrd/bin/
root@xh-virtual-machine:/opt/busybox-1.18.1/_install# cp -Rfva sbin/* /mnt/sdb1/initrd/sbin/
root@xh-virtual-machine:/opt/busybox-1.18.1/_install# cd /mnt/sdb1/initrd/bin/
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# ldd busybox
linux-gate.so.1 => (0x00a49000)
libm.so.6 => /lib/libm.so.6 (0x00bd5000)
libc.so.6 => /lib/libc.so.6 (0x0041d000)
/lib/ld-linux.so.2 (0x00250000)
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# cp -v /lib/libm.so.6 ../lib/
`/lib/libm.so.6' -> `../lib/libm.so.6'
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# cp -v /lib/libc.so.6 ../lib/
`/lib/libc.so.6' -> `../lib/libc.so.6'
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# cp -v /lib/ld-linux.so.2 ../lib/
`/lib/ld-linux.so.2' -> `../lib/ld-linux.so.2'
root@xh-virtual-machine:/mnt/sdb1/initrd# cd etc/
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# ls
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# cp -v /etc/passwd* .
`/etc/passwd' -> `./passwd'
`/etc/passwd-' -> `./passwd-'
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# cp -v /etc/gruop* .
cp: cannot stat `/etc/gruop*': No such file or directory
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# cp -v /etc/group* .
`/etc/group' -> `./group'
`/etc/group-' -> `./group-'
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# cp -v /etc/shadow* .
`/etc/shadow' -> `./shadow'
`/etc/shadow-' -> `./shadow-'
root@xh-virtual-machine:/mnt/sdb1/initrd/etc#
//vi fstab
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# vim fstab
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# ls
fstab group group- passwd passwd- shadow shadow-
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# cat fstab
proc /proc proc defaults 0 0
devfs /dev tmpfs defaults,size = 512k 0 0
sysfs /sys sysfs defaults,size = 1M 0 0
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# vim profile
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# cat profile
if ["`id -u`" -eq 0 ];then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin"
fi
u = `whoami`
if [ "$PS1" ];then
if [ "$BASH" ];then
PS1= `[ $u@\h \W ]\$`
else
if ["`id -u`" -eq 0];then
PS1 = `#`
else
PS1 = `$`
fi
fi
fi
export PATH
alias ll = `ls -l`
alias la = `ls -A`
alias l = `ls -CF`
umask 022
root@xh-virtual-machine:/mnt/sdb1/initrd/etc#
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# touch hostname
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# ls
fstab group group- hostname passwd passwd- profile shadow shadow-
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# echo "localhost" > hostname
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# vim inittab
root@xh-virtual-machine:/mnt/sdb1/initrd/etc# cat inittab
::sysinit:/etc/init.d/rcS
tty1::respawn:/sbin/getty 38400 tty1
tty1::respawn:/sbin/getty 38400 tty2
::ctrlaltdel:/bin/umount -a -r
root@xh-virtual-machine:/mnt/sdb1/initrd/etc/init.d# vi rcS
root@xh-virtual-machine:/mnt/sdb1/initrd/etc/init.d# cat rcS
#!/bin/sh
/bin/mount -a
/sbin/mdev -s
/bin/hostname -F /etc/hostname
root@xh-virtual-machine:/mnt/sdb1/initrd/etc/init.d# chmod 755 rcS
root@xh-virtual-machine:/mnt/sdb1/initrd/etc/init.d# cd ../../dev/
root@xh-virtual-machine:/mnt/sdb1/initrd/dev# ls
root@xh-virtual-machine:/mnt/sdb1/initrd/dev# cp -Rfva /dev/null .
`/dev/null' -> `./null'
root@xh-virtual-machine:/mnt/sdb1/initrd/dev# cp -Rfva /dev/console .
`/dev/console' -> `./console'
root@xh-virtual-machine:/mnt/sdb1/initrd/dev# cp -Rfva /dev/zero .
`/dev/zero' -> `./zero'
root@xh-virtual-machine:/mnt/sdb1/initrd/dev# cp -Rfva /dev/ram{0..5} .
`/dev/ram0' -> `./ram0'
`/dev/ram1' -> `./ram1'
`/dev/ram2' -> `./ram2'
`/dev/ram3' -> `./ram3'
`/dev/ram4' -> `./ram4'
`/dev/ram5' -> `./ram5'
root@xh-virtual-machine:/mnt/sdb1/initrd/dev#
//bash-4.0 complie
root@xh-virtual-machine:/opt/bash-4.0# ./configure --prefix=/tmp/bash4.0
root@xh-virtual-machine:/opt/bash-4.0# make
root@xh-virtual-machine:/opt/bash-4.0# make install
root@xh-virtual-machine:/tmp/bash4.0/bin# cd /tmp/bash4.0/bin/
root@xh-virtual-machine:/tmp/bash4.0/bin# cp -v bash /mnt/sdb1/initrd/bin/
`bash' -> `/mnt/sdb1/initrd/bin/bash'
root@xh-virtual-machine:/tmp/bash4.0/bin# cd /mnt/sdb1/initrd/bin/
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# ls -l bash
-rwxr-xr-x 1 root root 2258647 2011-01-04 21:42 bash
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# ldd bash
linux-gate.so.1 => (0x00a84000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00aca000)
libdl.so.2 => /lib/libdl.so.2 (0x00138000)
libc.so.6 => /lib/libc.so.6 (0x00306000)
/lib/ld-linux.so.2 (0x001c2000)
root@xh-virtual-machine:/mnt/sdb1/initrd/bin#
root@xh-virtual-machine:/mnt/sdb1/initrd/bin#
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# cp -v /lib/libncurses.so.5 ../lib/`/lib/libncurses.so.5' -> `../lib/libncurses.so.5'
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# cp -v /lib/libdl.so.2 ../lib/
`/lib/libdl.so.2' -> `../lib/libdl.so.2
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# rm -rf sh
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# ln -s bash sh
root@xh-virtual-machine:/mnt/sdb1/initrd/bin# ls -l sh
lrwxrwxrwx 1 root root 4 2011-01-04 21:45 sh -> bash
--------err as follow-------------
root@xh-virtual-machine:/mnt/sdb1/initrd# chroot .
bash-4.0# source etc/profile
bash: id: command not found
bash: [: : integer expression expected
bash: whoami: command not found
bash: [@h: command not found
/etc/profile as follow:
#############
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
################
and build then
root@xh-virtual-machine:/mnt/sdb1/initrd# chroot .
bash-4.0# source etc/profile
bash: id: command not found
bash: [: : integer expression expected
bash: \u@\h \W\$: command not found
bash-4.0#
------------------------
bash-4.0# echo hello
hello
bash-4.0# exit
exit
root@xh-virtual-machine:/mnt/sdb1/initrd# ls
bin dev home lost+found My_xh root sys usr
boot etc lib mnt proc sbin tmp var
root@xh-virtual-machine:/mnt/sdb1/initrd# ls /mnt/
hgfs sdb1
root@xh-virtual-machine:/mnt/sdb1/initrd# pwd
/mnt/sdb1/initrd
root@xh-virtual-machine:/mnt/sdb1/initrd# cd ..
root@xh-virtual-machine:/mnt/sdb1# ls
boot initrd initrd.img lost+found
root@xh-virtual-machine:/mnt/sdb1# umount initrd/
root@xh-virtual-machine:/mnt/sdb1# gzip -9 initrd.img
root@xh-virtual-machine:/mnt/sdb1# ll
total 101888
drwxr-xr-x 5 root root 4096 2011-01-05 00:58 ./
drwxr-xr-x 4 root root 4096 2011-01-04 20:13 ../
drwxr-xr-x 2 root root 4096 2011-01-04 20:35 boot/
drwxr-xr-x 2 root root 4096 2011-01-04 20:31 initrd/
-rw-r--r-- 1 root root 104191109 2011-01-05 00:53 initrd.img.gz
drwx------ 2 root root 16384 2011-01-04 20:25 lost+found/
root@xh-virtual-machine:/mnt/sdb1# cp initrd.img.gz boot/initrd.gz
root@xh-virtual-machine:/mnt/sdb1# cd boot
root@xh-virtual-machine:/mnt/sdb1/boot# ls
bzImage initrd.gz
---------------------------------ovre----------------
现在暂时做到这里,因为要移植到工控板上所以后面系统还需测试和实验,主要内核定制这一块我透明掉了,毕竟还得多多测试
PS:而后先测试linux _MYOS,然后做个启动盘,加载到其他平台上使用...后续...

2077

被折叠的 条评论
为什么被折叠?



