您的位置:首页 > 编程语言 > PHP开发

mini2440文件系统yaffs制作

2014-02-12 13:17 525 查看
1、根文件系统目录说明

嵌入式Linux 中都需要构建根文件系统,构建根文件系统的规则在FHS(FilesystemHierarchy Standard)文档中,下面是根文件系统顶层目录。

目录 内容

bin 存放所有用户都可以使用的、基本的命令。

sbin 存放的是基本的系统命令,它们用于启动系统、修复系统等。

usr 里面存放的是共享、只读的程序和数据。

proc 这是个空目录,常作为proc 文件系统的挂载点。

dev 该目录存放设备文件和其它特殊文件。

etc 存放系统配置文件,包括启动文件。

lib 存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序。

boot 引导加载程序使用的静态文件

home 用户主目录,包括供服务账号锁使用的主目录,如FTP

mnt 用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。

opt 给主机额外安装软件所摆放的目录。

root root 用户的主目录

tmp 存放临时文件,通常是空目录。

var 存放可变的数据。

2、构建根文件系统

2.1构建根文件系统目录

#
cd /home/linux/mini2440/filesystem/output/mini2440_rootfs

# vim create_rootfs_bash

#!/bin/sh
echo "-------Create rootfs directons start...... -------------"
mkdir rootfs
cd rootfs

echo "-------Create root,dev....... -------------"
mkdir usr root dev etc boot tmp var sys proc lib mnt home
mkdir etc/init.d etc/rc.d  etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules

echo "-------make mode in dev/console dev/null -------------"
mknod -m 600 dev/console c 5 1
mknod -m 600 dev/null    c 1 3

mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp

mkdir var/lib var/lock var/run var/tmp

chmod 1777 tmp
chmod 1777 var/tmp

echo "-------make direction done -------------"


2.2 建立动态链接库

# tar
xf /home/wARM/other/cd/mini2440/linux/rootfs_qtopia_qt4-20100816.tar.gz -C src/

#cp -rfd src/rootfs_qtopia_qt4/lib/* rootfs/lib

2.3 交叉编译

Busybox
是一个遵循GPL v2 协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox 可以自动生成根文件系统所需bin、sbin、usr 目录和linuxrc 文件。

2.3.1 解压Busybox

#sudo
tar xf /home/wARM/other/cd/mini2440/linux/busybox-1.13.3-mini2440.tgz -C src

#cd src/busybox-1.13.3/

2.3.2 修改Makefile

修改:

CROSS_COMPILE ?=arm-linux- //第164 行

ARCH ?=arm //第189 行

2.3.3 配置busybox

输入make menuconfig 进行配置

(1)、Busybox Settings--->

General Configuration--->

[*] Show verbose applet usage messages

[*] Show verbose applet usage messages

[*] Store applet usage messages in compressed form

[*] Support –install [-s] to install applet links at runtime

[*] Enable locale support(system needs locale for this to work)

[*] Support for –long-options

[*] Use the devpts filesystem for unix98 PTYs

[*] Support writing pidfiles

[*] Runtime SUID/SGID configuration via /etc/busybox.config

[*] Suppress warning message if /etc/busybox.conf is not readable

Build Options--->

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

[*] Build with Large File Support(for accessing files>2GB)

Installation Options->

[ ]Don’t use /usr

Applets links (as soft-links) --->

(./_install) BusyBox installation prefix

Busybox Library Tuning --->

(6)Minimum password legth

(2)MD5:Trade Bytes for Speed

[*]Fsater /proc scanning code(+100bytes)

[*]Command line editing

(1024)Maximum length of input

[*] vi-style line editing commands

(15) History size

[*] History saving

[*] Tab completion

[*]Fancy shell prompts

(4) Copy buffer size ,in kilobytes

[*]Use ioctl names rather than hex values in error messages

[*]Support infiniband HW

(2)、Linux Module Utilities--->

(/lib/modules)Default directory containing modules

(modules.dep)Default name of modules.dep

[*] insmod

[*] rmmod

[*] lsmod

[*] modprobe

