[已解决]只是改了initramfs的rootmnt(感觉应该和原值等价),就kernel panic了

最大的社区版本,Ubuntu的发源地
回复
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

[已解决]只是改了initramfs的rootmnt(感觉应该和原值等价),就kernel panic了

#1

帖子 科学之子 » 2017-01-16 23:36

只是改了initramfs的rootmnt(感觉应该和原值等价),就kernel panic了
猜测实验见3楼,不知是否正确

代码: 全选

Kernel panic : not syncing  Attempted to kill init
我没有办法看到前面的日志(谁有方法?谢谢)
具体修改:

代码: 全选

# Parse command line options
for x in $(cat /proc/cmdline); do
	case $x in
	init=*)
		init=${x#init=}
		;;
	root=*)
		ROOT=${x#root=}
		ROOT=$(resolve_device "$ROOT")
		if [ -z "${BOOT}" ] && [ "$ROOT" = "/dev/nfs" ]; then
			BOOT=nfs
		fi
                ;;
	rootdir=*)
		ROOTDIR=${x#rootdir=}
                ;;
#后面的省略...
在init里面增加了一个ROOTDIR
在local_mount_root函数里的最后一行里加上:
rootmnt=${rootmnt}${ROOTDIR}
使用的时候:
root=/dev/sda5 rootdir=/debian
sda5里有一个用debootstrap安装的debian系统
看不出这用起来和原来的rootmnt有什么区别

Tue Jan 17 01:55:15 CST 2017补充:
没看出来有什么不等价的地方
但把那行对rootmnt的赋值换成"mount --bind ${rootmnt}${ROOTDIR} ${rootmnt}"
把rootmnt绑定到rootdir就可以正常引导启动了.
Sat Jan 21 10:35:55 CST 2017 补充:
猜测见3楼
上次由 科学之子 在 2018-08-29 18:27,总共编辑 4 次。
头像
astolia
论坛版主
帖子: 6436
注册时间: 2008-09-18 13:11

Re: [原理不懂但故障已解决]只是改了initramfs的rootmnt(感觉应该和原值等价),就kernel pan

#2

帖子 astolia » 2017-01-18 17:58

懒得帮你看代码,只提供个思路
检查在你添加的代码之前,有哪些地方直接或间接用到了rootmnt的值
检查在你添加的代码之后,又有哪些地方直接或间接用到了rootmnt的值
检查如果这些地方rootmnt的值不一致会发生什么情况
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: [故障解决,原理也有测猜]只是改了initramfs的rootmnt(感觉应该和原值等价),就kernel pa

#3

帖子 科学之子 » 2017-01-21 11:20

通过实验发现1楼修改的赋值时rootmnt什么位置并不重要;
重要的是rootmnt必须是一个被mount列出来的挂载点
例如把1楼的赋值修改为如下:

代码: 全选

mkdir -p /my_a/b/c
	mount --bind ${rootmnt}${ROOTDIR} /my_a/b/c
	rootmnt=/my_a/b/c
仍可正常启动

并且这种猜测也找到了参考佐证:
// Show usage, it says new root must be a mountpoint
https://github.com/mozilla-b2g/busybox/ ... tch_root.c
回复