免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1419 | 回复: 0
打印 上一主题 下一主题

做了一个yaffs的rootfs [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-04 16:08 |只看该作者 |倒序浏览

做了一个yaffs的rootfs
1 下载yaffs2.tar.gz,网址
http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2.tar.gz
解压,里面有个patch-ker.sh,用来给内核打补丁使内核支持yaffs
./patch-ker.sh c KERNELDIR
执行了这个补丁就相当于在kernel/fs下面mkdir了一个文件yaffs2,把原来yaffs2目录下的.c
.h都拷到kernel/fs/yaffs2中,并且修改了kernel/fs下的Makefile和Kconfig
这样子make mennuconfig的时File systems
---> Miscellaneous filesystems
---> 里面就有yaffs2啦
====================================================================================
2 编译内核   YAFFS2
file system
support                                                        
            
-*-   512 byte / page
devices   
====================================================================================
3 下载busybox:
http://www.busybox.net/downloads/busybox-1.9.0.tar.bz2
编译busybox,注意在Makefile
ARCH           
?= arm
CROSS_COMPILE   ?=
arm-linux-
我的arm-linux-gcc是3.3.2,make menuconfig,看需要的命令选上,不需要的就不选了
(待研究:在我的机子上,当arm-linux-gcc为3.4.1时,编译任意版本busybox的时候insmod命令会报错,
当arm-linux-gcc为3.3.2,编译1.9.0以上版本busybox时,brctl和ifenslave便不过去)
make,make install,在_install文件夹里有三个文件夹和一个文件:bin sbin usr linuxrc
====================================================================================
4 找个地方mkdir yaffs,把bin sbin usr linuxrc拷贝进来,另外还需要mkdir etc dev proc
root lib等
====================================================================================
5 最重要的就是dev 和 etc啦,因为关系到rootfs能不能起来
dev 目录下要
sudo mknod console c 5 1
sudo mknod null c 1 3
sudo mknod ttySAC0 c 204 64
sudo mknod mtdblock0 b 31 0
sudo mknod mtdblock1 b 31 1
sudo mknod mtdblock2 b 31 2;
注:因为在启动init进程的时候,需要sys_open((const char __user
*)"/dev/console",O_RDWR,0),所以至少在/dev下面建好两个设备节点console和null,
不然会报错:Warning:unable to open an initial console
---------------------------------------------------------------------------------
etc下主要有4个文件关系到启动:inittab fstab profile init.d/rcS HOSTNAME
passwd
inittab:这是init进程启动的第一个子进程,他是一个脚本,可以执行用户想执行的操作
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh #把respawn换成askfirsk,init进程会先输出"Please
press Enter to activate this console"才启动子进程
---------------------------------------------------------------------------------
fstab文件:表示执行mount -a后将要挂载的文件系统
none           
/proc         
proc   
defaults      
0 0
none           
/dev/pts      
devpts
mode=0622      
0 0
tmpfs         
/dev/shm      
tmpfs  
defaults      
0 0
---------------------------------------------------------------------------------
profile文件:
export HOSTNAME=`uname -s`
export USER=`id -un`
export PS1="[$USER@$HOSTNAME]# "
---------------------------------------------------------------------------------
init.d/rcS文件:
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
trap ":" INT QUIT TSTP
/bin/mount -t proc none /proc
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 192.168.1.100 up
/bin/hostname -F /etc/HOSTNAME
---------------------------------------------------------------------------------
HOSTNAME文件中写上自己的HOSTNAME
---------------------------------------------------------------------------------
passwd文件:
root::0:0:root:/:/bin/sh
---------------------------------------------------------------------------------
6 把安装arm-linux-gcc的目录里的lib文件夹的库拷到lib文件夹里面
cp *.so* ~/rootfs/yaffs/lib -d
虽然并不是每个都能用到,不过还是这样最省事了,考虑镜像空大小的时候可以根据应用程序对库的依赖关系来决定拷哪个库文件
arm-linux-readelf -a ./busybox|grep shared
====================================================================================
7 到网上下载最新rzsz
http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz
解压 tar zxvf  rzsz-3.38.tar.gz
安装  cd src ; make posix 。
编译生成rz sz,放入yaffs/bin 里面
====================================================================================
8修改制作mkyaffsimage工具

我的内核时2.6.25.16,因为内核中的ECC校验码的位置和yaffs文件系统的不一样,需要修改yaffs2/util/mkyaffsimage.c,不修改的话即使挂载成功,
内核也不认识文件系统里的内容,出现init进程创建的时候报错:Warning:unable to open an initial
console,所以需要打补丁
在yaffs2相同目录下运行 patch
-p1<./yaffs_util_mkyaffsimage.patch
打好补丁后发现yaffs2/utils里多了几个文件,执行make生成mkyaffsimage
mkyaffs2imsge两个工具:
====================================================================================
9 好了,现在使用这个工具来制作yaffs.img
mkyaffsimsge ./yaffs yaffs.img
10 现在把内核和rootfs烧进去看看能不能起来,起不来应该是etc里面的文件没有写好
vivi参数就用QQ2440默认的就行
Linux command line: noinitrd root=/dev/mtdblock2 init=/linuxrc
console=ttySAC0
====================================================================================
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/25572/showart_1359587.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP