问些wee菜单很怪的问题。
本帖最后由 求道者 于 2019-10-24 21:44 编辑今天我打算调试PE
然后在虚拟机两个虚拟机里创建了共享的虚拟磁盘
因为要引导bootmgr而且位置不在根目录
所以用了wee
怪事就发生了
这是wee菜单
只有两行
find --set-root /boot/bootmgr
/boot/bootmgr
用BOOTICE安装
结果
这是什么鬼东西?
于是找了别的安装程序
chenall写的grub4dos批处理
http://chenall.net/post/grub4dos_instwee/
我还改了 不改用不了
18行的这个
(hd%2)+1,0x1b0删了
,0x1b0改后能用……
但也一样,不能正常引导
下意识看了一下hex
发现7830位置成这样了
?
这也……
难道
我改成
保存
重启虚拟机
能用了……
………………
所以wee的配置文件到底是在从哪个地址开始的?
7840?
还是有什么标记字符?
还有就是grub4dos_instwee为何不能用?
grub4dos批处理又大改了吗?
本帖最后由 hilsonma 于 2019-10-25 06:04 编辑
用bootice v1.3.3.2版本安装wee63.mbr,将默认菜单修改一下就可以了。
使用bootice v1.3.4 (x86)版本安装wee就会出现类似楼主所讲的问题。
这个问题只要用bootice v1.3.3.2版本修改wee菜单就可以解决。
在wee命令行下输入正确的菜单命令也可以启动。
例如:find --set-root /boot/bootmgr /boot/bootmgr
只要存在 \boot\bootmgr 就可以引导 \boot\bootmgr
然后bootmgr会使用\boot\bcd配置启动
只要存在\boot\bcd 且bcd设置正确就可以成功启动。
使用bootice v1.3.3.2内置的wee63.mbr (2013-08-28) 则wee菜单从7830开始
使用wee63.mbr (2016-01-30) 则wee菜单从7850开始
而楼主的图应是从7850开始的,所以前图 -sefind ...... 出错,后图 find ...... 正确。
hilsonma 说得对。bootice 的某个版本(1.3.4) 好像有问题。用之前的版本(1.3.3.2)似乎正常。
bootice 的有问题的版本,似乎计算错了菜单的开始位置,导致启动失常。
不过,也有 workaround:
把菜单最开头的一句,重复写 2 遍,或写 3 遍,可能就躲过 bootice 的 bug 了。
使用chenall的weesetup (2013-09-25)的话,如果带-w参数使用外部 wee63.mbr (2016-01-30) 也会产生楼主所说的问题,如果使用weesetup内部自带wee63.mbr则没有问题。 hilsonma 发表于 2019-10-25 15:12
使用chenall的weesetup (2013-09-25)的话,如果带-w参数使用外部 wee63.mbr (2016-01-30) 也会产生楼主所说 ...
这么说来,有可能这是根本原因。猜测,假如 BOOTICE 的内部采用的是 weesetup ,那么,两者可能出现同样的毛病。 本帖最后由 hilsonma 于 2019-10-25 17:00 编辑
建议使用bootice v1.3.3.2 来安装其内置的wee63.mbr (2013-08-28) 到硬盘mbr.
并修改其内置的菜单为适合自己的内容。
起码其中这句 find --set-root --active command +1 要改掉。
因为此句有歧义
歧义一:
find --set-root --active
command +1
歧义二:
find --set-root --active command
+1
应该原本是要一,结果可能是二,所以可能会出错。 hilsonma 发表于 2019-10-25 16:59
建议使用bootice v1.3.3.2 来安装其内置的wee63.mbr (2013-08-28) 到硬盘mbr.
并修改其内置的菜单为适合自 ...
较早的 BOOTICE 版本,其内置的 wee63.mbr 中的程序代码,有可能不是最新的。
大家可以考虑下述方案是否可行:
用最新版的 BOOTICE 1.3.4 来安装,菜单采用默认的,不更动它(这是因为 bootice 有可能把你想定制的菜单内容,放在错误的偏移地址处,造成问题)。然后手动用 WinHex 之类的扇区编辑工具来编辑尾部的菜单,编辑成最新的菜单即可,也就是,chenall 网站上的那个 preset_menu_used。
本帖最后由 求道者 于 2019-10-25 19:47 编辑
不点 发表于 2019-10-25 17:37
较早的 BOOTICE 版本,其内置的 wee63.mbr 中的程序代码,有可能不是最新的。
大家可以考虑下述方案是 ...
这就很怪了……
用BOOTICE1.3.4安装
看起来就会多一点字节
我尝试过从7830开始填0
然后在7830写入配置
wee似乎就不工作了
但2楼贴出来的图片
似乎表明7810开始就没数据了
清空7830应该没问题啊
果然wee版本变了吗?
最新版本从7850开始写数据?
但BOOTICE1.3.4用默认菜单
似乎是从7840开始写配置
-e似乎是配置开始段的标记
不点你不记得wee这个查找配置是怎么工作的了吗?
用BOOTICE1.3.3写入外部wee(2016-01-31)会得到这个
这应该是正确的吧
chenall还在活动吗?
能修BUG吗? 你用 hex 编辑器打开 wee63.mbr,看看尾部的菜单起始于何处,就全清楚了。 本帖最后由 求道者 于 2019-10-25 20:36 编辑
不点 发表于 2019-10-25 20:00
你用 hex 编辑器打开 wee63.mbr,看看尾部的菜单起始于何处,就全清楚了。
似乎wee63.mbr菜单以2D 65 20开头和结尾
似乎不用2D 65 20结尾也行
所以这个是标记开始?
我删了菜单开头的2D 65 20似乎也能启动……
我进一步从7848写入了菜单
然后
从784A开始写菜单就OK
这三个字节应该是个错误,应该删除。前后共有 6 个字节应该删除。
可能是由于编译环境不是 bash 而是其它shell 造成的。
当初发布的 wee63.mbr 应该没有这三个字节的。
不点 发表于 2019-10-25 20:43
这三个字节应该是个错误,应该删除。前后共有 6 个字节应该删除。
可能是由于编译环境不是 bash 而是其 ...
是不是其他的地方也有这种垃圾字节?
汇编程序这样不应该…… 有没有谁在 Linux 下编译一下看看? 本帖最后由 求道者 于 2019-10-25 20:54 编辑
不点 发表于 2019-10-25 20:46
有没有谁在 Linux 下编译一下看看?
怎么弄?
我make一下试试
不一定有编译环境
make
gcc -m32 -mno-sse -g-c asm.S -o ./asm.o
gcc -m32 -mno-sse -g -Os -fno-stack-protector -fno-builtin -mpreferred-stack-boundary=2 -fno-strict-aliasing -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -nostdinc -Wall -Wmissing-prototypes -Wunused -Wshadow -Wpointer-arith -Wundef-c builtins.c -o ./builtins.o
builtins.c: In function ‘map_func’:
builtins.c:1210:8: warning: variable ‘p’ set but not used [-Wunused-but-set-variable]
char *p;
^
In file included from builtins.c:25:
builtins.c: At top level:
shared.h:389:29: warning: inline function ‘log2_tmp’ declared but never defined
extern inline unsigned long log2_tmp (unsigned long word);
^~~~~~~~
gcc -m32 -mno-sse -g -Os -fno-stack-protector -fno-builtin -mpreferred-stack-boundary=2 -fno-strict-aliasing -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -nostdinc -Wall -Wmissing-prototypes -Wunused -Wshadow -Wpointer-arith -Wundef-c disk_io.c -o ./disk_io.o
In file included from disk_io.c:23:
shared.h:389:29: warning: inline function ‘log2_tmp’ declared but never defined
extern inline unsigned long log2_tmp (unsigned long word);
^~~~~~~~
gcc -m32 -mno-sse -g -Os -fno-stack-protector -fno-builtin -mpreferred-stack-boundary=2 -fno-strict-aliasing -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -nostdinc -Wall -Wmissing-prototypes -Wunused -Wshadow -Wpointer-arith -Wundef-c fsys_ext2fs.c -o ./fsys_ext2fs.o
fsys_ext2fs.c:38:1: error: static declaration of ‘log2_tmp’ follows non-static declaration
log2_tmp (unsigned long word)
^~~~~~~~
In file included from fsys_ext2fs.c:33:
shared.h:389:29: note: previous declaration of ‘log2_tmp’ was here
extern inline unsigned long log2_tmp (unsigned long word);
^~~~~~~~
shared.h:389:29: warning: inline function ‘log2_tmp’ declared but never defined
make: *** 错误 1报错
看起来是GCC版本问题
但README没写用哪个版本……
不点知道吗? 求道者 发表于 2019-10-25 20:44
是不是其他的地方也有这种垃圾字节?
汇编程序这样不应该……
汇编程序不会有这些垃圾字节。
菜单是 shell 处理后附加在尾部的。编译的时候,如果发行版的 shell 不是 bash,就可能出现这个错误。
要强制把 /bin/sh 弄成指向 bash 才行。 不点 发表于 2019-10-25 20:55
汇编程序不会有这些垃圾字节。
菜单是 shell 处理后附加在尾部的。编译的时候,如果发行版的 shell 不 ...
SHELL=/bin/bash
SRC_C := builtins.c disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ntfs.c
SRC_S := asm.S wee63start.S
BUILDROOT := .
LDFLAGS :=
Makefile写死了
恐怕不是这样 求道者 发表于 2019-10-25 20:49
怎么弄?
我make一下试试
不一定有编译环境
这些错误,你应该可以帮忙排除。你自己写 c 程序,有错了,不是一样需要排除吗?
求道者 发表于 2019-10-25 20:56
Makefile写死了
恐怕不是这样
那应该不会出现垃圾字节。
你给出的编译结果可能比较早,那时还没有添加
SHELL=/bin/bash
本帖最后由 求道者 于 2019-10-25 21:11 编辑
不点 发表于 2019-10-25 20:59
这些错误,你应该可以帮忙排除。你自己写 c 程序,有错了,不是一样需要排除吗?
这不是等于把wee的编译环境迁移到新版的gcc吗?
这工作量有点大 不点 发表于 2019-10-25 21:08
那应该不会出现垃圾字节。
你给出的编译结果可能比较早,那时还没有添加
[分享] 自己动手,在WINDOWS系统中搭建GRUB4DOS编译环境
chenall一直是在WINDOWS下编译的?
会出问题不奇怪 工作量应该不大。新版 gcc 检查严格罢了。都是无关紧要的错误。 不点 发表于 2019-10-25 21:18
工作量应该不大。新版 gcc 检查严格罢了。都是无关紧要的错误。
大概有一处报错
主要是警告
错误:对‘log2_tmp’的静态声明出现在非静态声明之后
说不定能搞好吧
先找个ubuntu的容器部署gcc4.5编译看看 求道者 发表于 2019-10-25 21:16
[分享] 自己动手,在WINDOWS系统中搭建GRUB4DOS编译环境
chenall一直是在WINDOWS下编译的? ...
wee 的编译,不像 grub4dos 那样难。
wee 最好在 Linux 下编译。 不点 发表于 2019-10-25 21:25
wee 的编译,不像 grub4dos 那样难。
wee 最好在 Linux 下编译。
总之出货了
gcc4.8下还是可以编译的
我用的archlinux貌似没有非常旧的gcclib
只有gcc4.5本身 不点 发表于 2019-10-25 21:25
wee 的编译,不像 grub4dos 那样难。
wee 最好在 Linux 下编译。
应该就是了
估计是编译环境引起的垃圾字节
或者gcc版本的问题……
这就没有
如果编译的能用
我就上传二进制文件吧
好的,你上传,让大家都试试。 你编译的,好像比以前编译的体积大了几十个字节。不如以前编译的好。还是用以前编译的吧。只需把 6 个垃圾字节去掉便可。 不点 发表于 2019-10-25 22:02
好的,你上传,让大家都试试。
下载后校验sha512值(大概7z不损坏的话不会有问题,建议以防万一)
b8d2772c49cc62d878688bb69407abf34e6a1c4ae0de1beed223a7037bb84ed6894c25d3c4bea38f85a6da29905b8a47a637350d85ef9fa3ef255a1ccd07d193wee127.mbr
b93014b26ac6187ee7b1f3f26f6d93e1cb33c9efdb902e166604ad3d10eec1b1d73f3743b3d027a1befe36bf2e076e048f8b0db4ad4a2e3e00d72cd24a75211bwee63.mbr
本帖最后由 求道者 于 2019-10-25 22:42 编辑
不点 发表于 2019-10-25 22:07
你编译的,好像比以前编译的体积大了几十个字节。不如以前编译的好。还是用以前编译的吧。只需把 6 个垃圾 ...
也许是gcc4.8的问题
貌似提过一嘴
wee需要在gcc 4.5的环境中编译,否则生成的文件太大超过了32KB。如果你不需要编译wee可以略过以下内容。
某些版本的gcc编译出来文件会变大……
Ubuntu 16.04貌似才有gcc4.5
按这个尿性来看
都不用迁移gcc……
怎么回事啊
哪天迁移到gcc9 试试?(兴许修复了体积过大的BUG)
说不定会更小 不点 发表于 2019-10-25 22:07
你编译的,好像比以前编译的体积大了几十个字节。不如以前编译的好。还是用以前编译的吧。只需把 6 个垃圾 ...
其实不是大了
是反而小了
如你所见我用4.8编译的二进制文件
菜单部分是从7828开始的,16年C佬编译的菜单部分是从784A开始的
至于最后为什么体积反而大些
那显然是因为“preset_menu changed and fix Makefile issue”
更新菜单似乎就没编译……
不过虽然我浪费了挺长时间寻找合适的老系统安装gcc4.5
但也算有所收获
不知道是不是依赖环境的问题用gcc4.5编译后wee反而会大到7d2e
用gcc4.8编译体积更小可能是因为修复BUG 或者做了优化……
那么可以考虑迁移到gcc9了
感想就是gcc4.5实在太老了……
能裝的系统都够难找
Makefile还是不好,没弹性,换gcc版本还要用链接……
还有就是Docker救了我的命
最后发现了即开即用的gcc容器镜像
总算在现在搞完了……
明天试试gcc4.9或者gcc5 之类的编译wee
或者修了那个BUG 用gcc9