主题 : initramfs启动linux的问题,执行/init失败, 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 16283
精华: 0
发帖: 67
金钱: 335 两
威望: 67 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2010-03-16
最后登录: 2021-07-28
楼主  发表于: 2011-12-26 15:51

 initramfs启动linux的问题,执行/init失败,

本人试图在自己的mips开发板上弄一个mips的initramfs启动linux的内核,我参考本站一篇有关initramfs成功启动linux的文章,我想问一下:initramfs启动linux需要向linux内核传递参数吗?怎么传?好像没有cmdline的东西,
是不是我的initramfs文件系统没有挂载成功啊?
谢谢!
[ 此帖被xiaolubk在2012-03-02 17:22重新编辑 ]
级别: 侠客
UID: 16283
精华: 0
发帖: 67
金钱: 335 两
威望: 67 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2010-03-16
最后登录: 2021-07-28
1楼  发表于: 2011-12-26 16:13
busybox: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, for GNU/Linux 2.6.18, with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70401, stripped
我手动传递init参数:init=/sbin/init也是以上的串口输出,我的initramfs根文件系统/sbin/目录下面是有init链接文件的,它指向bin/busybox。如何知道我的initramfs文件系统是否挂载成功啊
级别: 侠客
UID: 16283
精华: 0
发帖: 67
金钱: 335 两
威望: 67 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2010-03-16
最后登录: 2021-07-28
2楼  发表于: 2011-12-26 17:08
我在编译内核时指定了我的initramfs根文件系统所在的目录,linux内核在make vmlinux时就已经把initramfs根文件系统包含进去,生成的initramfs_data.cpio应该没有什么用吧?
级别: 侠客
UID: 16283
精华: 0
发帖: 67
金钱: 335 两
威望: 67 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2010-03-16
最后登录: 2021-07-28
3楼  发表于: 2011-12-27 09:04
linux内核才13多M,生成的是initramfs_data.cpio不是gz压缩包才2.35M,我制作的initramfs根文件系统大小680M,initramfs不是自动编入linux内核的吗?所以我只make vmlinux就可以了吧?没有另外使用initramfs_data.cpio
[ 此帖被xiaolubk在2012-03-02 17:22重新编辑 ]
级别: 侠客
UID: 16283
精华: 0
发帖: 67
金钱: 335 两
威望: 67 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2010-03-16
最后登录: 2021-07-28
4楼  发表于: 2012-01-08 21:53
我在根文件系统的etc/init.d/rcS中有:
“#! /bin/sh
echo "Processing etc/init.d/rc.S"
#hostname ${HOSTNAME}
hostname up-tech
echo " Mount all"
/bin/mount -a
echo " Start mdev...."
/bin/echo /sbin/mdev > proc/sys/kernel/hotplug
mdev -s

照您说的init已经找到,init进程解析inittab中需要执行rcS,为什么没有打印出“Processing etc/init.d/rc.S”,谢谢
级别: 侠客
UID: 16283
精华: 0
发帖: 67
金钱: 335 两
威望: 67 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2010-03-16
最后登录: 2021-07-28
5楼  发表于: 2012-01-08 22:07
BusyBox的init进程会依次进行以下工作:(参考<<构建嵌入式LINUX系统>> p201)
1.       为init设置信号处理过程
2.       初始化控制台
3.       剖析/etc/inittab文件
4.       执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS
5.       执行所有导致init暂停的inittab命令(动作类型:wait)
6.       执行所有仅执行一次的inittab(动作类型:once)
您的意思是第1步,第2步出问题了?我感觉,init是我用命令#ln -s bin/busybox init链接到了/bin/busybox了,我的busybox静态编译了,是不是我的busybox编的有问题?
级别: 侠客
UID: 16283
精华: 0
发帖: 67
金钱: 335 两
威望: 67 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2010-03-16
最后登录: 2021-07-28
6楼  发表于: 2012-01-09 16:05
我可能找到问题了:
我的交叉编译链编出的可执行程序都是MSB格式的,如何向它传递参数编出LSB的呢?
补充:
我改写的Makefile的CROSS_COMPILE来完成交叉编译。十分感谢!
级别: 侠客
UID: 16283
精华: 0
发帖: 67
金钱: 335 两
威望: 67 点
贡献值: 0 点
综合积分: 134 分
注册时间: 2010-03-16
最后登录: 2021-07-28
7楼  发表于: 2012-01-09 16:33
另外如何选择busybox的命令啊?我的bin目录里面好像有太多的链接文件