initramfs文件系统的制作及yaffs2根文件系统制作(busybox-1.20.2)

//--------------------------------------------------------------------------------------------

// 作者:longtian635241(longtian_huang@urbetter.com

// 论坛ID:idea6410

// 版权:idea6410

// 平台:友坚idea6410开发板

// 发布日期:2012-11-19

// 最后修改:2012-11-19

//http://www.urbetter.com/main.asp

//----------------------------------------------------------------------------------------------


initramfs文件系统的意义:本人主要用来在内存中运行根文件系统,将文件系统解压到falsh的指定位置~当然可以用来做sd卡的自动升级方案!

 

硬件平台:VMware+ubuntu10.04+友坚UT6410系列皆可

软件:busybox-1.20.2(busybox-1.20.1也可)

交叉编译工具:arm-linux-gcc-4.3.2.tar.bz2(arm-linux-gcc-4.3.3.tar.gz测试通过,但arm-linux-gcc-4.5.1.tar.gz不行)

 

步骤:

     1、建立交叉编译环境将arm-linux-gcc-4.3.2.tar.bz2解压到/usr/local/arm下面,再终端中设置环境变量:export PATH=$PATH:/usr/local/arm/4.3.2/bin/

(其他设置方法如将上句添加到/etc/profile,最好设置为全局的否则后来还有莫名的问题)

     2、解压busybox-1.20.2

     3、进入busybox,并配置busybox

            a、make defconfig(默认配置)

            b、make menuconfig

                        Busybox Settings  --->Build Options  --->(/usr/local/arm/4.3.2/bin/arm-linux-) Cross Compiler prefix

                        Busybox Settings  --->General Configuration  --->[*] Don't use /usr  

             我就修改了这两条其他都是默认,如果想知道没条定义请百度吧!

      4、编译、安装

             a、make

             b、make install(由于前面没设置安装位置将默认安装在本文件夹的_install文件夹下)

      5、进入_install建立其他根文件系统文件夹.我写了个脚本creat_initramfs.sh

#!/bin/sh
echo "--------Create root,dev......"
mkdir root dev etc bin sbin mnt sys proc lib home tmp var usr
mkdir usr/sbin usr/bin usr/lib usr/modules usr/etc
mkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.d
mkdir lib/modules
chmod 1777 tmp

sudo mknod -m 600 dev/console c 5 1
sudo mknod -m 666 dev/null c 1 3

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

 

然后保存脚本修改权限:chmod +x creat_initramfs.sh

运行脚本!

 

“etc”目录

用来存放系统的配置文件。

在“etc”目录下面有如下常用的文件:

fstab:指明需要挂载的文件系统;

group:用户组;

inittab:init 进程的配置文件;

passwd:密码文件;

profile:用户环境配置文件;

mdev.conf:因为2.6.18 版本开始linux 放弃使用devfs 而采用udev(mdev 是udev 的简化版本),这里的

mdev.conf 文件可以是空,也可以按照一定规则来编写,这里我采用了为空;

resolv.conf:存放DNS 信息的文件,访问外网时需要DNS 的信息。

常用的目录有:

init.d 目录:启动文件目录,该目录下面有个“rcS”的文件,里面存放了系统启动时配置以及自启动加载

的进程等;

sysconfig 目录:在我们的文件系统里面,该目录下面存放了名为“HOSTNAME”的文件,该文件内容为:

hcm,这句话就是我们在文件系统里面看到那个“[root@ hcm/]” rc.d 目录:在我们的文件系统里面用来存放一些自启动所要调用的脚步等;

 

 

 

       6、建立相关文件

            vi etc/profile

# Ash profile
# vim: syntax=sh

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]\# '
PATH=$PATH

HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH

 

          vi etc/init.d/rcS

#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
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/hostname hcm

/bin/mount -n -t proc none /proc
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t usbfs none /proc/bus/usb
/bin/mount -t ramfs none /dev

echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
/bin/hotplug
# mounting file system specified in /etc/fstab
mkdir -p /dev/pts
mkdir -p /dev/shm
/bin/mount -n -t devpts none /dev/pts -o mode=0622
/bin/mount -n -t tmpfs tmpfs /dev/shm
/bin/mount -n -t ramfs none /tmp
/bin/mount -n -t ramfs none /var
mkdir -p /var/empty
mkdir -p /var/log
mkdir -p /var/lock
mkdir -p /var/run
mkdir -p /var/tmp

/sbin/hwclock -s -f /dev/rtc

syslogd
/etc/rc.d/init.d/netd start
echo "                        " > /dev/tty1
echo "Starting networking..." > /dev/tty1
#sleep 1
#/etc/rc.d/init.d/httpd start
#echo "                        " > /dev/tty1
#echo "Starting web server..." > /dev/tty1
#sleep 1
#/etc/rc.d/init.d/leds start
#echo "                        " > /dev/tty1
#echo "Starting leds service..." > /dev/tty1
#echo "                        "
#sleep 1
echo "*************************************"
echo "     Welcome to Root FileSystem!     "
echo "                                     "
echo "    
http://write.blog.csdn.net/postlist          "
echo "*************************************"


