用buildroot做的initrd,shell启动失败,大虾支持!
是一个ks8695的板子,ks8695是arm922t的内核,目前内核看起来好像正常,在inittab中加如了串口终端getty的指令,输入帐号root,root帐户不需要验证密码,应该得到shell了,但是实际是又回到了登录getty的控制下,在内核的do_execve中加入了调试信息输出,证明确实调用到了/bin/sh,但是/bin/sh很快退出了,怎么回事情呢?会不会和缺少哪个动态连接库有关系呢?详细信息如下
Freeing init memory: 76K
check ramdisk_execute_command:/linuxrc 启动了/linuxrc了
do_execve(/linuxrc) success return:0 挂文件系统
do_execve(/bin/mount) success return:0
do_execve(/bin/mount) success return:0
do_execve(/bin/mount) success return:0
do_execve(/bin/hostname) success return:0
do_execve(/sbin/ifconfig) success return:0 配置网络
do_execve(/sbin/route) success return:0
do_execve(/etc/init.d/rcS) success return:0 进入inittab脚本了
do_execve(/bin/touch) success return:0
do_execve(/sbin/hotplug), return:-2
do_execve(/sbin/hotplug), return:-2
do_execve(/sbin/getty) success return:0 启动了getty
do_execve(/sbin/syslogd) success return:0
do_execve(/sbin/hotplug), return:-2
do_execve(/sbin/hotplug), return:-2
do_execve(/sbin/getty) success return:0 启动了getty
do_execve(/sbin/getty) success return:0 启动了getty
do_execve(/sbin/hotplug), return:-2
do_execve(/sbin/hotplug), return:-2
do_execve(/usr/bin/tail) success return:0
do_execve(/sbin/klogd) success return:0 启动了日志
Welcome to the console. getty把/etc/issue的内容print了出来
uclibc login: root 输入了用户明
do_execve(/bin/login) success return:0 login成功
do_execve(/bin/sh) success return:0 启动shell
do_execve(/sbin/getty) success return:0 shell退出,再来getty
Welcome to the console.
uclibc login:
[ 本帖最后由 liliaoyuan 于 2006-8-8 10:39 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
uclibc用的什么版本的阿?daily snapshot?这个好象有问题的,用0.9.28的吧
试验了把rdinit=/bin/sh,目前的提示是
Busybox v1.2.0 (2006.08.09-13:56+0000) Built-in shell (msh)
enter 'help' for a list of built-in commands.
dir
ls
help
输入回显了,但是没有任何响应
会不会是shell跑到起他的终端下去了啊?没在当前的终端上?
把busybox的shell换成了hush了,启动shell的提示有些变化了,但是还是瞬间退出了
可以看到shell打印出来的:
Busybox v1.2.0 (2006.08.09-13:56+0000) Built-in shell (msh) ???我选择的是hush啊,怎么是msh了??
enter 'help' for a list of built-in commands..
我的initrd是做成cpio格式的,内核是2.6.17, init指定的是/linuxrc,所以大家看到的日志里的父进程都是linuxrc,为什么啊为什么?
直接用sh做init还没试,现在已经call到了sh的,就是不知道shell为什么没起来,我先检查一下busybox中shell的配置,稍后再尝试用sh做init,我这boot loader比较烂,不支持配置内核参数
直接用sh做init也不?
busybox中shell选的是ash,busybox生成initrd的时候建立了/bin/sh->/bin/busybox和/bin/ash->/bin/busybox, 对于sh和ash busybox不能自动关联?那要建/bin/sh->/bin/ash->/bin/busybox?
我先把shell指定成了ash, 跑到ash的时候提示
ash start...
Please press Enter to activate this console
然后按回车,日志就显示
Dec 21 17:00:17 uclibc daemon.info linuxrc: Starting pid 151, console /dev/console
Dec 21 17:00:17 uclibc user.warn kernel: do_execve(/bin/ash) success return:0
Dec 21 17:00:17 uclibc daemon.info linuxrcrocess '/bin/ash' (pid 151) exited. Scheduling it for restart..
[ 本帖最后由 liliaoyuan 于 2006-8-9 09:28 编辑 ]
用 init=/bin/sh 呢
/bin/sh 是不是 /bin/busybox 的连接?
busybox 中有没有选择默认的 shell? 没选的话是没有 sh 的.
[ 本帖最后由 connet 于 2006-8-9 09:07 编辑 ]
把busybox编译成静态的了,现象和原来一样,看来和动态连接库没多少关系了,然后又把inittab的getty去掉了,直接起了个shell,操作方式是在inittab里加了行“::askfirst:/bin/sh”,把原来的“#ttyAM0::respawn:/sbin/getty -L ttyAM0 38400 vt100”注销了,在inittab中把/var/log/message打印了出来,用的是"ttyAM0::respawn:/usr/bin/tail -f /var/log/messages",所以里面好多信息重复了,一个是由printk输出的,一个是进入/var/log/message后tail出来的, 启动的整个信息如下
Freeing init memory: 76K
check ramdisk_execute_command:/linuxrc
do_execve(/linuxrc) success return:0
do_execve(/bin/mount) success return:0
do_execve(/bin/mount) success return:0
do_execve(/bin/mount) success return:0
do_execve(/bin/hostname) success return:0
do_execve(/sbin/ifconfig) success return:0
do_execve(/sbin/route) success return:0
do_execve(/etc/init.d/rcS) success return:0
do_execve(/bin/touch) success return:0
do_execve(/sbin/hotplug), return:-2
do_execve(/sbin/hotplug), return:-2
do_execve(/sbin/syslogd) success return:0
do_execve(/sbin/klogd) success return:0
do_execve(/sbin/hotplug), return:-2
do_execve(/sbin/hotplug), return:-2
do_execve(/sbin/getty) success return:0
Please press Enter to activate this console. do_execve(/sbin/getty) success return:0
do_execve(/usr/bin/tail) success return:0 <==*****************tail 出来的 message
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.info kernel: Serial: Micrel KS8695 UART driver version: 2.6.1.0
Dec 31 17:00:12 uclibc user.info kernel: ttyAM0 at MMIO 0xf00fe000 (irq = is a KS8695
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc daemon.info linuxrc: Starting pid 149, console /dev/ttyAM0: '/usr/bin/tail'
Dec 31 17:00:12 uclibc daemon.info linuxrc: Starting pid 143, console /dev/tty1: '/sbin/getty'
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: RAMDISK driver initialized: 4 RAM disks of 16384K size 1024 blocksize
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.info kernel: mice: PS/2 mouse device common for all mice
Dec 31 17:00:12 uclibc user.info kernel: TCP bic registered
Dec 31 17:00:12 uclibc user.info kernel: NET: Registered protocol family 1
Dec 31 17:00:12 uclibc user.info kernel: Freeing init memory: 76K
Dec 31 17:00:12 uclibc user.warn kernel: check ramdisk_execute_command:/linuxrc
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/linuxrc) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/bin/mount) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/bin/mount) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/bin/mount) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/bin/hostname) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/ifconfig) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/route) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/etc/init.d/rcS) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/bin/touch) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/syslogd) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/klogd) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/hotplug), return:-2
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/getty) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/sbin/getty) success return:0
Dec 31 17:00:12 uclibc user.warn kernel: do_execve(/usr/bin/tail) success return:0
do_execve(/bin/sh) success return:0 <===***********启动了一个sh
Please press Enter to activate this console.
Dec 31 17:01:53 uclibc daemon.info linuxrc: Starting pid 152, console /dev/console: '/bin/sh' <=********又开始tail了,因为用的是tail -f,有了新的就刷出来,日志里也显示启动sh了
Dec 31 17:01:53 uclibc user.warn kernel: do_execve(/bin/sh) success return:0 <==*****启动成功了
Dec 31 17:01:53 uclibc daemon.info linuxrc: Process '/bin/sh' (pid 152) exited. Scheduling it for restart. <===***********瞬间又退出了, 同一秒里发生的事情,也没有错误的原因,
do_execve(/bin/sh) success return:0 <===****又开始新的一轮shell过程了
Please press Enter to activate this console.
Dec 31 17:01:55 uclibc daemon.info linuxrc: Starting pid 153, console /dev/console: '/bin/sh'
Dec 31 17:01:55 uclibc user.warn kernel: do_execve(/bin/sh) success return:0
Dec 31 17:01:55 uclibc daemon.info linuxrc: Process '/bin/sh' (pid 153) exited. Scheduling it for restart.
先用busybox 静态连接测试