QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8620|回复: 78

grub installer for MagicLinux硬盘安装 0.1.0版发布

[复制链接]
发表于 2009-12-13 10:32:46 | 显示全部楼层 |阅读模式
0.1.0版本已经达到原来想要的效果,但是还没有全面的测试,在win7下有可能因为权限的问题出点小毛病,加权限运行就没问题了。在win下对linux的grub备份,然后改win引导,完全能实现,明天我发个我自己机器上的纯win启动器的MBR备份文件,大家选中恢复就可以由win引导了。
-------------------------------------------------------------
前几天看到有人说要一个win下的magic体验,后来想想这个类似于wubi的实在不好用,做出来也没多大价值(还不一定能做出来呢,linux和microsoft结合在一块,不敢想象)。鉴于有些人懒得改grub来硬盘安装,这里我写了一个添加grub,添加magiclinux硬盘安装引导项的qt console程序(方便以后用qt构建前台)。

现在实现的就只是在winxp下添加grub(我用的系统只有winxp和linux,手上还没有现成的vista和win7),通过简单修改boot.ini添加文件grldr menu.lst mbvmlinuz mbinitrd-hd.gz到C:盘下。

图形界面还没有做,实在不算什么程序。以后慢慢扩展了

接下来想要实现的功能:
1、列出所有可用磁盘,以及磁盘编号(包括windows下磁盘名称,磁盘卷标,grub下的磁盘分布(hd0,x))实现
2、GUI界面有选择安装iso文件在哪个磁盘。(功能实现已经想好,只剩体力活了)实现,不过没有解析iso文件
3、搞个vista系统,完成vista下安装grub(想用bcd.exe执行系统命令添加启动项)实现
4、扩展功能,在win下修复grub启动项,在menu.lst中写入一段寻找各个盘符下的 /menu.lst /boot/menu.lst /boot/grub/menu.lst 并执行这些fileconfig menu.lst 属于Grub编程了,再说吧
5、如果能更改mbr就可以做一个启动项备份恢复功能了。(这个地方还不知道怎样实现,有谁做过保存更改mbr的程序放出来学习一下吧)实现
----------------------------------------------------------------------
realese0.1.0
警告!MBR恢复功能出现问题,mingw+C++ 编译出来的程序对零扇区读写出现问题。头疼。
更新时间:2009年12月27日23:31:49
文件名:  magic_win_0.1.0_release.rar
下载地址:  http://www.rayfile.com/files/9bb ... -94a7-0014221b798a/
文件名:  magic_win_0.1.0_forXP_src.rar
下载地址:  http://www.rayfile.com/files/84d ... -a0b7-0014221b798a/
文件名:  magic_win_0.1.0_forVista_release.rar
下载地址:  http://www.rayfile.com/files/152 ... -b766-0014221b798a/
文件名:  magic_win_0.1.0_forVista_src.rar
下载地址:  http://www.rayfile.com/files/5f9 ... -9c59-0014221b798a/
release0.0.3
更新时间:2009年12月19日0:41:05
文件名:  0.0.3forWinxp.rar(release For WinXP)
下载地址:  http://www.rayfile.com/files/c8b ... -a61f-0014221b798a/
文件名:  magic_win_0.0.3_forXP_src.rar(source For WinXp)
下载地址:  http://www.rayfile.com/files/9b1 ... -967c-0014221b798a/
文件名:  0.0.3forVista.rar(release For Vista)
下载地址:  http://www.rayfile.com/files/82d ... -aca4-0014221b798a/
文件名:  magic_win_0.03_forVista_src.rar(source For Vista)
下载地址:  http://www.rayfile.com/files/b5a ... -99aa-0014221b798a/
release0.0.2
更新时间:2009-12-14 17:10:54
mbr保存功能错误,下一版本会更正和扩展
文件名:  magic_win_0.0.2.rar(含source)
下载地址:  http://www.rayfile.com/files/364 ... -8d99-0014221b798a/
需要的dll文件:
文件名:  essentialdll.rar
下载地址:  http://www.rayfile.com/files/1b4 ... -9024-0014221b798a/
与程序放在同一目录下执行

[ 本帖最后由 zy_sunshine 于 2009-12-28 13:50 编辑 ]

本帖子中包含更多资源

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

×
whistler_wmz 该用户已被删除
发表于 2009-12-13 10:53:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2009-12-13 11:18:05 | 显示全部楼层
读取硬盘绝对零扇区(MBR)  
   
  C:>DEBUG  
  -a   100                                                         '   从偏移100H开始输入汇编代码  
  XXXX:0100                   mov   ax,   0201         '   int   13H   参数:读取扇区,读一个扇区  
  XXXX:xxxx                   mov   bx,   1000         '   读出的数据存入偏移为   1000H   开始的地址  
  XXXX:xxxx                   mov   cx,   0001         '   int   13H   参数:读取零道、1扇区  
  XXXX:xxxx                   mov   dx,   0080         '   int   13H   参数:读取零柱面,硬盘(80H为第一硬盘)  
  XXXX:xxxx                   int   13                     '   调用DOS中断13H  
  XXXX:xxxx                   int   20                     '   调用DOS中断20H(结束运行)  
  -g=100                                                         '   运行偏移100H开始的代码  
   
  之后,第一硬盘的绝对0扇区的数据就存入了偏移量为1000H的地址中了  
   
  (2)写入软盘  
   
  续(1),MBR数据读入1000H地址后,(仍然在DEBUG环境中)  
   
  -n   a:mbr.dat                                             '   命名文件为A盘的MBR.DAT  
  -r   bx                                                           '   写入的字节数量由BX:CX指定  
  :0  
  -r   cx                                                           '   修改寄存器CX的值,指定写入的字节数量  
  :200                                                             '   准备写入512字节(200H)  
  -w   1000                                                       '   将偏移量为1000H开始的数据写入文件  
  -q                                                                 '   退出DEBUG环境  
  C:>  
   
  (3)从软盘读入MBR数据  
   
  C:>DEBUG  
  -n   a:mbr.dat                                             '   指定A盘的文件MBR.DAT  
  -l   1000                                                       '   将数据读入到偏移量为1000H开始的区域  
   
  (4)将MBR数据写入硬盘绝对零扇区  
   
  续(3),将MBR数据从软盘读入1000H地址后,(仍然在DEBUG环境中)  
   
  -a   100                                                         '   从偏移100H开始输入汇编代码  
  XXXX:0100                   mov   ax,   0301         '   int   13H   参数:写入扇区,写一个扇区  
  XXXX:xxxx                   mov   bx,   1000         '   写入的数据从地址   1000H   开始  
  XXXX:xxxx                   mov   cx,   0001         '   int   13H   参数:写零道、1扇区  
  XXXX:xxxx                   mov   dx,   0080         '   int   13H   参数:写零柱面,硬盘(80H为第一硬盘)  
  XXXX:xxxx                   int   13                     '   调用DOS中断13H  
  XXXX:xxxx                   int   20                     '   调用DOS中断20H(结束运行)  
  -g=100                                                         '   运行偏移100H开始的代码  
  -q  
  C:>
回复

使用道具 举报

发表于 2009-12-13 11:22:24 | 显示全部楼层
grubinst.exe是一个命令行方式的程序,它的功能基本上与不点的GRUB4DOS发行包中的bootlace.com(可以运行在纯DOS或者 Linux环境)相同,但是跟bootlace.com不同,grubinst完全是用C语言开发的,能够在Windows NT/2K/XP、Linux和FreeBSD等操作系统下编译并运行。
回复

使用道具 举报

发表于 2009-12-13 11:25:48 | 显示全部楼层
我看兄台只好写个界面就行了。。。
或者下载grub4dos的源码看看
grubinst-1.1-src-2008-01-01]# make
perl ./ver2h.pl version version.h               
gcc -nostdlib -DGRLDR_MBR -Wl,-N -Wl,-T -Wl,./ldscript -o grldr grldrstart.S
/usr/bin/ld: warning: .note.gnu.build-id section discarded, --build-id ignored.
objcopy -O binary grldr grldr.mbr                                             
rm grldr                                                                       
perl ./bin2h.pl grldr.mbr grub_mbr.h grub_mbr                                 
gcc -I./ -I. -DLINUX -c -MMD -o grubinst.o grubinst.c                          
gcc -I./ -I. -DLINUX -c -MMD -o utils.o utils.c
gcc -I./ -I. -DLINUX -c -MMD -o xdio.o xdio.c
gcc -I./ -I. -DLINUX -c -MMD -o keytab.o keytab.c
gcc -I./ -I. -DLINUX -ogrubinst grubinst.o utils.o xdio.o keytab.o
gcc -I./ -I. -DLINUX -MMD -o grubmenu grubmenu.c
Linux下也都编译成功了。