mkdir /mnt/disk
mount -t yaffs2 /dev/mtdblock3 /mnt/disk

mount -t vfat /dev/mmcblk0p1 /home/
mount -t yaffs2 /dev/mtdblock3 /mnt/
cd /mnt/
tar zxvf /home/urbetter-rootfs-qt-2.2.0.tgz
sync
cd /
umount /mnt/
umount /home/


/sbin/ifconfig lo 127.0.0.1

chmod +x etc/init.d/ifconfig-eth0
/etc/init.d/ifconfig-eth0

/bin/qtopia &
echo "                                  " > /dev/tty1
echo "Starting Qtopia, please waiting..." > /dev/tty1
echo "                                  "
echo "Starting Qtopia, please waiting..."

修改权限:chmod +x /etc/init.d/rcS

否则会出现:can't open /dev/tty2: No such file or directory

若修改权限还有问题则:
解决办法:

 ln -sf /dev/null /dev/tty2
 ln -sf /dev/null /dev/tty3
 ln -sf /dev/null /dev/tty4

 

                      vi etc/fstab

proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
none /var ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0

 

                       vi etc/inittab


::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin umount -a -r
::shutdown:/sbin/swapoff -a

 

                      vi usr/etc/init
#!/bin/sh
ifconfig eth0 192.168.3.111 up
ifconfig lo 127.0.0.1

 修改权限:chmod +x usr/etc/init

                     

                        vi mdev.conf(空文件)

 

             7、拷贝相应工具链中的库文件到lib当中

                     hcm@hcm-desktop:~/hcm/busybox-1.20.2/_install$ cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/*so* lib

             8、制作initramfs最重要的一步,因为initramfs运用的连接文件为init而不是linuxrc所以将linuxrc更名为init,这样initramfs文件就制作成功了!

             9、将制作的initramfs文件系统包含进内核实验(这里有两种方法)

              a、直接包含:            General setup  --->   (/home/hcm/hcm/busybox-1.20.1/_install) Initramfs source file(s) 

     b、将_install压缩:进入_install执行

find . | cpio -o -H newc > ../initrd.img.cpio 即cpio文件!

(这个没有亲自测试,客户测试了~和网上的find . | cpio -o -H newc | gzip > ../ramdisk.img 相比不能要 | gzip 

                        (至于其他选项默认的都已经选中,如果不行可以搜索下网上很多讲解)  

              10、make

             11、dnw c0008000

                     bootm c0008000即可进入根文件系统

 

最后进入根文件系统是没问题的,但是进入终端会出现unknown id 0这是在etc/下面缺少passwd、group文件(这两个文件可以拷贝pc linux上的)

 

                vi  etc/passwd

root::0:0:root:/:/bin/sh
ftp::14:50:FTP User:/var/ftp:
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
plg:$1$wwtsqwnk$sWaEJGcJFTqaCW18sbUK7/:502:502:Linux User,,,:/home/plg:/bin/sh
              

  第二部分:制作yaffs2根文件系统并测试

                          当我们制作initramfs前7步时,就不要将linuxrc改为init了!

                          接上面第7步:

                          8:运用mkyaffs2image制作yaffs2根文件系统

              hcm@hcm-desktop:~/hcm/busybox-1.20.1$ ./mkyaffs2image _install/ fs.img

工具下载地址:http://download.csdn.net/detail/longtian635241/4622041

                         9:下载位置的确定-MTD分区

[    2.326536] Creating 5 MTD partitions on "NAND 256MiB 3,3V 8-bit":
[    2.332637] 0x0000000c0000-0x000000100000 : "misc"             //mtdblock0

[    2.340938] 0x000000100000-0x000000900000 : "recovery"       //mtdblock1
[    2.346767] 0x000000900000-0x000000c00000 : "kernel"          //mtdblock2
[    2.350781] 0x000000c00000-0x00000cc00000 : "rootfs-combin"//mtdblock3
[    2.388025] 0x00000cc00000-0x000010000000 : "cache";          //mtdblock4
 

                          烧写:nand write.yaffs c0008000 C00000 xxxxx(文件大小)

                       10、设置环境变量

setenv bootargs root=/dev/mtdblock3 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200
setenv bootcmd nand read c0008000 900000 300000\;bootm c0008000

                        这样yaffs2的任务就成功了!yaffs能否成功运行还得看你的内核和u-boot是否支持!这样做出来的是直接支持友坚6410系列的开发板的,一般是内核支不支持的问题~

 

 

 

 
 
友坚最近推出了一款EXYNOS4412、android210,调试了wifi,AVIN,camera,Wcdma,GPS,还有重力加速器,有兴趣的朋友可以关注哦~标配价格990,优惠多多哦(*^__^*) 嘻嘻……
友坚恒天已经正式推出exynos 4412开发板了哦!

 

              

 

 

 

 

 

 

             

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值