QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1928|回复: 8

还是关于 Livecd 的讨论

[复制链接]
发表于 2012-4-6 12:12:32 | 显示全部楼层 |阅读模式
制做一个微系统并且引导到 bash 环境,能够挂载和解压文件,现在简单地编译一个内核配置 busybox 就可以实现。但我一起没能搞定从现有的一个系统如何 mount 加载另一个系统并成功启动。
如果我把另一个系统解压出来在下一次启动后使用自然没问题,可就是不明白不重启是如何加载 mount 的系统的,手头的 Live 脚本没看懂,而且它对 udev 有要求,高于149 版本就不工作了,出现启动过多错误退出的 bug 。
如果基于现有的 mgaicwin 写个grub 引导配置,可以直接硬盘引导 Live。
其实安装程序有那么麻烦么?直接运行一个微系统,格式化后把所有东西扔进硬盘,安装 grub,重启。
发表于 2012-4-6 14:06:35 | 显示全部楼层
“如果基于现有的 mgaicwin 写个grub 引导配置,可以直接硬盘引导 Live”
我这么干过一回,修改mgaicwin的menu.lst,把2.5光盘镜像直接解压到c:。
就是magiclinux好像没有live下的安装程序
回复

使用道具 举报

发表于 2012-4-7 17:41:19 | 显示全部楼层
exec chroot /path/to/new/root /sbin/init
执行这个命令的 bash 脚本的 PID 必须是 1 。
之后你就可以启动新 root 里面的系统了。

不过 chroot 不是最优命令,最好的选择是 switch_root (和另外一个类似的命令,忘了是什么了,两个命令一个是老版本一个是新版本)。
回复

使用道具 举报

发表于 2012-4-8 00:34:05 | 显示全部楼层
slax没有直接用udev管理设备,而是先用mdev -s加载设备,切换到目的根目录后再切换到udev管理设备。
ubuntu的加载代码用好多的文件写成不同的脚本函数,一个接一个的调用,真难看懂,我参照代码修改了后代码简洁了一点,加载文件就没问题了,有需要我发上来提供参考。
回复

使用道具 举报

 楼主| 发表于 2012-4-8 05:48:19 | 显示全部楼层
当然需要,非常感谢。
回复

使用道具 举报

发表于 2012-4-8 10:20:10 | 显示全部楼层
udev 需要跑成服务才有意义。在没有切换到新根下面时,最好不要启动任何的程序。
所以 mdev 生成一下磁盘设备就足够使用了,而且这东西也很小,用不了多少 initrd 的容量。只要能挂载到新的 root 目录,任何 /dev/ 里面的东西都是多余的(除了 /dev/console ,这东西运行脚本需要……)

不过我现在还有一点不知道,initrd 占用的内存空间会不会因为 chroot 或者 switch_root 后被释放?如果没有释放,怎么才能让系统释放这部分的内存占用?
回复

使用道具 举报

 楼主| 发表于 2012-4-8 11:09:09 | 显示全部楼层
mdev 是 busybox 的工具,我试过加载运行个 linux 基础运行环境是肯定不成问题的。init 也是 busybox 的内容,毛病在于当我把目标系统挂载后,因为要重新挂载硬件,加载目标系统时就会对原来系统挂载的自己产生疑问,断掉脐带有点困难。。。
回复

使用道具 举报

发表于 2012-4-9 01:24:59 | 显示全部楼层
initrd是解压到/dev/ram0上,然后内核从/dev/ram0上加载根文件系统,chroot不会清除内存,switch_root 就是清除内存和切换根文件系统的组合。
还有一个问题是用mdev -s加载会带来代码的复杂,slax上增加了很多加载usb模块的代码,如果从维护角度来看还是参考cdlinux的代码好点。但cdlinux不能照搬,cdlinux没有切换根文件系统,用squashfs的initrd必须先加载aufs否则加载是会报/dev是只读文件系统,如果先加载了aufs后再次重定位aufs的分支就难于理解了。本来aufs的加载代码我都没理解透,还有就是写加载aufs的目录不能用从根目录起描写的绝对路径。

发个写好没多久的加载cd和搜索磁盘上iso镜像加载后在加载里面的squashfs的镜像脚本,代码可以成功的加载文件,放上来仅供参考,注意在inirtd上用的/sbin/blkid不能用busybox的,需要把系统里的/sbin/blkid和动态链接库拷到initrd去,/lib/udev/vol_id在新一点的udev上已经剔除了,要找版本老一点的udev 源码编译一个,用推荐udev75的源码编译后拷到initrd,这个版本不用依赖动态链接库。文件我原来设计成存放到/etc/live/setroot上,initrd调用,切换到根文件系统必须第一个进程操作,用分支进程会报错。

怎么论坛不支持7zip的文件上传啊。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2012-4-9 08:04:05 | 显示全部楼层
这个论坛现在有点乱,上传图片都不显示。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-4-20 23:57 , Processed in 0.075041 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表