使用mingw32 + gcc-4.8.1 编译 使用 gcc 4.6 编译 |
本帖最后由 baikunlun 于 2019-7-18 13:45 编辑 这是个老贴了,我搜fbinst源码找到这里的,拿到源码就放Linux里面试了试,确实是因为64位GCC问题,强制m32编译是可以运行的,可以列出所有磁盘,但是无法进行其它操作了,貌似不能使用括号当做参数。看来移植还有很多工作要做。
在参数处理中做了下兼容,哈,可以了,更多idea等待开启
拿到windows后,使用mingw32 + gcc-4.8.1 编译, 一堆的错误,怎么办,大神给个提醒啊 ![]() |
2011yaya2007777 发表于 2017-3-12 07:45 看了下,这个是基本版,不是fbinstplus. 大家常用的fbinst1.6的有些命令,不支持。 比如 fbinst --hdlist 不支持。 也不知道格式化出来的盘和最新fbt1.7是否一致。 |
2011yaya2007777 发表于 2017-3-23 18:17 UUID你给我那个版本 可以用了 |
本帖最后由 求道者 于 2017-3-23 21:41 编辑 jianliulin 发表于 2017-3-23 17:14 第一次格式化的时候不知道为什么4K就没对齐…… 刚刚格式化的时候就4K对齐了 也许是眼花或者是设置了主分区的问题? 总之4K能对齐就太好了 然后就是发现缺少批量导入文件夹到拓展分区的办法 倒入文件夹貌似不能指定强制导入到拓展分区里 而且也没有批量转换文件到扩展分区的办法 一旦多选 特别是同时选定文件和文件夹就什么都不能做了 批量转换文件到拓展分区就更不可能了 ![]() 再一个就是编辑fba不能把img加入分区表 和yaya说的一样 这时候就没法直接用QEMU调试了 很烦 把fba搞成标准img磁盘镜像我没意见 yaya也没意见吧? 这么方便的东西就搞了吧 给yaya调试也方便啊 反正fbinst也改了这么多次 趁着1.7大改 就彻底改了吧 |
2011yaya2007777 发表于 2017-3-23 15:45 测试正常了。 |
2011yaya2007777 发表于 2017-3-23 15:45 其实我一直想修改fba的格式,让它变成标准的img文件(含分mbr,含fbinst内核),这样就可以直接用qemu等虚拟机直接测试。但这样破坏性太大,我怕被骂 0318版本目前导出来时候会忽略ud里面的序号为0的img文件。 格式化新版是有改善需求,目前没想出比较好的方案,如果谁有希望能提出来 |
2011yaya2007777 发表于 2017-3-23 15:45 现版本FbinstTool 完全用qemu虚拟机调试grub4dos还是不行 jianliulin说fba没有分区表 只能格式化u盘 然后好想要4k对齐 |
网友求道者上传了一个 fba,希望重现 bug。但是打开后没有加入分区表的 efi1.img。在 FbinstTool1.7 创建 efi1.img,也不能加入分区表。只好把 U 盘格式化。终于使问题定位。 希望改进 FbinstTool1.7: 在 fba 使创建的 efi1.img 可以加入分区表; 或者 将 U 盘导入 fba 时,增加一个选项,是否保存可见分区(默认不保存)。 |
160.76 KB, 下载次数: 3, 下载积分: 无忧币 -2
本帖最后由 2011yaya2007777 于 2017-3-23 15:30 编辑 是设置 debug=0 不显示信息。现在可以显示了。 另外问一下,fbinstTool 是否有可能对 img 映像文件进行操作?就像对真实 U 盘一样。复杂吗? 有时对 UD 进行测试,就得格式化一次 U 盘,还得再把 U 盘复制为 img 映像,挺麻烦。如果 fbinstTool 能像 BOOTICE 一样就好了。 |
读同一个u盘,0306版是正常的 |
fat16 |
读什么文件系统?tat?ntfs?等等。 |
什么都没有读到 |
写命令完毕,再执行读命令,没有变化? |
2011yaya2007777 发表于 2017-3-20 19:36 uuid 命令没有任何显示,似乎命令没有执行 |
本帖最后由 2011yaya2007777 于 2017-3-22 08:43 编辑 uuid和vol能否分开两个命令,因为脚本里面需要用%?%单独获取uuid或vol来使用。 uuid --write (hdn,y) UUID vol vol (hdn,y) vol --write-bpb (hdn,y) VOL_bpb 请 jianliulin 看看,这样是否可以了。 |
本帖最后由 不点 于 2017-3-12 21:31 编辑 那你试验一下,看看 sizeof (time_t) == ?的时候,它不再 failed,那就知道 time_t 有多长了。 可以试试 1,2,8,应该有一个是 time_t 现在的真实值。 就是说,修改一下 fbinst.c 的 main 函数里面的 sizeof (time_t) == 4,此处的 4 分别试试用 1,2,8 来代替,进行试验。 -------------------- ——唉,痴呆了—— 呵呵,啥也不用改,只在 main () 的 sizeof (time_t) == 4 的前面插入一行 printf 打印出 sizeof (time_t) 的值,不就知道它的长度了吗? printf("\n sizeof(time_t) is %d \n", sizeof(time_t)); -------------------------------------------- 它肯定是 8 字节嘛,不可能是单字节或双字节。 那么,我猜 time_t 是被 64 位的 Linux (或 gcc)的系统头文件定义为 8 字节了。我猜我们后续所尝试的重新定义是失效的。 所以,无论我们怎么改,time_t 的长度都保持 8 的值不变。 ====================== 因此,我们不能去修改 time_t 的定义了。我们只能修改 time_t 这个变量的名字,比如说,把它修改为 my_time_t,只要它不与系统变量名相同,即可。 然后,我们定义 my_time_t 为四字节,这就 OK 了。 jianliulin 如果觉得可行的话,那就不妨试试这个方案。 |
还是不可以,如下: [jianliulin@localhost fbinst]$ make cc -c -o fbinst.o fbinst.c cc -c -o xdio.o xdio.c cc -c -o keytab.o keytab.c cc -ofbinst fbinst.o xdio.o keytab.o [jianliulin@localhost fbinst]$ ./fbinst fbinst: fbinst.c:3376: main: Assertion `sizeof (time_t) == 4' failed. 已放弃(吐核) [jianliulin@localhost fbinst]$ |
time.h 开头有如下代码,用来定义 time_t:
试试修改成下面这样:
就是说,在任何情况下,都使用 32 位的 time_t。 试试看成不成? |
本帖最后由 不点 于 2017-3-12 17:57 编辑 你试试把 time_t 的定义改成 long ,看看是不是可以通过编译? 如果 time_t 原先是 int,你就试试改成 long 如果 time_t 原先是 unsigned int,你就试试改成 unsigned long 我怀疑 int 在 64 位环境,会变成 8 字节长,因此,把它改成 long, 就有可能成为 4 字节了。瞎猜的,不一定正确。 --------------------- 又看了 time.h 中的定义。嘿嘿!time_t 在 64 位 gcc 之下,被定义为 64 位;在 32 位的 gcc 下,被定义为 32 位。而 fbinst.c 的 main() 函数在一开始就限定 32 位,即,必须 time_t 的长度为 4 字节,才能继续运行,否则,不运行。 大家考虑一下该怎么办。 |
不点 发表于 2017-3-12 17:17 加进去后编译提示: /usr/bin/ld: final link failed: 文件格式错误 collect2: 错误:ld 返回 1 make: *** [fbinst] 错误 1 |
makefile我也不懂。我没有64位环境。 |
本帖最后由 不点 于 2017-3-12 17:27 编辑 这就差不多证实了我的猜测。 你自己就可以试试修改。打开 Makefile ,在里面的 gcc 或者 $(CC) 之类的命令关键字后插入 -m32 (它可以作为第一个参数,紧接命令关键字。-m32 的两边都要有空格,-m 和 32 之间没有空格)。试试看成不成。如果不成,那还得让 yaya 给你搞定。 补充:我所说的办法,会生成 32 位的 fbinst 可执行程序。但假如你本来就是想生成 64 位 Linux 下的可执行程序,那我这个办法可能也不是你想要的。如果你的 64 位 Linux 能够支持运行 32 位的 fbinst,那就可以试试我的办法了。如果生成的 32 位 fbinst 能够运行,那就说明 OK 了。 你还可以试试注释掉 time_t == 4 那一行检查,不让它检查报错,这样,fbinst 就可以正常运行了。但运行的结果是否正确、是否有危险,那就难说了,需要 yaya 或 bean 亲自看看。 |
是64位的,centos 7.3 |
你得告诉 yaya,你的 Linux 是不是 64 位的。我猜应该是的吧?如果 gcc 也是 64 位的,那就应该修改 makefile 里面的 gcc 的命令行参数了。印象中,好像是加个 -m32 就行了。 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.