无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 13585|回复: 54
打印 上一主题 下一主题

[求助] 批处理引导linux内核出错

  [复制链接]
跳转到指定楼层
1#
发表于 2017-4-7 08:55:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jianliulin 于 2017-4-7 09:05 编辑

title 启动CentOS-7.3中文版
kernel (ud)/boot/centos/vmlinuz-4.10.4-1.el7.elrepo.x86_64 root=UUID='ddf344343-dsds-dsd9sdsd'  ro crashkernel=auto rhgb quiet LANG=zh_CN.UTF-8
initrd (ud)/boot/centos/initramfs-4.10.4-1.el7.elrepo.x86_64.img

或直接在命令行输入均可以启动linux。


===========================================================
如果转为批处理则出错,屏幕显示很多乱码

!BAT
kernel (ud)/boot/centos/vmlinuz-4.10.4-1.el7.elrepo.x86_64 root=UUID='ddf344343-dsds-dsd9sdsd'  ro crashkernel=auto rhgb quiet LANG=zh_CN.UTF-8
initrd (ud)/boot/centos/initramfs-4.10.4-1.el7.elrepo.x86_64.img


======================================================================
再改为如下批处理,执行后接着在命令行输入:initrd (ud)/boot/centos/initramfs-4.10.4-1.el7.elrepo.x86_64.img 也会成功启动。所以可以确定是在initrd 阶段出了问题。

!BAT
kernel (ud)/boot/centos/vmlinuz-4.10.4-1.el7.elrepo.x86_64 root=UUID='ddf344343-dsds-dsd9sdsd'  ro crashkernel=auto rhgb quiet LANG=zh_CN.UTF-8





附:
vmlinuz-4.10.4-1.el7.elrepo.x86_64 大小:6M
initramfs-4.10.4-1.el7.elrepo.x86_64.img 大小:28M
2#
发表于 2017-4-7 18:26:48 | 只看该作者
不能下载呀

点评

链接: http://pan.baidu.com/s/1geDa05H 密码: c2ni  详情 回复 发表于 2017-4-7 20:42
回复

使用道具 举报

3#
 楼主| 发表于 2017-4-7 20:42:03 | 只看该作者
回复

使用道具 举报

4#
发表于 2017-4-7 21:52:59 | 只看该作者
使用 test 里面的批处理,与命令行输入,没有变化,都是启动到:

IMG_20170407_214440.jpg (2.93 MB, 下载次数: 231)

IMG_20170407_214440.jpg
回复

使用道具 举报

5#
 楼主| 发表于 2017-4-7 21:59:32 | 只看该作者
本帖最后由 jianliulin 于 2017-4-7 22:02 编辑

这是64位的内核,需要64位的cpu,图中还没执行到initrd 阶段
回复

使用道具 举报

6#
发表于 2017-4-7 22:17:50 来自手机 | 只看该作者
cpu是64位的,操作系统是33位的。不知道是不是仿真器QEMU不支持。

点评

现在哪还有 32 位的 CPU?肯定都是 64 位的了。 我试过,在 32 位的 XP 之下,qemu 可以支持 64 位的 Guest 操作系统。 你需要运行 qemu-system-x86_64 而不是 qemu-system-i386。  详情 回复 发表于 2017-4-7 22:34
回复

使用道具 举报

7#
发表于 2017-4-7 22:34:59 | 只看该作者
2011yaya2007777 发表于 2017-4-7 22:17
cpu是64位的,操作系统是33位的。不知道是不是仿真器QEMU不支持。

现在哪还有 32 位的 CPU?肯定都是 64 位的了。

我试过,在 32 位的 XP 之下,qemu 可以支持 64 位的 Guest 操作系统。

你需要运行 qemu-system-x86_64 而不是 qemu-system-i386。

点评

说起来奔腾四就有64位的支持了吧 再早些才只有纯32位吧  详情 回复 发表于 2017-4-8 11:19
回复

使用道具 举报

8#
发表于 2017-4-7 22:48:19 来自手机 | 只看该作者
是楼主fb自带的虚拟机。
回复

使用道具 举报

9#
发表于 2017-4-7 22:50:11 来自手机 | 只看该作者
其他虚拟机不知如何加载fba文件。

点评

fbinsttool 自带的qemu当初只为了测试grldr,找了一个体积小,似乎只支持i368;需要把fba恢复到U盘再测试。  详情 回复 发表于 2017-4-7 22:58
回复

使用道具 举报

10#
 楼主| 发表于 2017-4-7 22:58:29 | 只看该作者
2011yaya2007777 发表于 2017-4-7 22:50
其他虚拟机不知如何加载fba文件。

fbinsttool 自带的qemu当初只为了测试grldr,找了一个体积小,似乎只支持i368;需要把fba恢复到U盘再测试。

点评

搞img吧 长痛不如短痛啊  详情 回复 发表于 2017-4-8 11:13
回复

使用道具 举报

11#
发表于 2017-4-8 11:13:51 来自手机 | 只看该作者
jianliulin 发表于 2017-4-7 22:58
fbinsttool 自带的qemu当初只为了测试grldr,找了一个体积小,似乎只支持i368;需要把fba恢复到U盘再测试 ...

