免费注册 查看新帖 |

Chinaunix

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

根文件制作cramfs [复制链接]

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



Cramfs根文件系统制作
一    准备制作文件系统的目录及文件
Mkdir rootfs    #rootfs为文件系统目录
cd  rootfs      #进入该目录
mkdir bin dev etc lib proc sbin sys usr mnt tmp var boot root home
mkdir usr/bin usr/lib usr/sbin lib/modules
通过在网上查找资料,认为可以根据自己想做成什么样的文件系统来建立文件夹目录,
如果只是测试是否能移植成功,那么基本的文件启动所需的目录及文件就够了。如果移植
Cramfs那就更用不了多少了,个人认为移植Cramfs就是能让新学者了解个过程,有个概念,这个人件系统是只读的,以后开发是不行的。但移植比较简单,第一次移植还是建议以它为例。
http://blog.chinaunix.net/u2/78837/showart_1180556.html
http://www.diybl.com/course/6_system/linux/Linuxjs/2008826/137708.html
下面准备文件系统启动所需的各个文件,/linuxrc ,/etc/fstab ,/etc/inittab ,/etc/init.d/rcS
启动时这4个文件就够了。
1  linuxrc
$ vi linuxrc
#!/bin/sh
echo "mount /etc as ramfs"
/bin/mount -n -t ramfs ramfs /etc      
/bin/cp -a /mnt/etc/* /etc   #这句可以考虑去掉

echo "re-create the /etc/mtab entries"
# re-create the /etc/mtab entries
/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/2 /

//mount some file system
echo” -----mount /dev/shm 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

exec /sbin/init

以上挂载的位置确实需要首先创建那个文件夹,比如/bin/mount –n –t tmpfs tmpfs /dev/shm
如果没有建立/dev/shm就会mount失败,同时需要在fstab文件中有相应的处理(尚不是很清楚,网上看到有这样说的)
修改该文件权限
chmod 775 linuxrc
注意:我在内核配置时,在boot options中设置过一个参数
noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc mem=64M

2 在etc文件夹下创建fstab 文件

proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
3在etc文件夹下创建inittab 文件
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin umount -a -r
::shutdown:/sbin/swapoff –a
4        在etc文件夹下创建init.d/rcS
#! /bin/sh
echo "----------mount all"
/bin/mount –a
5 创建节点  
以root用户执行,创建节点
mknod -m 600 dev/console c 5 1
mknod -m 666 dev/null c 1 3
二 busybox
Busybox的理解:
http://blog.chinaunix.net/u2/80919/showart.php?id=1409206
起初我用的是1.9.1 制作完后执行时总是出现下面的问题
Failed to execute /linuxrc.  Attempting defaults...
Kernel panic - not syncing: No init found.  Try passing init= option to kernel.
这个问题在网上查了很多,但却没找到体别合适的说法,后来在
http://www.diybl.com/course/6_system/linux/Linuxjs/2008826/137708.html
这篇文章中提到用了1.1.3版本的busybox,选择了Support for devfs 这个选项(在1.9.1中是没有的),同时按照该网友的操作选择以下几个选项:
1  Init Utilities------〉Support reading an inittab file
这样可以根据自己编写的inittab文件初始化;“Support running commands with a controlling-tty”应该选中,否则会提示非常困扰的“/bin/sh: can't access tty; job control turned off”的提示,尽管可以进入控制台命令行。
2  Linux System Utilities---〉“Support loopback mounts”和“Support for the old /etc/mtab file”
3 在Shell选项中,应该选中默认shell:ash,否则不会生成sh,导致不能解释脚本文件
4 busybox setting—〉install option----〉Don’t use /usr 选上,以免覆盖本地的/usr目录
5 另外我选择了采用静态库的方式
  注:在采用动态库时,需要执行
/opt/crosstool/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-readelf -d busybox
查看该busybox安装时所需要到的库,然后将开发板lib目录中的这些库考到根文件系统制作时的lib目录中,但我却始终没有在开发板的lib中找到这些文件,所以采用了静态库,遗憾的是安装完后在_install目录中的lib文件夹里居然是空的。

5         执行make
注意:在1.9.1版本中的Makefile文件中体系结构变量采用的是ARCH,交叉编译变量采用的是CROSS_COMPILE,并且可以在Makefile文件中直接修改这两个变量,然后直接make就可以了。而1.1.3的Makefile中确没有找到对,同时变量名字也不一样.
1.1.3中的编译是采用下面的方式:
make TARGET_ARCH=arm CROSS= arm-9tdmi-linux-
6         编译完成后 make install
7         会生成_install 目录,将该目录中的除linuxrc外的其他文件夹,bin ,sbin ,usr, lib(不同的版本生成的可能不一样,但bin 和sbin肯定是有的),复制到刚才创建的文件系统目录中,覆盖掉其中的对应文件夹,并更改执行权限(可执行)。
下载crams工具
       在该工具文件夹下执行make后会多出cramfsck和mkcramfs两个文件,最后回到创建的根文件系统所在目录,执行mkcramfs rootfs filesystem
就生成了我们的文件系统,filesystem

下载下去就OK了。
参考资料:
http://linux.chinaunix.net/techdoc/system/2008/09/10/1031407.shtml
http://blog.chinaunix.net/u1/34474/showart_485837.html
《Linux系统全线移植文档》

当然这些资料中都是给了过程,并没有解释,并且单独找一个操作时都没有成功,
后来进行了综合,可以说是蒙着碰到了,所以还需要继续理解一下,有了新的理解再来记录。

感谢david师弟,很细心,不浮躁,每次的问题经过他处理总是会有结果,这次经过我们的努力终于完成了bootloader,内核,文件系统的移植,初步熟悉了开发的过程,下一步就是驱动的移植。
另外有一个很深的体会:学习趁早,能在学校完成的就在学校完成,david继续努力。


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP