7764|20

86

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

2.6内核构建rootfs的问题 [复制链接]

busybox我用了1.1X的版本 已经拥有了mdev

我开发板的硬件规格 S3C2410A ,64M nand falsh,64m sdram ,2个串口, 一个以太网口,两个USB口.

内核版本2.6.X


看了很多资料 关键几个文件为linuxrc fstab initab rcS

请了解比较清楚的朋友 帮我讲解一下这几个文件的关系

还有就是如何配置,或者应该按照那些规则去配置这几个文件.

又或者资料也可以.


如果觉得留言太麻烦 可以加我的QQ:36353663

(当然我还是希望能留言,因为这样也要让其它需要的朋友看到)

最新回复

原来不是能运行到 Failed to execute /linuxrc么? 是不是你原来做的实际上已经可以了,但是linuxrc不能执行而已,增加可执行属性:chmod +x linuxrc  详情 回复 发表于 2008-11-10 14:24
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一下
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
linuxrc 和 rcS 我也不熟悉
fstab 文件系统列表,系统启动时将根据该文件所说明的内容挂载文件系统
initab 初始化模式,如启动为图形模式,或者文本模式就在这里定义
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 
继续顶  这几天又看了一些 了解得还是不够深入
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
linuxrc是个符号链接,不用动
fstab是挂载文件系统的,向你这种情况一般就是空的就行了
initab确定开机和关机以及重启时的行为,比如开几个串口,输出信息到什么样的终端
rcS为系统启动的核心脚本文件,是一个sh文件,可以将自己的配置放在这里,也可以将自己
的配置写成脚本然后放在这里来执行,这个文件执行完毕后就会进入终端界面了
详细的可以看busybox中的文档,里面有很详细的解释
完整的你可以看busybox中的init这个命令的源代码,可能会有一个更好的理解
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢楼上的几位兄弟
我自己把busbybox的linuxrc删了 又写了个脚本 大家帮我看看是否有错误,顺便提点意见

#!/bin/sh