搞img吧
长痛不如短痛啊
回复

使用道具 举报

12#
发表于 2017-4-8 11:19:20 来自手机 | 只看该作者
不点 发表于 2017-4-7 22:34
现在哪还有 32 位的 CPU?肯定都是 64 位的了。

我试过,在 32 位的 XP 之下,qemu 可以支持 64 位的  ...

说起来奔腾四就有64位的支持了吧
再早些才只有纯32位吧
回复

使用道具 举报

13#
发表于 2017-4-10 09:28:38 | 只看该作者
本帖最后由 2011yaya2007777 于 2017-4-10 09:30 编辑

kernel 函数,可以在菜单、命令行运行。但是不可以在 !BAT 批处理文本中运行。
在菜单及命令行,函数是解析一条执行一条。
在 !BAT 批处理文本中,猜测可能是为了跳转等功能,函数是一次性全部解析完毕,各函数起始位置放置在指针数组内。执行kernel 函数后,指针数组被破坏,因此后续函数没法继续运行。

点评

经测试kernel放在批处理里面没问题,是执行initrd命令后出问题。  详情 回复 发表于 2017-4-10 10:09
回复

使用道具 举报

14#
 楼主| 发表于 2017-4-10 10:09:54 | 只看该作者
2011yaya2007777 发表于 2017-4-10 09:28
kernel 函数,可以在菜单、命令行运行。但是不可以在 !BAT 批处理文本中运行。
在菜单及命令行,函数是解 ...

经测试kernel放在批处理里面没问题,是执行initrd命令后出问题。

回复

使用道具 举报

15#
发表于 2017-4-10 11:40:56 | 只看该作者
我来说说这个问题。启动 Linux,很可能与批处理互相冲突。

尽量避免这样使用。

我不知道能不能避免在批处理里面启动 Linux,如果能避免的话,就不用折腾了。

就是说,批处理功能与 Linux 的启动,两者存在冲突。

初步想了一下,你可以用一个菜单去启动 Linux,大概用 configfile 命令即可做到吧,我想。

回复

使用道具 举报

16#
 楼主| 发表于 2017-4-10 11:59:09 | 只看该作者
如果比较难处理那就不用搞了,我最初的目的是想把vmlinuz和initramfs尾续到批处理,这样一个文件就能启动centos,
回复

使用道具 举报

17#
发表于 2017-4-10 12:19:40 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2017-4-10 12:41 编辑
经测试kernel放在批处理里面没问题,是执行initrd命令后出问题。
kernel与批处理都占用24Mb区域内存。kernel执行后,覆盖了批处理的数组指针,使得initrd无法执行。
这是我跟踪测试的结果。

我以前以为,内置的内存管理使用8-13Mb区域的内存。经过跟踪测试才知道,内置的内存管理使用24Mb以上的内存。
回复

使用道具 举报

18#
发表于 2017-4-10 13:41:37 | 只看该作者
yaya 可以考虑优化批处理,也优化 malloc 等函数。主要就是内存冲突引起的。

kernel 固定加载在 32M 处,而此处的内存,却被批处理以及 grub4dos 的外部命令占据。

所以,kernel 执行以后,就不可以再执行任何外部命令以及批处理了,否则,一定是破坏了已经加载的 kernel 代码和数据。

续尾本来就不是一个正儿八经的办法,又碰上 kernel 和 initrd 这个庞然大物,就出问题了。

我不主张对 grub4dos 进行大修。能节约点精力,尽量节约,少做这些不怎么重要的工作。

BIOS 被淘汰之后,这些工作就全部失去意义了。努力是不值得的。



回复

使用道具 举报

19#
 楼主| 发表于 2017-4-10 14:29:58 | 只看该作者
我都觉得grub4dos就是因为这样那样奇葩的功能集合在一起大家才喜欢用它
回复

使用道具 举报

20#
发表于 2017-4-10 14:33:59 | 只看该作者
请教不点,page_map_start 在 10M 处,原计划是用来作什么的?

点评

grub4dos 要支持访问 4G 以上的内存空间。然而,4G 以上内存空间的访问,需要页映射,而不是像 4G 以内那样,仅仅通过 cpu 指令、地址前缀 0x66,0x67 即可实现。 既然需要页映射,就得有页面空间。这个页面空间  详情 回复 发表于 2017-4-10 17:50
回复

使用道具 举报

21#
发表于 2017-4-10 17:50:11 | 只看该作者
2011yaya2007777 发表于 2017-4-10 14:33
请教不点,page_map_start 在 10M 处,原计划是用来作什么的?

grub4dos 要支持访问 4G 以上的内存空间。然而,4G 以上内存空间的访问,需要页映射,而不是像 4G 以内那样,仅仅通过 cpu 指令、地址前缀 0x66,0x67 即可实现。

既然需要页映射,就得有页面空间。这个页面空间所起的作用很简单,不过就是恒等映射而已。page_map_start 开始的几个 M 的空间,就是用于页映射。

