找回密码
 注册
查看: 996|回复: 5

急!安装程序开发中的一个内核的问题。HELP!!!!

[复制链接]
发表于 2003-6-29 14:07:27 | 显示全部楼层 |阅读模式
MagicInstaller 必须的 MagicBooter 是一个用于从软盘、光盘启动的
程序。相当于 anaconda 里面的 loader。目前主体结构已经基本完成。
但由于本人对内核掌握尚不够透彻,所以遇到非常古怪的问题。

1、我把 MagicInstaller 主映象制作成 cramfs (14.5M)。此映象在
普通环境下,可以用 loop device 加载。按以下步骤也可以从 ramdisk
加载:
    dd if=/dev/zero of=/dev/ram1 bs=1M count=15
    cat mi-initrd.cramfs > /dev/ram1
    mount /dev/ram1 tmp
但,用 MagicBooter,在启动后找到 mi-initrd.cramfs,然后写入
/dev/ram1。写入过后,经过校验(重新从/dev/ram1 读出并同
mi-initrd.cramfs 比较),完全一致。mount 也能成功以 cramfs
mount。但总是报告以下错误:
Error -3 while decompressing
c02df124(1684170437)-> c1364000(4096)

因此目前我只能把安装程序主映象做成 ext2。但这样主映象就要
占据 32M 空间,而 cramfs 由于是压缩的,只要占用 15M 空间。
缩小这个体积很有利于降低安装程序的运行条件。

请内核高手千万多多帮忙。

2、我虽然把 ntfs、reiserfs 等文件系统的支持编译进入内核,可启动
后 /proc/filesystems 中仍然没有 ntfs 和 reiserfs。难道它们都必须
是模块才行吗?

多谢!
排除了 MagicBooter 中的 bug,里程碑一就基本完成了!
 楼主| 发表于 2003-6-29 14:47:26 | 显示全部楼层
为了加快 MagicInstaller 的开发进度,我打算先搁置 cramfs 的问题。
就是先使用 ext2 文件系统。

这里补充一下 MagicBooter 的设计思想。
1、首先 MagicBooter 从一个小 ext2 中启动(/dev/ram0),这个 ext2
文件系统只含有 MagicBooter 这一个可执行文件。此文件系统是可写的。
2、MagicBooter 根据配置文件的信息,扫描各种本地存储器,以寻找
完整的安装程序运行映象。
3、找到完整映象之后,将其存入 /dev/ram1。而后以只读方式加
载 /dev/ram1。加载点为 /tmp/full.mnt。
4、chroot /tmp/full.mnt。
5、chroot 后的启动脚本,在 /tmpfs 加载一个 tmpfs,并在其中创建
必要的目录。所有完整映象中必须修改的文件或目录,均以符号连接
的形式,指向此目录中的文件或子目录。

这里还要补充一个问题,就是,程序是否有可能知道,当前 initrd 是
从那个设备上获得的?比如说 initrd 可能是保存在软盘,也可能保存
在光盘,还可能保存在硬盘上。

谢谢
回复

使用道具 举报

发表于 2003-6-30 09:20:24 | 显示全部楼层
no idea about u 1. although i know where report this error. but do not know why. the error is zlib can not deflate u fs.

about u 2, then stranger, check u dmesg, if there is reiserfs version ... and ntfs driver version ...
then u should have this in u /proc/filesystems.

what kernel u use?
回复

使用道具 举报

 楼主| 发表于 2003-6-30 12:43:34 | 显示全部楼层
[quote:b725410b45="Dragonfly"]no idea about u 1. although i know where report this error. but do not know why. the error is zlib can not deflate u fs.

about u 2, then stranger, check u dmesg, if there is reiserfs version ... and ntfs driver version ...
then u should have this in u /proc/filesystems.

what kernel u use?[/quote]

问题2 己解决,是因为我没有把 nls-iso8859-1.o 编译进内核。现在都可以看到了。
问题1 仍然没着落,等我有时间仔细研读一下内核中关于 cramfs 的源代码吧。
似乎 cramfs 在文件系统比较大的时候总是容易出这样的问题。好在 cramfs 有关
的源代码只有 500 多行。

我用的 kernel 是标准 linux-2.4.19 加上 xfs 补丁的内核,没有其它任何改动。
回复

使用道具 举报

发表于 2003-7-2 02:40:00 | 显示全部楼层
no i do not think so, i never choose that nls-iso8859-1.o but i can see reiserfs in /proc/filesystems.
回复

使用道具 举报

 楼主| 发表于 2003-7-2 09:36:35 | 显示全部楼层
[quote:2f420e85f4="Dragonfly"]no i do not think so, i never choose that nls-iso8859-1.o but i can see reiserfs in /proc/filesystems.[/quote]

哈,nls-iso8859-1 找不到,是 mount ntfs 分区的时候报告的错误。加上 nls-iso8859-1 之后就可以 mount ntfs 了。前面 ntfs 和 reiserfs 没有也许是我眼花没看到,哈哈。

MagicBooter 的调试环境十分麻烦,简直是一无所有啊!内核 + RootFS 必须小于 1.44M。

对了,哥们,我也是作嵌入式 linux 的,有机会多交流。

cramfs 仍然无法加载  
回复

使用道具 举报

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

本版积分规则

GMT+8, 2025-1-9 23:25 , Processed in 0.058422 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

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