#挂载/etc为ramfs, 并从/mnt/etc下拷贝文件到/etc目录当中
echo "mount /etc as ramfs"
/bin/mount -n -t ramfs ramfs /etc
/bin/cp a /mnt/etc/* /etc

echo "recreate the /etc/mtab entries"
# recreate 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

#挂载/proc为proc文件系统
echo "mount/proc as proc"
/bin/mount -n -t proc none /proc

#挂载/sys为sysfs文件系统
echo "mount/sys as sysfs"
/bin/mount -n -t sysfs none /sys

exec /sbin/init
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
你这种做法类似于fedora/RedHat发行版中对ext3.ko模块的支持
你可以解压linux发行版/boot/initrd-x.y.z文件,看看它是怎么支持的
另外,一般情况下我们挂载文件系统都是放在rcS配置文件中!
貌似你想加速读取/etc/*下的配置文件?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 hngsc_0 的回复:
你这种做法类似于fedora/RedHat发行版中对ext3.ko模块的支持
你可以解压linux发行版/boot/initrd-x.y.z文件,看看它是怎么支持的
另外,一般情况下我们挂载文件系统都是放在rcS配置文件中!
貌似你想加速读取/etc/*下的配置文件?


我们挂载文件系统都是放在rcS配置文件
谢谢提醒 我还是规范点 把这个放回去好了

郁闷吖JFFS2至今还是问题不断

一直panic.............

jffs2_scan_inode_node(): CRC failed on node at 0x000028b4: Read 0x686fcac5, calculated 0x33df378e
Old JFFS2 bitmask found at 0x00005234
You cannot use older JFFS2 filesystems with newer kernels
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 128K
Failed to execute /linuxrc.  Attempting defaults...
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 
恩,上面这个估计是bootloader烧写内核的问题
比如你对Norflash分了三个区:boot区、kernel区、rootfs区,大小分别为1M、2M、12M
因为内核文件大小一般都在1M左右,也就是比为它分配的2M要小许多,这就可能造成每次烧写内核时(每次编译出来的内核一般不会相同大小)造成"缝隙"
一个简单的办法就是你在linux下用dd工具从/dev/zero 生成一个大约2M(比内核大)的全是0的文件,先用该文件擦除而不写(只擦不写,要写的时候就立刻断电),然后再烧写内核
你上面输出的消息也不一定全是jffs2文件系统的文件,确认下你那个/linuxrc文件能否正确执行先。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 hngsc_0 的回复:
恩,上面这个估计是bootloader烧写内核的问题
比如你对Norflash分了三个区:boot区、kernel区、rootfs区,大小分别为1M、2M、12M
因为内核文件大小一般都在1M左右,也就是比为它分配的2M要小许多,这就可能造成每次烧写内核时(每次编译出来的内核一般不会相同大小)造成"缝隙"
一个简单的办法就是你在linux下用dd工具从/dev/zero 生成一个大约2M(比内核大)的全是0的文件,先用该文件擦除而不写(只擦不写,要写的时候就立刻断…


我用的是nand flash 今天把 menuconfig 里面的HARD_WARE_ECC去掉 然后再把NAND_ECC_SOFT改成NAND_ECC_NONE上面的CRC问题消失了
但是出现了新的问题 如下:

JFFS2 notice: (1) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 128K
Failed to execute /linuxrc.  Attempting defaults...
Kernel panic - not syncing: No init found.  Try passing init= option to kernel.

继续求助
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
这还是内核没有找到你的 rootfs 阿!

我用的是nand flash 今天把 menuconfig 里面的HARD_WARE_ECC去掉 然后再把NAND_ECC_SOFT改成NAND_ECC_NONE上面的CRC问题消失了

这只是你禁止了校验,并不是这个问题没有了

bootloader烧写中的内核参数要和编译内核时指定的参数相同

Failed to execute /linuxrc.  Attempting defaults...

/linuxrc 你确认这个文件可以执行而且正确吗?
建议暂时还是使用busybox中的默认值,ok后再按照自己的想法去做
linuxrc -> bin/busybox
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

12
 
帮你顶一下
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 10 楼 hngsc_0 的回复:
这还是内核没有找到你的 rootfs 阿!

我用的是nand flash 今天把 menuconfig 里面的HARD_WARE_ECC去掉 然后再把NAND_ECC_SOFT改成NAND_ECC_NONE上面的CRC问题消失了

这只是你禁止了校验,并不是这个问题没有了

bootloader烧写中的内核参数要和编译内核时指定的参数相同

Failed to execute /linuxrc.  Attempting defaults...

/linuxrc 你确认这个文件可以执行而且正确吗?
建议暂时还是使用busybox中的默认…


非常奇怪 我用别人的rootfs嫁接成功了

现在正在仔细校对我当时做rootfs时出错的地方,问题分析完了我就结贴
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

14
 
[root@localhost rootfs]# tree
.
|-- bin
|   |-- [ -> busybox
。。。。。。。。。。。。。。。。。。(这些大约近百个都是软连接到busy的符号)
|   `-- zcat -> busybox
|-- dev
|   |-- console
|   |-- null
|   `-- rtc
|-- etc
|   |-- busybox.conf
|   |-- fstab
|   |-- fstab~
|   |-- init.d
|   |   |-- rcS
|   |   `-- rcS~
|   |-- inittab
|   |-- inittab~
|   |-- mdev
|   |   `-- mdev.conf
|   |-- mdev.conf
|   |-- profile
|   |-- profile~
|   `-- rc.dinit.d~
|-- home
|-- lib
|   |-- libc-2.6.1.so
|   |-- libc.so.6 -> libc-2.6.1.so
|   |-- libcrypt-2.6.1.so
|   |-- libcrypt.so.1 -> libcrypt-2.6.1.so
|   |-- libm-2.6.1.so
|   `-- libm.so.6 -> libm-2.6.1.so
|-- linuxrc -> bin/busybox
|-- mnt
|-- proc
|-- sbin
|   |-- adjtimex -> ../bin/busybox
|   |-- arp -> ../bin/busybox
|   |-- brctl -> ../bin/busybox
|   |-- chpasswd -> ../bin/busybox
|   |-- chroot -> ../bin/busybox
|   |-- crond -> ../bin/busybox
|   |-- depmod -> ../bin/busybox
|   |-- dhcprelay -> ../bin/busybox
|   |-- dnsd -> ../bin/busybox
|   |-- fakeidentd -> ../bin/busybox
|   |-- fbset -> ../bin/busybox
|   |-- fbsplash -> ../bin/busybox
|   |-- fdisk -> ../bin/busybox
|   |-- freeramdisk -> ../bin/busybox
|   |-- fsck -> ../bin/busybox
|   |-- fsck.minix -> ../bin/busybox
|   |-- getty -> ../bin/busybox
|   |-- halt -> ../bin/busybox
|   |-- hdparm -> ../bin/busybox
|   |-- hwclock -> ../bin/busybox
|   |-- ifconfig -> ../bin/busybox
|   |-- ifdown -> ../bin/busybox
|   |-- ifenslave -> ../bin/busybox
|   |-- ifup -> ../bin/busybox
|   |-- init -> ../bin/busybox
|   |-- inotifyd -> ../bin/busybox
|   |-- insmod -> ../bin/busybox
|   |-- klogd -> ../bin/busybox
|   |-- loadkmap -> ../bin/busybox
|   |-- logread -> ../bin/busybox
|   |-- losetup -> ../bin/busybox
|   |-- lpd -> ../bin/busybox
|   |-- lsmod -> ../bin/busybox
|   |-- makedevs -> ../bin/busybox
|   |-- man -> ../bin/busybox
|   |-- mdev -> ../bin/busybox
|   |-- mkfs.minix -> ../bin/busybox
|   |-- mkswap -> ../bin/busybox
|   |-- modprobe -> ../bin/busybox
|   |-- nameif -> ../bin/busybox
|   |-- pivot_root -> ../bin/busybox
|   |-- poweroff -> ../bin/busybox
|   |-- raidautorun -> ../bin/busybox
|   |-- rdate -> ../bin/busybox
|   |-- readprofile -> ../bin/busybox
|   |-- reboot -> ../bin/busybox
|   |-- rmmod -> ../bin/busybox
|   |-- runlevel -> ../bin/busybox
|   |-- setconsole -> ../bin/busybox
|   |-- setlogcons -> ../bin/busybox
|   |-- slattach -> ../bin/busybox
|   |-- start-stop-daemon -> ../bin/busybox
|   |-- sulogin -> ../bin/busybox
|   |-- swapoff -> ../bin/busybox
|   |-- swapon -> ../bin/busybox
|   |-- switch_root -> ../bin/busybox
|   |-- sysctl -> ../bin/busybox
|   |-- syslogd -> ../bin/busybox
|   |-- telnetd -> ../bin/busybox
|   |-- udhcpc -> ../bin/busybox
|   |-- udhcpd -> ../bin/busybox
|   |-- vconfig -> ../bin/busybox
|   |-- watchdog -> ../bin/busybox
|   `-- zcip -> ../bin/busybox
|-- sys
|-- tmp
`-- usr
这是我的rootfs的文件树 熟悉的人帮我看看缺少了什么文件

我可以用的rootfs是静态编译的 自己做的是动态编译加lib库的 这一点按道理是一样的吖
还是动态运行的需要特殊的运行脚本?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

15
 
JFFS2 notice: (1) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 120K

添加了链接库 结果在这里停下来了

http://blog.chinaunix.net/u1/58780/showart_1080300.html
我参考了这个网页的initab rcS 和fstab文件
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

16
 
你的文件系统应该没有什么问题
如果你是静态编译的,内核启动是不需要你的动态库的,动态库是为需要该库的可执行应用程序准备的
又看了一下你上面所有的内核输出消息,都是内核在执行init时出错或者要执行init时出错
内核代码里在/etc/init、/sbin/init 等几处寻找该文件,显然
Failed to execute /linuxrc.  Attempting defaults... 这个是找到了,说明此时内核找到了你的文件系统,但是执行到此处失败(该文件无法执行或者错误)
而下面的那个
Freeing init memory: 120K   执行这里,而没有后面的输出消息,貌似已经正确执行了你的启动脚本
但是/etc/inittab中的控制台配置有问题,导致后面的信息你看不到

http://blog.chinaunix.net/u1/58780/showart_1080300.html
这个里面的我看了下,它是用NFS的方式从网络启动的
root=/dev/nfs rw nfsroot=192.168.1.249:/home/jacky/root-s3c2410/rootfs ip=192.168.1.199:192.168.1.249:192.168.1.1:255.255.255.0:Jacky:eth0:off console=ttySAC0,115200 init=/linuxrc noinitrd

如果你是烧写到flash上的,至少你要改成类似下面的
root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc noinitrd console=ttySAC0,115200  
root=/dev/mtdblock2 指定你文件系统烧写到flash对应的设备节点上
rootfstype=jffs2 指定jffs2文件系统
console=.....  根据自己的需要设置对应的串口设置和波特率,上面你已经可以看到这里的输出,应该不用更改这里的内容了

你可以在/dev/目录下增加mtdblock[0-9]设备节点试试
mknod mtdblock0 b 31 0
mknod mtdblock1 b 31 1
........
mknod mtdblock9 b 31 9
分别对应你的flash设别节点
具体各种设别的主次设备号在内核的Documentaion目录中有文档说明
或者加上支持devfs
mount -t devfs none /dev/pts
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

17
 
root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc noinitrd console=ttySAC0,115200

我的是一模一样的

我注意到你的这句话:但是/etc/inittab中的控制台配置有问题,导致后面的信息你看不到

这里是如何写才是正确的?请指点

 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

18
 
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::restart:/sbin/init

tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff –a

我的initab 和这个一样
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

19
 
::respawn:/sbin/getty -n 115200 ttyS0 vt100

加一行这个试试,感觉你的问题不像是这个
把那个ttyS0改成你的串口设备
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

20
 
相互学习,谈不上指点~
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表