Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1208038
  • 博文数量: 322
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3276
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-17 09:21
文章分类

全部博文(322)

文章存档

2010年(155)

2009年(167)

我的朋友

分类: 嵌入式

2010-01-15 09:16:41

2、建立根文件系统目录

 

#mkdir rootfs

#cd rootfs

#mkdir dev proc etc lib mnt mnt/etc mnt/etc/init.d tmp var usr

#touch linuxrc        //建立linuxrc文件

#touch mnt/etc/inittab    //建立inittab文件

#touch mnt/etc/init.d/rcS   //建立rcS脚本文件

 

将上面编译bosybox生成的_install目录下的binsbin两个目录cp到我们刚才建立的rootfs目录下面,注意这里不需要busybox生成的linuxrc文件。

 

linux2.6.10后的版本中,没有devfs,所以我们要使用busyboxmdev工具或者是udev工具,但是我们现在暂时不使用他!我们现在只需要建立一个可以进入shell命令的文件系统就行了,不需要太多的应用程序,更多的功能在我们成功完成这个简单的文件系统之后,再在里面加入更多的功能!

    因此我们还需要在rootfs/dev下面建立一些设备文件!我在busybox/example下面找到一个工具mkdev.sh可以自动帮助我们完成这个工作,我们需要的只是在这个文件里面稍微修改一下即可!

 

#!/bin/sh

#

# makedev.sh - creates device files for a busybox boot floppy image

#make by zj , so_zhou@qq.com

 

# we do our work in the dev/ directory

if [ -z "$1" ]; then

    echo "usage: `basename $0` path/to/dev/dir"

    exit 1

fi

 

cd $1

 

 

# miscellaneous one-of-a-kind stuff

mknod console c 5 1

mknod full c 1 7

mknod kmem c 1 2

mknod mem c 1 1

mknod null c 1 3

mknod port c 1 4

mknod random c 1 8

mknod urandom c 1 9

mknod zero c 1 5

 

mknod mtdblock0 b 31 0

mknod mtdblock1 b 31 1

mknod mtdblock2 b 31 2

mknod mtdblock3 b 31 3

mknod mtdblock4 b 31 4

 

mknod mtd0 c 90 0

mknod mtd1 c 90 1

mknod mtd2 c 90 2

mknod mtd3 c 90 3

mknod mtd4 c 90 4

 

mknod cua0  5 64

for i in `seq 0 9`; do

    mknod cua$i c 5 $i+64

done

 

for i in `seq 0 9`; do

    mknod tty$i c 4 $i

done

 

mknod ttySAC0   c 4 64

mknod tty  c 5 0

mknod ttyp0 c 3 0

 

 

# virtual console screen devs

for i in `seq 0 9`; do

    mknod vcs$i b 7 $i

done

ln -s vcs0 vcs

 

# virtual console screen w/ attributes devs

for i in `seq 0 9`; do

    mknod vcsa$i b 7 $i

done

ln -s vcsa0 vcsa

 

其实还有很多设备文件都是不需要的,我也没有去一个一个的式样,还是那句话,我现在的目标只是让我的系统能够进入shell

 

接下来我们要将前面创建的几个文件(linuxrc inittab fstab rcS)完善一下

#vi linuxrc

输入下面的内容(可根据自己的需要修改)

#!/bin/sh

echo "mount /etc as ramfs"

/bin/mount -n -t ramfs ramfs /etc

echo "done"

echo "cp mnt/etc/* /etc"

/bin/cp -a /mnt/etc/* /etc

echo "done"

 

echo "re-create the /etc/mtab entries"

# re-create the /etc/mtab entries

/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock3 /

#/bin/mount -f -t ramfs ramfs /etc

#echo "mount ramfs /etc ...... done"

#/sbin/insmod -f /lib/yaffs.o

/bin/mount -t yaffs /dev/mtdblock4 /usr

echo "mount yaffs mtdblock4 .................done"

 

#mount some fike system

echo "-------mount /devshm as tmpfs"

/bin/mount -n -t tmpfs tmpfs /dev/shm

echo "-----------mount /proc as proc"

/bin/mount -n -t proc none /proc

echo "-----mount /sys as sysfs"

/bin/mount -n -t sysfs none /sys

 

/bin/cat /etc/motd

 

echo "exec sbin/init"

exec /sbin/init

 

 

#vi mnt/etc/inittab

::sysinit:/etc/init.d/rcS

::askfirst:-/bin/sh

::restart:sbin/init

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/mount -a -r

::shutdown:/sbin/swapoff -a

 

 

#vi mnt/etc/fstab

none        /proc       proc    defaults    0 0

none        /dev/pts    devpts  mode=0622   0 0

tmpfs       /dev/shm    tmpfs   defaults    0 0

 

 

#vi mnt/etc/init.d/rcS

#! /bin/sh

echo "Starting system"

hostname zj

 

/bin/mount -a

 

 

在这三个文件中我都加了一些echo “…….”语句,这样我就可以知道我的系统运行到什么地方了,如果出错,也能查出错在什么地方,^_^

 

3、生成cramfs

 

#mkcramfs rootfs root.cramfs

生成文件系统镜像,下载运行:

 

……前面略……

NET: Registered protocol family 1

VFS: Mounted root (cramfs filesystem) readonly.

Freeing init memory: 108K

mount /etc as ramfs

done

cp mnt/etc/* /etc

done

re-create the /etc/mtab entries

yaffs: dev is 32505860 name is "mtdblock4"

yaffs: passed flags ""

yaffs: Attempting MTD mount on 31.4, "mtdblock4"

mount yaffs mtdblock4 .................done

-------mount /devshm as tmpfs

-----------mount /proc as proc

-----mount /sys as sysfs

Welcome to my

| | |_|

| |                                   

| | | |   nnnnnnnn    |u|     |u|     \ \/ /               

| | | |   nn    nn    |u|     |u|      \/\/     

| | | |   nn    nn    |u|     |u|      /\/\

| | | |   nn    nn    |u|u|u|u|u|     / /\ \

make by ZJ    zo_zhou@qq.com

exec sbin/init

 

command='/etc/init.d/rcS' action='1' terminal='/dev/console'

command='-/bin/sh' action='4' terminal='/dev/console'          //这个红色部分不知道

command='sbin/init' action='128' terminal='/dev/console'       //是什么意思,还有点

command='/sbin/reboot' action='32' terminal='/dev/console'    //不明白,希望能和大家

command='/bin/mount -a -r' action='64' terminal='/dev/console' //一起讨论一下,

command='/sbin/swapoff -a' action='64' terminal='/dev/console' //so_zhou@qq.com

Starting system

 

Please press Enter to activate this console.

 

BusyBox v1.4.1 (2007-11-25 15:45:33 CST) Built-in shell (ash)

Enter 'help' for a list of built-in commands.

 

#

 

现在 shell终于出现了,整整花了我两天时间不断的实验,终于成功了!^_^

 

经过我的实验之后,发现一个问题,有一部分命令无效,不知道是我的busybox编译有问题还是其他的什么有问题,总之现在我的系统算是运行起来了,

下一步我需要做的就是完善我的嵌入式linux系统了!^-^

阅读(772) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~