./grubmenu
Usage:
        grubmenu info grldr
        grubmenu print grldr
        grubmenu [-r] export grldr menu.lst
        grubmenu [-r] [-k] import grldr menu.lst

[ 本帖最后由 haulm 于 2009-12-13 11:30 编辑 ]
回复

使用道具 举报

发表于 2009-12-13 11:34:19 | 显示全部楼层
http://www.nohack.cn/bbs/thread-109023-1-1.html
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <fstream>
  5. using namespace std;
  6. int main(void)
  7. {
  8.         char type;
  9.         char buffer[512];
  10.         ifstream in("\\\\.\\PHYSICALDRIVE0",ios::binary|ios::in);
  11.         in.read(buffer,sizeof(buffer));
  12.         in.close();
  13.         ofstream out("mbr.txt",ios::binary|ios::out);
  14.         out.write(buffer,sizeof(buffer));
  15.         out.close();
  16.         memset(buffer,0,sizeof(buffer));
  17.         ofstream ZeroMBR("\\\\.\\PHYSICALDRIVE0",ios::binary|ios::out);
  18.         cout << "WARNING:sure to Zero the MBR? type"y" to Zero the MBR." << endl;
  19.         cin >> type;
  20.         if(type=='y')
  21.         {
  22.     ZeroMBR.write(buffer,sizeof(buffer));
  23.         }
  24.         ZeroMBR.close();
  25.         system("pause");
  26.         return 0;
  27. }
复制代码

[ 本帖最后由 haulm 于 2009-12-13 11:41 编辑 ]
回复

使用道具 举报

发表于 2009-12-13 12:28:08 | 显示全部楼层
lz没用过wubi吗
wubi这是一种安装方式,他建了一个文件,挂载成分区,所以不用分区
安装完除了读写速度和物理机有区别,其他的可以说一模一样
回复

使用道具 举报

 楼主| 发表于 2009-12-13 12:58:31 | 显示全部楼层

回复 6# haulm 的帖子

这些就足够了,我可以调用grubinst 或者用那段c++代码
C/C++来操作磁盘驱动这块还要研读......

grub4dos的源代码?呵呵 还从来没看过大项目的代码。趁这个机会试试。

感谢haulm提供的资料
回复

使用道具 举报

 楼主| 发表于 2009-12-13 12:59:34 | 显示全部楼层

回复 2# whistler_wmz 的帖子

等着你的游戏出来呢
回复

使用道具 举报

 楼主| 发表于 2009-12-13 13:00:21 | 显示全部楼层
原帖由 Jactry 于 2009-12-13 12:28 发表
lz没用过wubi吗
wubi这是一种安装方式,他建了一个文件,挂载成分区,所以不用分区
安装完除了读写速度和物理机有区别,其他的可以说一模一样


wubi还真没用过,感觉麻烦就没用,有空试试
回复

使用道具 举报

发表于 2009-12-13 13:32:00 | 显示全部楼层
你要注意,读写grub的代码我虽然没有尝试,但我使用dd指令时尝试过grub的保存和写入,具体写入字节应该小于512字节,具体多少我要查下好象是 MBR前446字节,全部写入会出问题,因为里面可能还有硬盘分区的信息,512字节最后64个字节记录了分区的大小、类型,哪个是活动分区等等(具体结构请参考相关资料)。
回复

使用道具 举报

whistler_wmz 该用户已被删除
发表于 2009-12-13 14:20:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2009-12-13 18:44:06 | 显示全部楼层

回复 11# haulm 的帖子

恩,这个了解。。我以后的版本想要加功能,就是分析mbr结构的东西,512个字节,怎么也分析明白了。
回复

使用道具 举报

 楼主| 发表于 2009-12-13 18:45:52 | 显示全部楼层

回复 11# haulm 的帖子

网速慢死了,程序就是传不上去了。。。。。发个帖子都发重了

[ 本帖最后由 zy_sunshine 于 2009-12-13 19:08 编辑 ]
回复

使用道具 举报

发表于 2009-12-13 18:59:33 | 显示全部楼层
原帖由 Jactry 于 2009-12-13 12:28 发表
lz没用过wubi吗
wubi这是一种安装方式,他建了一个文件,挂载成分区,所以不用分区
安装完除了读写速度和物理机有区别,其他的可以说一模一样

其实不一样的。你仔细用过就知道了。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-23 03:12 , Processed in 0.068623 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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