-----options common to multiple modutils

[ ] support version 2.2/2.4 Linux kernels

[*]Support tainted module checking with new kernels

[*]Support for module .aliases file

[*] support for modules.symbols file

(3)、在busybox 中配置对dev 下设备类型的支持

dev 的创建有三种方法:

手动创建:在制作根文件系统的时候,就在dev 目录下创建好要使用的设备文件,系统挂接根文件系统后,可 以使用dev 目录下的设备文件了。

使用devfs 文件系统:这种方法已经过时,具有不确定的设备映射、没有足够的主/次设备号、devfs 消耗大量的内存。

udev:它是个用户程序,能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建、删除等。它的操作相对复杂,但灵活性很高

mdev 是busybox 自带的一个简化版的udev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox 为基础构建嵌入式linux 的根文件系统时,使用它是最优的选择。

下面的选项将增加对mdev 的支持。

Linux System Utilities --->

[*]Support /etc/mdev.conf

[*]Support command execution at device addition/removal

2.3.4、编译busybox

编译busybox 到指定目录:

#cd /home/linux/mini2440/filesystem/output/mini2440_rootfs/src/busybox-1.13.3

#vim make_install.sh

make CONFIG_PREFIX=/opt/studyarm/rootfs install
#sudo sh make_install.sh

在rootfs 目录下会生成目录bin、sbin、usr 和文件linuxrc 的内容。

2.4 建立etc目录下的配置文件

2.4.1 etc/mdev.conf
文件,内容为空。

2.4.2、拷贝主机etc 目录下的passwd、group、shadow 文件到rootfs/etc 目录下。

2.4.3、etc/sysconfig 目录下新建文件HOSTNAME,内容为”H3-Studio”。

2.4.4、etc/inittab 文件:

#etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
2.4.5、etc/init.d/rcS 文件:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel

echo "--------munt all -----------"

mount -a
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s

echo "*****************************************"
echo "***************MINI2440 ARM**************"
echo "Kernel version:linux-2.6.32.4"
echo "rd12<gdzengxiong@gmail.com>"
echo "Date:2014.02.11"
echo "*****************************************"

/bin/hostname -F /etc/sysconfig/HOSTNAME
(或者直接 /bin/hostname H3-Studio )

使用以下命令改变rcS 的执行权限:Chmod +x rcS

2.4.6、etc/fstab 文件:

#device mount-point type       option     dump   fsck   order
proc   /proc              proc       defaults  0           0
none  /tmp              ramfs     defaults  0           0
sysfs   /sys               sysfs       defaults  0           0
mdev  /dev              ramfs     defaults  0           0
2.4.7、 etc/profile 文件:

#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1
USER="id -un"
LOGNAME=$USER
PS1='rd12@SZRD:#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
   2.5 制作根文件系统映像文件            使用以下命令安装好yaffs 文件系统制作工具:            #tar –zxvf /home/wARM/other/cd/mini2440/linux/mkyaffs2image.tgz –C /            在/home/linux/mini2440/filesystem/output/mini2440_rootfs 目录下,使用命令mkyaffs2image rootfs rootfs.img 生成根文件系统映像文件。烧写到开发板就可以运行了。   2.6 mini2440开发板配置静态IP地址        #vim  etc/eth0-setting

IP=192.168.1.230
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
MAC=08:90:90:90:90:90
然后:wq保存、退出

#vim etc/init.d/ifconfig-eth0

#!/bin/sh

echo -n Try to bring eth0 interface up......>/dev/ttySAC0

if [ -f /etc/eth0-setting ] ; then
source /etc/eth0-setting

if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttySAC0
else
ifconfig eth0 down
ifconfig eth0 hw ether $MAC
ifconfig eth0 $IP netmask $Mask up
route add default gw $Gateway
fi

echo nameserver $DNS > /etc/resolv.conf
else

if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttySAC0
else
/sbin/ifconfig eth0 192.168.1.230 netmask 255.255.255.0 up
fi
fi

echo Done > /dev/ttySAC0
#vim etc/init.c/rcS 在末尾添加以下语句

