安利下,fbinst是个万能启动盘制作工具,能引导多种类型系统,网管必备。。。
使用fbinstTool制作启动盘时,碰到无法启动引导程序问题,提示”no menu”信息。
google搜索没有结果,只好尝试自己排查问题。首先fbinst是个开源程序,因此最简单办法就是看代码为何出现如此错误。
搜索no menu,可以看到相关代码在fbmbr.S1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 movb $FBM_TYPE_MENU, %cl
call find_first_item
1:
jc 1f
subb $1, %bl
jc boot_item
call find_next_item
jmp 1b
1:
movw $ABS(err_no_menu), %si
jmp fail
...
err_no_menu:
"no menu\0"
可以看到是在查找FBM_TYPE_MENU这个类型的数据时失败所致,继续回溯调用路径,可以看到这部分代码在parse_menu label下,而调用parse_menu的地方只有一个1
2
3
4
5
6
7
8
9
10
11
12movw $ABS(menu_file), %si
pushw %si
call check_file
popw %si
jc 1f
call load_file
jmp parse_menu
...
menu_file:
"\0" FB_MENU_FILE
FB_MENU_FILE就是要查找的目标,看看它是什么,搜索可以发现其定义在fbinst.h,#define FB_MENU_FILE "fb.cfg"
所以问题是这个文件找不到,这个文件其实是有的,它就是fbinst菜单
原来默认启动项指向了一个不存在的条目,这才想起来因为之前配置过其它引导条目,后又删除忘记恢复default所致。。。
修改后,正常启动。