QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1789|回复: 4

[继续存档]用于制作LiveUSB的initrd文件的脚本和需要的文件。

[复制链接]
发表于 2008-7-22 22:58:14 | 显示全部楼层 |阅读模式
其实就三个文件:
init 是 initrd 里面用的 initscript 。
mkinitrd 是制作 initrd 的脚本文件。修改一下里面的 KERNEL_VERSION="2.6.25.10-smp" 为 KERNEL_VERSION=`uname -r` 就是获取当前内核的 ko 文件,我没有设置这个是因为我现在为了保证 ML  / 分区的“纯净”,都是在 ubuntu 上面制作的,运行这个脚本 chroot 过去运行。这个时候 uname -r 依然是 ubuntu 的内核。
udev-etc.tar.bz2 是 udev 的配置文件,简化后的,应该工作正常。至少我这里目前正常。


制作 initrd 也很简单,ML 2.1 rc1 先安装 busybox ,别的不用装。
之后解压缩附件,进入目录 sh mkinitrd.sh 就行了。会出现一个 img 目录和一个 initrd 文件。
img 不删除的目的是为了挑错方便。不需要的可以删掉。
再一次制作需要先删掉 img 防止引起混乱。

建议先做一个纯净的 squashfs 镜像后再来制作 initrd ,busybox 在桌面机器上没有用处的。

引导时,这个 initrd 支持 3 个 kernel 的 cmdline 参数:

root=
这个参数不再是表示 root 分区的位置,而是表示 squashfs 所在的分区,支持 UUID= 方式的参数,应该也支持 LABEL= 。我只测试了 FAT32 上面的 UUID 。

img=
这个参数表示的是 squashfs 文件的文件名,表示 squashfs 文件在 root= 那个分区的什么位置&名字。

shell
命令行里面有这个,就不会运行最后一步的 switch_root ,而是启动一个 sh ,这个 sh 是 exec 方式启动的,exit 会导致内核失去 PID 为 1 的进程而出错。同时也可以 exec switch_root /sysroot /sbin/init 继续进入 squashfs 里 ML 的引导。

其余的参数 init 不会处理,内核支持的参数内核自己会处理,后面 ML 启动需要的参数 ML 自己应该也会处理。并非只支持这三个参数了。

但现在依然解决不了 LiveUSB 关机时会尝试卸载在 initrd 里面挂载的分区,已经用 mount -n 方式不写入 mtab 了。但还是不管用,估计 ML 关机卸载是基于 /proc/mounts 这个文件,但我不知道怎么才能不写入这里而避开关机卸载失败的问题。

具体制作一个完整的 LiveUSB 的方法,我过几天有空写一个。想制作的,可以先准备一个纯净的 ML squashfs 镜像文件,ML 2.1 rc1 已经自带制作 squahsfs 的命令 mksquashfs 了。不过不支持 LZMA 压缩,可以下载我前面存档过的 mksquashfs ,那个是打过补丁的,支持 LZMA 压缩。

仅供交流,数据丢失后果自负

本帖子中包含更多资源

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

×
 楼主| 发表于 2008-7-22 23:01:42 | 显示全部楼层
http://www.linuxfans.org/bbs/thread-184138-1-5.html
上次的存档。
只需要 mksquashfs
三个 ko 是不是针对 2.6.25.10 的。
回复

使用道具 举报

发表于 2008-7-23 08:24:43 | 显示全部楼层
仓库里的squashfs-tools已经支持lzma压缩了。
回复

使用道具 举报

 楼主| 发表于 2008-7-23 18:48:05 | 显示全部楼层

自带的还不支持……为什么内核支持 lzma ,光盘里面却还用不支持 lzma 的版本?
回复

使用道具 举报

发表于 2008-7-24 07:38:23 | 显示全部楼层
新手,来学习学习!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-23 18:28 , Processed in 0.042887 second(s), 17 queries .

© 2021 Powered by Discuz! X3.5.

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