/etc/init.d/ifconfig-eth0 restart
2.7 mini2440实现DHCP

首先是在内核和busybox中把相应的DHCP给选上

linux kernel :

Networking --->

Networking support

Networking options --->

Packet socket

[ * ] IP: DHCP support

[ * ] Network packet filtering (replaces ipchains) --->

busybox:

Networking Utilities --->

udhcp Server/Client --->

[ * ] udhcp Server (udhcpd)

udhcp Client (udhcpc)

[ * ] Lease display utility (dumpleases)

[ * ] Log udhcp messages to syslog (instead of stdout)

[ * ] Compile udhcp with noisy debugging messages

然后把busybox中的examples/udhcp/simple.script 脚本文做为default.script拷贝到/usr/share/udhcpc/default.script,最后既可以运行:udhcp eth0 来执行DHCP。

如果想加载文件系统后直接运行DHCP:

在/etc/init.d/rcS中添加一行: udhcpc eth0

2.8 busybox移植telnet

2.8.1. 配置busybox,进入busybox目录下,运行make menuconfig,找到telnetd配置部分,选上下面三项

Networking Utilities --->

[*] telnet

[*] telnetd

[*] Support standalone telnetd (not inetd only)

内核配置中找到Character devices, 确保下面这项目被选中

Character devices --->

[*] Unix98_PTY support

2.8.2. 配置busybox后,编译busybox,会在usr/sbin下面生成telnetd,后面的操作同用busybox制作根文件系统,一般busybox默认都配置了上面

的telnet选项。

2.8.3. 配置内核,进入内核源码目录,运行make menuconfg,在Character devices中选中Unix98 PTY support,

在File systems中选中/dev/pts file system for Unix98 PTYs 退出后make zImage

2.8.4. 在ramdisk的etc/中新建inetd.conf文件,加入下面这行内容:

telnet stream tcp nowait root /sbin/telnetd /sbin/telnetd
也可以从linux系统中拷贝inetd.conf文件,确认上面上面这行内容没有被注释掉

2.8.5. 修改etc/init.d/rcS

telnet client功能只要选中配置选项就可以了,而telnetd需要devpts,因此要在启动脚本中开启devpts支持及启动telnetd。

在rcS中mount -a后面加入下面的内容:

mkdir /dev/pts
/bin/mknod /dev/pts/0 c 136 0
/bin/mknod /dev/pts/1 c 136 1
/bin/mknod /dev/pts/2 c 136 2
/bin/mknod /dev/pts/3 c 136 3
/bin/mknod /dev/pts/4 c 136 4
/bin/mknod /dev/pts/5 c 136 5
/bin/mount -t devpts devpts /dev/pts
在适当位置加入

/usr/sbin/telnetd &
修改后的etc/init.d/rcS如下所示:

#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
/bin/hostname CPEmbed

/sbin/ifconfig lo 127.0.0.1 up
/etc/init.d/ifconfig-eth0 restart

echo "---------------mount all-----------------"
/bin/mount -a

mkdir /dev/pts /bin/mknod /dev/pts/0 c 136 0 /bin/mknod /dev/pts/1 c 136 1 /bin/mknod /dev/pts/2 c 136 2 /bin/mknod /dev/pts/3 c 136 3 /bin/mknod /dev/pts/4 c 136 4 /bin/mknod /dev/pts/5 c 136 5 /bin/mount -t devpts devpts /dev/pts

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

/usr/sbin/telnetd &
/usr/sbin/vsftpd &

echo "******************************************"
echo "******************************************"
echo "** Kernel version: linux-2.6.32.2 **"
echo "** Date: 2014.02.12 **"
echo "******************************************"


2.8.6. 修改etc/passwd文件中root一行,改成下面这样

root::0:0:root:/root:/bin/sh


2.8.7. 修改好上面的内容后,用yaffs2文件系统镜像制作工具mkyaffs2image,制作根文件系统镜像。

#./mkyaffs2image root_fs root_fs.bin

将root_fs.bin烧到NandFlash就可以了。
















                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