然而,我写的 mem64 汇编语言函数,竟然是无效的。我印象当初是测试有效的,怎会后来无效了呢?我至今很疑惑。我也离开开发队伍了,也不感兴趣了,同时也确实没什么精力和能力了,所以,也就不能去排除 bug 了。

既然我写的 mem64 函数无效,那么 page_map_start 开始的那个页空间,也就可能是没用的。karyonix 写了新的函数来处理高于 4G 的内存访问。我不知道 karyonix 是否采用了 page_map_start 开始的页面空间。假如 karyonix 不使用这个页面空间的话,那么这个空间是可以挪作它用的。

最好不要挪作他用。karyonix 的内存处理是用 PAE,我的 mem64 汇编代码是用 64 位指令,两种方法是不一样的。64 位指令的效率应该更高一些。当 PAE 失效时,会尝试采用 mem64,因此,mem64 也是有用的。这个 mem64 目前是有 bug 的,是失效的。但假如将来有人捉住了 mem64 的 bug,那时,还是需要 page_map_start 这个页面空间的。

回复

使用道具 举报

22#
发表于 2017-4-10 17:58:20 来自手机 | 只看该作者
知道了

点评

再补充一点。karyonix 的内存函数,我不太清楚究竟能够处理多大内存。我猜有可能是 64G 内存。我的 mem64 函数(如果排除了 bug 的话),可以处理 512G 内存。而且,假如扩大页映射的空间,还可以支持更大内存。因此  详情 回复 发表于 2017-4-10 18:15
回复

使用道具 举报

23#
发表于 2017-4-10 18:15:51 | 只看该作者

再补充一点。karyonix 的内存函数,我不太清楚究竟能够处理多大内存。我猜有可能是 64G 内存。我的 mem64 函数(如果排除了 bug 的话),可以处理 512G 内存。而且,假如扩大页映射的空间,还可以支持更大内存。因此,如果 grub4dos 还要继续开发下去的话,那就应该找出 bug,让 mem64 真正发挥作用。

回复

使用道具 举报

24#
发表于 2017-4-11 08:16:19 | 只看该作者
可惜没有64位环境。不然的话,可以试一试问题定位。

点评

我那板子的内存贼鸡儿便宜 双十一的时候记得是15块4g内存 amd专用条  详情 回复 发表于 2017-4-11 09:14
没关系,4G 以内照样可以试验。 mem64 即使是访问 4G 以内的空间,都失败了。连访问 1M 以内的常规内存都失败了。我怀疑是某个补丁造成的。问题出得很早,现在很难知道具体是什么原因。只要能访问常规内存,就成  详情 回复 发表于 2017-4-11 08:50
回复

使用道具 举报

25#
发表于 2017-4-11 08:50:19 | 只看该作者
2011yaya2007777 发表于 2017-4-11 08:16
可惜没有64位环境。不然的话,可以试一试问题定位。

没关系,4G 以内照样可以试验。

mem64 即使是访问 4G 以内的空间,都失败了。连访问 1M 以内的常规内存都失败了。我怀疑是某个补丁造成的。问题出得很早,现在很难知道具体是什么原因。只要能访问常规内存,就成功了。

回复

使用道具 举报

26#
发表于 2017-4-11 09:14:33 来自手机 | 只看该作者
2011yaya2007777 发表于 2017-4-11 08:16
可惜没有64位环境。不然的话,可以试一试问题定位。

我那板子的内存贼鸡儿便宜 双十一的时候记得是15块4g内存 amd专用条
回复

使用道具 举报

27#
发表于 2017-4-13 09:44:00 | 只看该作者
请 jianliulin 测试一下,似乎可以在批处理文件中运行 kernel 函数。

grldr.rar

160.68 KB, 下载次数: 1, 下载积分: 无忧币 -2

点评

不尾续,批处理了只写命令,可以进入到shell,晚上再实机测试看看。  详情 回复 发表于 2017-4-13 11:08
晚上再测试下实机,目前是qemu测试。 只引导内核,正常菜单,可以进入到shell: [attachimg]344438[/attachimg] 批处理,不能进入到shell,卡在这里: [attachimg]344439[/attachimg]  详情 回复 发表于 2017-4-13 10:51
回复

使用道具 举报

28#
 楼主| 发表于 2017-4-13 10:51:43 | 只看该作者
本帖最后由 jianliulin 于 2017-4-13 11:07 编辑
2011yaya2007777 发表于 2017-4-13 09:44
请 jianliulin 测试一下,似乎可以在批处理文件中运行 kernel 函数。





晚上再测试下实机,目前是qemu测试。

只引导内核,正常菜单,可以进入到shell:




尾续批处理,不能进入到shell,卡在这里:




回复

使用道具 举报

29#
 楼主| 发表于 2017-4-13 11:08:00 | 只看该作者
2011yaya2007777 发表于 2017-4-13 09:44
请 jianliulin 测试一下,似乎可以在批处理文件中运行 kernel 函数。

不尾续,批处理了只写命令,可以进入到shell,晚上再实机测试看看。
回复

使用道具 举报

30#
 楼主| 发表于 2017-4-13 18:54:16 | 只看该作者
实机测试,不尾续内核就可以引导成功。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-28 23:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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