转自12年前自己写的日志两篇--小型内存linux构建和Udisk量产

转自*_* [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,然后做个启动盘,加载到其他平台上使用...后续...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个在高校打杂的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值