Chinaunix首页 | 论坛 | 博客
  • 博客访问: 974269
  • 博文数量: 192
  • 博客积分: 3070
  • 博客等级: 中校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-27 23:44
个人简介

Start Linux Leave Linux a while Back to Linux

文章分类

全部博文(192)

文章存档

2023年(18)

2022年(11)

2021年(8)

2020年(14)

2019年(7)

2018年(13)

2017年(16)

2016年(4)

2012年(2)

2011年(13)

2010年(26)

2009年(13)

2008年(27)

2007年(20)

我的朋友

分类: LINUX

2008-02-23 00:24:05

platform: s3c2440 + linux2.6.18 + yaffs2

 

首先在开发平台的上创建 rootfs 及 根目录下的一些必要的文件.

1.  创建必须的文件夹及设备文件

# mkdir rootfs

# cd rootfs

# mkdir bin dev etc lib mnt proc sbin sys root

# mkdir  /etc/var

# mkdir  /etc/tmp

 

# ln  -s /etc/var /var

# ln  -s /etc/tmp /tmp

 

.   创建设备文件系统

Linux-2.6.18开始,负责旧版本的设备管理系统devfs已被废除,但新

版本的udev是一个基于用户空间的设备管理系统。在内核启动时并不能

自动创建设备节点,固需手动创建consolenull两个启动过程必须的设

备节点。我们将采用busybox中内置的mdev,一个简化的udev版本.

# mknod -m 660 dev/console c 5 1

# mknod -m 660 dev/null        c 1 3

 

3.      建立动态运行库

# cp -rfd /usr/local/arm/4.0.3/arm-linux/lib/*  rootfs/lib/

拷贝经过交叉编译的库文件,参数-d,保持库文件的链接关系。

# rm -rf rootfs/lib/*.a 

删除所有的静态库文件。

注:/usr/local/arm/4.0.3/ 为交叉编译工具链的存放目录。

# arm-linux-strip rootfs/lib/*

移除所有的符号信息, 压缩库空间。

注:用arm-linux-gcc.3.4.1版本编译的时候可能不能通过,建议用4.0.3版本的。

 

4.      交叉编译busybox

解压缩tar -zxf busybox1.4.1.tar

解压后修改Makefile,指明交叉编译器:

     ARCH            ?= arm

    CROSS_COMPILE  ?= /usr/local/arm/4.0.3/bin/arm-linux-

在解压后的busybox 1.4.1目录里执行 make menuconfig,选择系统需要用到的命令或工具。

值得注意的是 shell 的选择,在 Choose your default shell (none) 这一项回车后选择ash, 否则,编译后会提示找不到shell,使系统无法启动。

还需选中以下两个选项:

Shell  --->

   [*]   Standalone shell

   [*]   Command line editing

    ...

  

   [*]     Tab completion         

   [*]       Username completion

 

   其中Tab comletion选项是用于输入命令后按 Tab 键自动补齐的.

 

 

Busybox settings --->

   Build option  --->

      [*] Build BusyBox as a static binary (no shared libs)

 

Init Utilities  --->

   [*]   init

   [ ]   debugging aid

   [*]   Support reading an inittab file

   [ ]   Support running commands with a controlling-tty

   [*]   Be _extra_ quiet on boot

   [ ]   Support dumping core for child processes (debugging only)

   [*]   Support running init from within an initrd (not initramfs)

   [*] poweroff, halt, and reboot

   [*] mesg

 

Linux System Utilities  --->

   [*] mdev

   [*]   Support /etc/mdev.conf

   [ ]     Support command execution at device addition/removal

 

 

 

 

必须选择 mdev 选项, 否则不能启用udev

执行 make install进行编译编译完后,会出现_install目录,包含binsbinusr三个目录和一个linuxrc文件。

linuxrclinux启动后第一执行的文件(由u-boot传给linux的启动参数决定,在kernelboot option 的目录),其作用是执行相应的初始化工作。但u-boot编译生成的仅是一个指向/bin/busybox的链接文件。由于我们需要作一些初始化工作,如启动web服务器,加载特定驱动程序等,我们将自行编写linuxrc这个文件。binsbinusr这三个目录里除了bin/busybox一个文件外,其余都是指向busybox的链接文件。我们将binsbinusr这三个目录和linuxrc这个链接文件拷贝到rootfs的目录下,基本的文件系统制作完成。

 

如果找不到linuxrc文件,可以自建一个:

# ln -s /arm/busybox linuxrc

 

 

5.      etc目录制作

a)        添加 fstab 文件,添加 必须的挂靠目录

        none        /proc      proc   defaults   0 0

none        /dev/pts   devpts mode=0622  0 0

tmpfs       /dev/shm   tmpfs  defaults   0 0

/dev/sda1   /mnt/flash  vfat  defaults   0 0

 

b)        添加 init.d/rcS 文件 添加自动执行部分

#! /bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib:

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

#

#Trap CTRL-C &c only in this shell so we can interrupt subprocesses.

#

trap ":" INT QUIT TSTP

/bin/mount -t proc  none  /proc

/bin/mount -t tmpfs none  /root

/bin/mount -t tmpfs none  /tmp

/bin/mount -t tmpfs none  /var

/bin/mount -t tmpfs none  /dev

/bin/mount -t sysfs none  /sys

/bin/mkdir -p /var/lib

/bin/mkdir -p /var/run

/bin/mkdir -p /var/log

/bin/mknod -m 660 /dev/console c 5 1

/bin/mknod -m 660 /dev/null    c 1 3

/bin/mknod -m 666 /dev/ptmx    c 5 2

/bin/mkdir  /dev/shm

/bin/mkdir  /dev/pts

echo  "Starting mdev ..."

/sbin/mdev -s

echo /sbin/mdev > /proc/sys/kernel/hotplug

/etc/rc.d/init.d/netd start

/sbin/ifconfig lo    127.0.0.1

/sbin/ifconfig eth0  192.168.0.9

/sbin/route add default eth0

/bin/hostname -F /etc/sysconfig/HOSTNAM

 

c)        创建 rc.d\init.d\netd 文件

#!/bin/sh

base=inetd

# See how we were called.

case "$1" in

  start)

        /usr/sbin/$base

        ;;

  stop)

    pid='/bin/pidof $base'

    if [ -n "$pid" ]; then

        kill -9 $pid

    fi

        ;;

esac

exit

d)        其他文件具体参考rootfs目录

 

2.      生成镜像文件

a):  镜像文件tool文件:   mkfs.yaffs2

b):  创建新的镜像文件:

  ./mkfs.yaffs2  1  rootfs  yaffs2.img

mkfs.yaffs2参数说明可以参考./mkfs.yaffs2  -help

 

        新镜像文件yaffs2.img可以通过usb下载到nandflash里,Rootfs文件系统制作完成。

 

 

 

 

 

 

 

 

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