找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 1417|回复: 6

linux学习的模仿,修改,单系统

[复制链接]
发表于 2026-2-7 07:31:37 | 显示全部楼层 |阅读模式
本帖最后由 zzz19760225 于 2026-4-28 15:57 编辑

一楼祭天
123456789
  1. http://zzz19760225.ysepan.com/
复制代码
隔一段时间建10楼一页面,其首位是具体内容,其余杂想或空置。
15楼一页?

20250627,换成perl为文字信息处理考虑,这样在以后自制和linux版国产操作系统,也会有perl吧
20250901,换成perl的Tk桌面图形模式
20251206,换成C语言SDL2图形考虑
20260113,换回perl+Tk的图形考虑(perl+Tk+ImageMagick+ffmpeg)
20260306,增加emacs lisp考虑。

  1. $a=<STDIN>;print "$a";
  2. a123:;print "123";goto a123;
  3. $a==123?"456":"789";
复制代码

  1. a123:
  2. print "请输入:";$a=<STDIN>;
  3. $a==456?print "789":goto a123;

  4. 请输入:123
  5. 请输入:456
  6. 789
  7. Press any keys to exit
复制代码

  1. 文字游戏
  2. 1游戏开始和结束,命令行执行文件和鼠标点击可执行文件,启动开始页面,开始游戏+游戏说明+退出游戏,ctrl+d,ctrl+c,关闭游戏窗口x,游戏过程中的退出,意外故障退出。
  3. 2玩家用户帐号的建增减删看,建立在程序文章里的#数据行,增减数据行,从开始游戏进入这个选择范围,游戏过程中随时调用这个模块。
  4. 3本体结构,从开始结束和帐号,进入菜菜城的前面部分,后面是以菜菜城和其他的名义居住地为中心,向外的相对移动选择。
  5. 4其外向外是重复流水线,流水线结构选择的通用和专用组合度数量。
  6. 5向外重复流水线的可选项内容,是设置的地图世界容器,每个容器里有其自身剧情设置的选择通用+专用度。
复制代码

  1. 山海经,山河经,地星村:
  2. 四海:东海(太平洋),南海(印度洋),西海(大西洋),北海(北冰洋);
  3. 八洲:北洲(格陵兰岛),风洲(北美洲),木洲(南美洲),南洲(南极洲),金洲(大洋洲),土洲(亚洲),水洲(欧洲),火洲(非洲);
  4. 土洲(亚洲)往东7000公里=14000里,1万4千里,是东海(太平洋);1一
  5. 东海(太平洋)往东7000公里=14000里,1万4千里,是风洲(北美洲);2壹
  6. 风洲(北美洲)往东5000公里=10000里,1万里,是西海(大西洋);3二
  7. 西海(大洋洲)往东5000公里=10000里,1万里,是水洲(欧洲);4贰
  8. 水洲(欧洲)往东7000公里=14000里,1万4千里,是土洲(亚洲);5叁
  9. 水洲(欧洲)往南5000公里=10000里,1万里,是火洲(非洲);6肆
  10. 土洲(亚洲)往南7000公里=14000里,1万4千里,是金洲(大洋洲);7伍
  11. 风洲(北美洲)往北5000公里=10000里,1万里,是北洲(格林兰岛);8陆
  12. 风洲(北美洲)往南7000公里=14000里,1万4千里,是木洲(南美洲);9柒
  13. 木洲(南美洲)往南7000公里=14000里,1万4千里,是南洲(南极洲);10捌
  14. 火洲(非洲)往东6000公里=12000里,1万2千里,是南海(印度洋);11三
  15. 南海(印度洋)往东6000公里=12000里,1万2千里,是金洲(大洋洲);
  16. 土洲(亚洲)往北6000公里=12000里,1万2千里,是北海(北冰洋);12四
复制代码
皇帝游戏和大航海游戏,1女母氏族部落人数超出太多,就分族外迁(女娲和西王母),父系氏族的炎黄等三皇五帝,2周对外分封的信息,对临近可能土地再分封的扩大,3秦统一后的对外延续,4五胡乱华等外租压迫下,崛起后的汉族对外陆海殖民,5宋明大商业的地主和资本家对外。(或者解放模式也可以,结合墨家概念平等,法家概念平等,儒家概念的大一统统一,私有化统一与公有度统一,都是可选项,但是不是游戏全部制作出来,而有那个可以制作的简单工具,玩家自己可以去逐渐增加点滴,积累成为游戏模块。或者大禹和夏启的能力工作权力极私独占奴隶制也可以,炎黄的养民)
1一天的容器模块,
2地星村外天文的模块(相对地球的日照光线形象学几何学为主),
3地星村内的年循环左升右降热量相对增减四季模块,
4整体的本体和环境,
5个体的本体和环境,
6整体与个体之间的进制联系组合关系一体化。
骑goto:
制造用文字游戏信息机器,
制=时空量化,人物增减量化,一个自动独立运行的信息机器世界,参与操作驾驶这个世界的玩家玩法
造=goto跑一遍标签阵列,完成一遍游戏后,再加入量化
用=?
浏览器下载300MB的Strawberry Perl的perl文件会断掉,迅雷拖着下载。要Strawberry Perl,方便网络下载什么的。或者不要下载吧,本身集成了,没搞懂。
安装Tk很慢,很久。
程序文件pl,要绑定perl53211.exe,不要绑定旁边的perl.exe。
ActivePerl自带Tk?
ADODB.Stream读取内存?
basic(qb语句)=qb64,freebaisc
在深度deepin linux下可以终端运行,就建立终端运行文件sh。

  1. #!/bin/bash
  2. chmod +x perlTkgif.pl
  3. perl perlTkgif.pl
复制代码
鼠标双击终端文件sh,通过这个终端文件打开pl,运行pl程序。(终端可运行,也许权限那句可以不需要了=chmod。

集成块硬件图形中文,逻辑电平与图形中文电平之间的翻译,在图形中文上抽象代表出来,成为中文编程或中文DOS的假设。

一,应该是道混沌无空能量在,
二,然后是能量形态和万物,走到表明太极阴阳相对关系,之后是圆自转,重复,循环的有序,顺序,排序=产生量。表面现象之量,到其内里之王的内因因果理,化学编程的能量自转自传锁定自私基因(?)。
三,1量(使用色点阵组合代表,总之组合的数量空间很大),
四,2类(声<声波,音乐>,色<图,文>),
五,3类组合(影视,有声有色的信息人模拟人与拟人拟物)。
但是如果中文编程,并不需要前面两者,只要后面三者。

第一,组合的法(进制法重复模式),这个法的数量要出来,并且这个数量是有序简单组合重复完成的。这个数量的代表形式,代数,代量,代字或代词。
第二,数量的排序序数序号提取。
第三,数量排序序数序号提取的单元容器,其内容具体组合的是什么。就是做这三步走。
1组合(单元太极阴阳相对联系关系组合),
2排序太集集合容器(同元排序=具有相同元的组合排序,异位排序=在不同的方位上有差异的组合排序),
3单元太集集合容器的具体组合内容。

三个概念部分渐进到数字化世界,每个部分又各自有其内部分类,最后到排序序数序号代表。
一个是抽象道,在,实,
二个是识别需求产生的排序,混沌,开天辟地,无,有,冇,空,不,0等,太极太集阴阳相对,
三个是太极太集阴阳相对为根源的太单元,相对联系关系组合形成的地图或联系关系体。相对这个关系一体的组构和解构,选择所需的模拟拟人拟物内容,并且使用排序数量来代表概念空间,完成模拟模仿。这个模拟模仿扩大了人的实选择空间,可以倍增探索尝试试验名范围的人概念空间,促进人的世界扩大。
有用制造用机器,通用制造用机器。

C语言SDL2图形考虑,两个部分:
1,图形部分的石坚白,存在即有象,内象外象本象,不论心意识/唯心或唯物,其可知可见的大概内容之一,与信息流编织成旋玑图全组合地图;
2,信息流的文本容器集合,以一个十进制16数字集自拍基本出发和中心区域,基本逻辑是太极容器的内外分解阴阳相对关系的组合聚散=开关。
3,声色两信息,色分为图画里的单图形文字,单图形图画,多图形图画,影视。信息分类,执行到类信息,就自动寻找对应的功能程序执行该信息内容,并且句柄管道开关输出到同一个页面容器里。

0,1,2,3,4,5,6,7,8,9,a,[,],[;],[:],[。]。
1,2,3,4,5,6,7,8,9,0,a,[,],[;],[:],[。]。
1,2,3,4,5,6,7,8,9,0,回,[,],[;],[:],[。]。


1信息单元组合无限地图世界,2地图里的一次编程,3一次编程基础上的二次编程(AI自动信息自转自传)。

tty的zhcon需要fbset(修改操作framebuffer)
sudo apt install fbset
sudo usermod -aG video $USER     #/dev/fb0 通常属于 video 组,加入获取权限的执行。
重启以获取权限。
fbset -i    # 查看详细 framebuffer 模式

  1. mode "1440x900-60"
  2.     geometry 1440 900 1440 900 32
  3.     timings 0 0 0 0 0 0 0
  4.     rgba 8/16,8/8,8/0,0/0
  5. endmode
复制代码
tty下中文:tty+zhcon(二合一,中文显示和中文全拼输入法)+ollama run qwen:0.5b(可以中文问答)+tty下图形编程
tty下记录script session.log 需要命令行做一个exit退出动作后(不会退出账户),才会输入到session.log文本。
tty C语言操作fb0的图形内容,先在桌面下编译好,处理了出错信息后,再转到tty下执行。
tty下输入:tty
/dev/fb0    (需要的内容)
/dev/pts/0 (图形界面,无法看到被图形界面覆盖了的输出图形,需要exit,会退出去。可能是zhcon的图形启动?)
tty,fb0,无限圈层级里,已有有限屏幕的极限位图,全组合的点阵字符集或点阵组合集。

重置密码
grub的选项栏,
按e,进入编辑内容,
在linux那一行的行尾,去掉最后两个单词quiet splas,加上systemd.unit=rescue.target
F10运行
出现运行页面,按一下按钮,出现root@帐号输入等待
输入mount -o remount,rw /
输入passwd+帐号
输入新密码,再次输入新密码
输入exec /sbin/init重新启动,进入用户和输入密码的图形页面(这一步就可以tty了)

在tty下安装图形
linux mint22.2图形界面桌面问题:
sudo dpkg --configure -a
# 5. 安装 Linux Mint 桌面
sudo apt install linuxmint-keyring
sudo apt install mint-meta-cinnamon    # 或 mint-meta-mate / mint-meta-xfce

tty+C语言+framebuffer,色象代表信息,信息代表声色。
tty+gas汇编+framebuffer+(多维数组的变量,中文显示和中文输入,鼠标等单多输入端口接口,页面浏览器文本,文字,动静帧图片,声音,影视)

在C语言SDL2图形库的程序代码中,最后一行注释编译和执行命令,对应防止忘记。

只有一个机器容器,,然后逐渐的增量。不是主板,而是键盘或鼠标开关。
键盘鼠标。
键盘鼠标+屏幕。
键盘鼠标+ 屏幕+电器主板功能。
键盘鼠标+屏幕+主板+内存。
键盘鼠标+屏幕+主板+内存+外存(算盘位移记录,打孔卡,钢,粉磁盘)。
键盘鼠标+屏幕+主板+内存+外存+芯片自动加工厂。

自动信息AI,通义:C语言SDL2制作一个虚拟机,LINUXMINT22.2
通义:C语言SDL2制作一个微软DOS下的debug.exe,LINUXMINT22.2

问题:在64位字节中,使用32位程序执行,能不能使用余下的32位存东西。按照说法是不可以的,执行文件是固化的,那么换成其他解释类语言呢。

中医许阳的基本中医部分,或菜菜城里的中医堂明心堂什么的,分为1基本理论,2基本看病,3基本治病三类集合。从冇逐渐增量的理论和实践,两者名实渐增,随着学习进步。
 楼主| 发表于 2026-2-7 07:32:16 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-3-6 16:02 编辑

1234567890
已有emacs的内容一般平常简化,主要是操作习惯上。其余基本不需要做,就算有需求,也分为可做和做不到的,可做的也排在已有简化之后。
鼠标一般的文本复制粘贴,在emacs上的模式套路。emacs页面上,鼠标右键点击的选项组。
game-emnu.el

  1. ;;; game-menu.el --- 简单的游戏菜单系统 -*- lexical-binding: t; -*-

  2. ;;; Commentary:
  3. ;; 一个简单的游戏菜单演示程序

  4. ;;; Code:

  5. (defvar game-menu--timer nil
  6.   "用于消息显示的定时器。")

  7. (defvar game-menu--current-page 1
  8.   "当前页面编号:1-主菜单,2-介绍页面,3-昵称输入页面。")

  9. (defvar game-menu--nickname ""
  10.   "存储玩家输入的昵称。")

  11. (defun game-menu-show-page1 ()
  12.   "显示第一个页面:主菜单。"
  13.   (interactive)
  14.   (setq game-menu--current-page 1)
  15.   (let ((buf (get-buffer-create "*游戏菜单*")))
  16.     (with-current-buffer buf
  17.       ;; 取消只读模式以便修改
  18.       (setq buffer-read-only nil)
  19.       (erase-buffer)
  20.       (insert "\n\n")
  21.       (insert "            === 勇者大闯关 ===\n\n\n")
  22.       
  23.       ;; 创建可点击的菜单项
  24.       (game-menu--insert-button "开始游戏" 'game-menu-start-game)
  25.       (insert "\n\n")
  26.       (game-menu--insert-button "介绍游戏" 'game-menu-show-intro-page)
  27.       (insert "\n\n")
  28.       (game-menu--insert-button "结束游戏" 'game-menu-exit)
  29.       
  30.       ;; 设置缓冲区为只读,防止意外修改
  31.       (setq buffer-read-only t)
  32.       (goto-char (point-min))
  33.       (forward-line 3))  ;; 移动到中间位置
  34.     (switch-to-buffer buf)))

  35. (defun game-menu-show-intro-page ()
  36.   "显示介绍页面,3秒后自动返回主菜单。"
  37.   (interactive)
  38.   (setq game-menu--current-page 2)
  39.   (let ((buf (get-buffer-create "*游戏菜单*")))
  40.     (with-current-buffer buf
  41.       (setq buffer-read-only nil)
  42.       (erase-buffer)
  43.       (insert "\n\n")
  44.       (insert "            === 游戏介绍 ===\n\n\n")
  45.       (insert "       这是勇者大闯关游戏!\n\n")
  46.       (insert "  这是一个简单的游戏菜单演示程序。\n\n")
  47.       (insert "  你可以通过鼠标点击来导航不同的页面。\n\n\n\n")
  48.       (insert "       3秒后自动返回主菜单...")
  49.       
  50.       ;; 设置介绍文字样式
  51.       (goto-char (point-min))
  52.       (forward-line 4)
  53.       (put-text-property (point) (line-end-position) 'face '(:foreground "green" :height 1.2))
  54.       
  55.       (setq buffer-read-only t)
  56.       (goto-char (point-min)))
  57.     (switch-to-buffer buf))
  58.   
  59.   ;; 取消之前的定时器(如果存在)
  60.   (when (timerp game-menu--timer)
  61.     (cancel-timer game-menu--timer))
  62.   
  63.   ;; 设置3秒后返回主菜单
  64.   (setq game-menu--timer
  65.         (run-with-timer 3 nil
  66.                         (lambda ()
  67.                           (when (buffer-live-p (get-buffer "*游戏菜单*"))
  68.                             (game-menu-show-page1)
  69.                             (message "返回主菜单"))
  70.                           (setq game-menu--timer nil)))))

  71. (defun game-menu-show-page2 ()
  72.   "显示第二个页面:昵称输入页面。"
  73.   (interactive)
  74.   (setq game-menu--current-page 3)
  75.   (let ((buf (get-buffer-create "*游戏菜单*")))
  76.     (with-current-buffer buf
  77.       (setq buffer-read-only nil)
  78.       (erase-buffer)
  79.       (insert "\n\n")
  80.       (insert "            === 输入昵称 ===\n\n\n")
  81.       (insert "你的昵称:")
  82.       
  83.       ;; 创建输入区域
  84.       (let ((start (point)))
  85.         (insert " [点击这里输入昵称] ")
  86.         (put-text-property start (point) 'face '(:background "gray80" :foreground "black"))
  87.         (put-text-property start (point) 'mouse-face '(:background "yellow"))
  88.         ;; 使用更简单的方法绑定点击事件
  89.         (insert-button "[点击输入]"
  90.                       'action (lambda (_) (game-menu--input-nickname))
  91.                       'follow-link t
  92.                       'face '(:foreground "blue" :underline t)))
  93.       
  94.       (insert "\n\n\n")
  95.       
  96.       ;; 如果已经有昵称,显示出来
  97.       (when (not (string= game-menu--nickname ""))
  98.         (insert "当前昵称: ")
  99.         (insert game-menu--nickname)
  100.         (insert "\n\n\n"))
  101.       
  102.       (game-menu--insert-button "返回菜单" 'game-menu-show-page1)
  103.       (insert "\n\n")
  104.       (game-menu--insert-button "去菜菜城" 'game-menu-to-caicai)
  105.       
  106.       (setq buffer-read-only t)
  107.       (goto-char (point-min)))
  108.     (switch-to-buffer buf)))

  109. (defun game-menu--input-nickname ()
  110.   "输入昵称。"
  111.   (interactive)
  112.   (let ((new-nick (read-string "请输入你的昵称: " game-menu--nickname)))
  113.     (when (not (string= new-nick ""))
  114.       (setq game-menu--nickname new-nick)
  115.       ;; 刷新页面2以显示新昵称
  116.       (game-menu-show-page2)
  117.       (message "昵称已设置为: %s" game-menu--nickname))))

  118. (defun game-menu--insert-button (text callback)
  119.   "插入一个按钮,显示TEXT,点击时调用CALLBACK。"
  120.   (let ((start (point)))
  121.     (insert text)
  122.     ;; 设置按钮样式
  123.     (put-text-property start (point) 'face '(:foreground "blue" :underline t :weight bold))
  124.     (put-text-property start (point) 'mouse-face '(:background "yellow"))
  125.     (put-text-property start (point) 'help-echo (format "鼠标点击: %s" text))
  126.     ;; 创建简单的按键映射
  127.     (let ((map (make-sparse-keymap)))
  128.       (define-key map [mouse-1]
  129.         (lambda () (interactive)
  130.           (when (functionp callback)
  131.             (funcall callback))))
  132.       (put-text-property start (point) 'keymap map))))

  133. (defun game-menu-start-game ()
  134.   "开始游戏 - 进入昵称输入页面。"
  135.   (interactive)
  136.   (game-menu-show-page2))

  137. (defun game-menu-exit ()
  138.   "结束游戏 - 关闭菜单缓冲区。"
  139.   (interactive)
  140.   (when (y-or-n-p "确定要退出游戏吗?")
  141.     (kill-buffer "*游戏菜单*")
  142.     (message "游戏结束,欢迎下次再来!")))

  143. (defun game-menu-to-caicai ()
  144.   "去菜菜城 - 当前功能空置,仅显示提示。"
  145.   (interactive)
  146.   (message "去菜菜城功能正在开发中,敬请期待...")
  147.   ;; 让提示停留3秒
  148.   (sit-for 3))

  149. ;;;###autoload
  150. (defun game-menu ()
  151.   "启动游戏菜单。"
  152.   (interactive)
  153.   (game-menu-show-page1)
  154.   (message "欢迎来到勇者大闯关!使用鼠标点击菜单项开始游戏。"))

  155. (provide 'game-menu)

  156. ;;; game-menu.el ends here
复制代码
alt+x,类似秘籍输入框,输入eval-buffer,就是加载文件,生成game-menu。
alt+x,类似秘籍输入框,输入game-menu就是执行文件。
显示菜单名和开始,介绍,结束游戏三行文字。
鼠标点击介绍游戏,下面可以显示一行文字3秒,这是勇士大闯关游戏。点击结束游戏,会弹出退出游戏是否选项。开始游戏的鼠标点击,出现等待输入昵称,返回菜单,进入菜菜城三个内容。
 楼主| 发表于 2026-2-7 07:33:47 | 显示全部楼层

先终端

本帖最后由 zzz19760225 于 2026-3-26 08:05 编辑

1234567890
 楼主| 发表于 2026-2-7 07:34:11 | 显示全部楼层

“一个64位操作系统的设计与实现”书

本帖最后由 zzz19760225 于 2026-5-7 09:52 编辑

1234567890

2:1操作系统是什么,2环境搭建;

3:1引导,2内核,3应用;

5:1处理器,2引导,3内核,4内存,5调度=中断;

6:1驱动,2进程,3文件,4系统调用API,5命令行shell,6彩蛋nm。

引导(1芯片进程,2调度中断多进程,3设备驱动,4内存,5文件硬盘)
中心内变化1芯片与外变化3设备驱动两者之间的2调度进程活动,完成短期储存取4内存和长期储存取5文件硬盘的需求信息工程作业。
8:1引导,2芯片,3调度,4驱动,5短存,6长存,7输入,8输出。
1引导
2------芯片,调度,驱动
3-----------------------------短存,长存
4-------------------------------------------输入,输出


linux内核完全注释
0.11
两个oo,boot,tools
两个字母,fs,mm
345个字母,lib,init,kenle转6位
缺5
缺6,有6,kernel
78个字符,include,makelife
2234,678
 楼主| 发表于 2026-2-7 07:34:24 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-5-5 14:56 编辑

1234567890
一2.2环境搭建:
模拟环境搭建:虚拟机bochs(qemu)
编译环境操作系统:原书使用是centos6,已有linuxmint22.2,软件信息代码所生成的空间体=操作系统平台
  1. ./bochs -f bochsrc.txt -q
  2. ========================================================================
  3.                         Bochs x86 Emulator 2.7
  4.               Built from SVN snapshot on August  1, 2021
  5.                 Timestamp: Sun Aug  1 10:07:00 CEST 2021
  6. ========================================================================
  7. 00000000000i[      ] BXSHARE not set. using compile time default '/usr/local/share/bochs'
  8. 00000000000i[      ] reading configuration from bochsrc.txt
  9. 00000000000i[      ] Stopping on magic break points
  10. 00000000000i[      ] installing x module as the Bochs GUI
  11. 00000000000i[      ] using log file bochs.log
  12. Next at t=0
  13. (0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b          ; ea5be000f0
  14. <bochs:1> r
  15. eax: 0x00000000 0
  16. ebx: 0x00000000 0
  17. ecx: 0x00000000 0
  18. edx: 0x00000000 0
  19. esp: 0x00000000 0
  20. ebp: 0x00000000 0
  21. esi: 0x00000000 0
  22. edi: 0x00000000 0
  23. eip: 0x0000fff0
  24. eflags 0x00000002: id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf
  25. <bochs:2> a
  26. :2: syntax error at 'a'
  27. <bochs:3> b
  28. Error: pbreak of this kind not implemented yet.
  29. <bochs:4> c

  30. ^CNext at t=2020966106
  31. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  32. <bochs:5> d
  33. :5: syntax error at '
  34. '
  35. <bochs:6> e
  36. :6: syntax error at 'e'
  37. <bochs:7> f
  38. :7: syntax error at 'f'
  39. <bochs:8> g
  40. :8: syntax error at 'g'
  41. <bochs:9> h
  42. h|help - show list of debugger commands
  43. h|help command - show short command description
  44. -*- Debugger control -*-
  45.     help, q|quit|exit, set, instrument, show, trace, trace-reg,
  46.     trace-mem, u|disasm, ldsym, slist
  47. -*- Execution control -*-
  48.     c|cont|continue, s|step, p|n|next, modebp, vmexitbp
  49. -*- Breakpoint management -*-
  50.     vb|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,
  51.     bpe, bpd, d|del|delete, watch, unwatch
  52. -*- CPU and memory contents -*-
  53.     x, xp, setpmem, writemem, crc, info,
  54.     r|reg|regs|registers, fp|fpu, mmx, sse, sreg, dreg, creg,
  55.     page, set, ptime, print-stack, ?|calc
  56. -*- Working with bochs param tree -*-
  57.     show "param", restore
  58. <bochs:10> i
  59. :10: syntax error at 'i'
  60. <bochs:11> j
  61. :11: syntax error at 'j'
  62. <bochs:12> k
  63. :12: syntax error at 'k'
  64. <bochs:13> l
  65. :13: syntax error at 'l'
  66. <bochs:14> m
  67. :14: syntax error at 'm'
  68. <bochs:15> n
  69. Next at t=2020966107
  70. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  71. <bochs:16> o
  72. :16: syntax error at 'o'
  73. <bochs:17> p
  74. Next at t=2020966108
  75. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  76. <bochs:18> q
  77. (0).[2020966108] [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  78. (q会退出)
  79. <bochs:1> r
  80. eax: 0x00000000 0
  81. ebx: 0x00000000 0
  82. ecx: 0x00000000 0
  83. edx: 0x00000000 0
  84. esp: 0x00000000 0
  85. ebp: 0x00000000 0
  86. esi: 0x00000000 0
  87. edi: 0x00000000 0
  88. eip: 0x0000fff0
  89. eflags 0x00000002: id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf
  90. <bochs:2> s
  91. Next at t=1
  92. (0) [0x0000000fe05b] f000:e05b (unk. ctxt): xor ax, ax                ; 31c0
  93. <bochs:3> u
  94. 000fe05b: (                    ): xor ax, ax                ; 31c0
  95. <bochs:4> v
  96. :4: syntax error at 'v'
  97. <bochs:5> w
  98. :5: syntax error at 'w'
  99. <bochs:6> x
  100. [bochs]:
  101. 0x00000000 <bogus+       0>:        0x00000000
  102. <bochs:7> y
  103. :7: syntax error at 'y'
  104. <bochs:8> z
  105. :8: syntax error at 'z'
  106. <bochs:9>
复制代码

10个有效字母为命令
  1. 1--2--3--4--5--6--7--8--9--10
  2. b,c,h,n,p,q,r,s,u,x,


  3. <bochs:3> b
  4. Error: pbreak of this kind not implemented yet.

  5. <bochs:4> c

  6. ^CNext at t=2020966106
  7. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe

  8. <bochs:9> h
  9. h|help - show list of debugger commands
  10. h|help command - show short command description
  11. -*- Debugger control -*-
  12.     help, q|quit|exit, set, instrument, show, trace, trace-reg,
  13.     trace-mem, u|disasm, ldsym, slist
  14. -*- Execution control -*-
  15.     c|cont|continue, s|step, p|n|next, modebp, vmexitbp
  16. -*- Breakpoint management -*-
  17.     vb|vbreak, lb|lbreak, pb|pbreak|b|break, sb, sba, blist,
  18.     bpe, bpd, d|del|delete, watch, unwatch
  19. -*- CPU and memory contents -*-
  20.     x, xp, setpmem, writemem, crc, info,
  21.     r|reg|regs|registers, fp|fpu, mmx, sse, sreg, dreg, creg,
  22.     page, set, ptime, print-stack, ?|calc
  23. -*- Working with bochs param tree -*-
  24.     show "param", restore

  25. <bochs:15> n
  26. Next at t=2020966107
  27. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe

  28. <bochs:17> p
  29. Next at t=2020966108
  30. (0) [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe

  31. <bochs:18> q
  32. (0).[2020966108] [0x000000007c29] 0000:7c29 (unk. ctxt): jmp .-2  (0x00007c29)     ; ebfe
  33. (q会退出)

  34. <bochs:1> r
  35. eax: 0x00000000 0
  36. ebx: 0x00000000 0
  37. ecx: 0x00000000 0
  38. edx: 0x00000000 0
  39. esp: 0x00000000 0
  40. ebp: 0x00000000 0
  41. esi: 0x00000000 0
  42. edi: 0x00000000 0
  43. eip: 0x0000fff0
  44. eflags 0x00000002: id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf

  45. <bochs:2> s
  46. Next at t=1
  47. (0) [0x0000000fe05b] f000:e05b (unk. ctxt): xor ax, ax                ; 31c0

  48. <bochs:3> u
  49. 000fe05b: (                    ): xor ax, ax                ; 31c0

  50. <bochs:6> x
  51. [bochs]:
  52. 0x00000000 <bogus+       0>:        0x00000000
复制代码
 楼主| 发表于 2026-5-14 11:17:02 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-5-19 13:02 编辑

qemu的grub
认识,理解,混熟grub

  1. 在QEMU虚拟机里折腾GRUB,是学习它工作原理和故障修复的最佳方式。你可以按照“搭建实验室 → 制造故障 → 动手修复”的步骤进行,整个过程
  2. 都在一个与主系统隔离的安全环境里,可以放心大胆地试。

  3. ### 🛠️ 第一步:搭建你的 GRUB 实验环境

  4. 我们先动手创建一个虚拟机,并完成GRUB的初始安装。

  5. 1.  **创建虚拟磁盘**:打开终端,运行以下命令创建一个100MB的空白磁盘镜像文件。
  6.     ```bash
  7.     dd if=/dev/zero of=grub_test.img bs=512 count=204800
  8.     ```
  9.     *这个命令会生成一个名为 `grub_test.img` 的文件,大小正好是 `204800 * 512` 字节,即100MB。*

  10. 2.  **准备分区**:把它当作一块真正的硬盘来操作。
  11.     ```bash
  12.     # 1. 对虚拟磁盘进行分区。这里使用老式的dos分区表。
  13.     fdisk grub_test.img << EOF
  14.     o
  15.     n
  16.     p
  17.     1
  18.    
  19.    
  20.     w
  21.     EOF

  22.     # 2. 计算第一个分区的偏移量并挂载。下面例子假设分区从扇区63开始,偏移量为 63*512=32256 字节。
  23.     sudo losetup -o 32256 /dev/loop0 grub_test.img

  24.     # 3. 格式化为 ext4 文件系统,并挂载到 /mnt 目录。
  25.     sudo mkfs.ext4 /dev/loop0
  26.     sudo mount /dev/loop0 /mnt
  27.     ```

  28. 3.  **安装 GRUB**:这一步会在虚拟磁盘上写入引导代码。
  29.     ```bash
  30.     sudo grub-install --boot-directory=/mnt --target=i386-pc --modules="part_msdos" grub_test.img
  31.     ```

  32. 4.  **创建 GRUB 配置文件**:在 `/mnt/grub/grub.cfg` 中创建一个最简单的菜单。
  33.     ```bash
  34.     sudo tee /mnt/grub/grub.cfg << EOF
  35.     set timeout=5
  36.     set default=0

  37.     menuentry "我的实验系统" {
  38.         echo "正在启动实验系统..."
  39.         # 这里先放一个假的启动项,后面会替换
  40.         # multiboot (hd0,msdos1)/boot/mykernel
  41.         # boot
  42.     }
  43.     EOF
  44.     ```

  45. 5.  **清理并启动**:将所有改动写回磁盘并卸载,然后启动虚拟机。
  46.     ```bash
  47.     sudo umount /mnt
  48.     sudo losetup -d /dev/loop0
  49.     ```
  50.     至此,一个包含GRUB引导程序的虚拟磁盘就准备好了。你可以使用以下命令启动它:
  51.     ```bash
  52.     qemu-system-x86_64 -hda grub_test.img -m 1024
  53.     ```
  54.     启动后,你应该能看到 GRUB 的启动菜单,虽然它现在还不能启动一个完整的操作系统,但这正是我们实验的起点。

  55. ### 💥 第二步:模拟核心故障

  56. 现在环境准备好了,我们可以人为制造一些常见故障,来模拟真实世界中可能遇到的问题。

  57. | 故障类型 | 模拟方法 | 预期现象 |
  58. | :--- | :--- | :--- |
  59. | **配置文件丢失 (最常见)** | 进入虚拟机系统,删除GRUB配置文件。或者,你也可以不创建`grub.cfg`文件就进行安装。 | 系统启动后,GRUB找不到
  60. 菜单文件,会直接进入一个 **`grub rescue>`** 救援模式。`ls`命令的输出会很少。 |
  61. | **核心文件损坏或缺失** | 在已经创建了`grub.cfg`的系统中,故意修改或删除`menuentry`中指定的内核文件。 | GRUB可以正常显示菜单,但当你选择
  62. 菜单项后,会提示找不到内核或报错,无法完成启动。 |
  63. | **引导代码损坏** | 使用`dd`命令覆盖虚拟磁盘的**开头部分**(即主引导记录MBR),模拟被Windows或其他系统覆盖的情况。 | 系统启动后,可能
  64. 直接黑屏,或者出现一个孤零零的 **`GRUB>`** 提示符,或者根本没有GRUB的痕迹。 |

  65. ### 🔧 第三步:动手修复故障

  66. 根据上面模拟的故障类型,下面是相应的修复方法。

  67. #### 场景一:修复 `grub rescue>` 救援模式 (配置文件丢失)

  68. 当屏幕上出现 `grub rescue>` 提示符时,别慌,这恰恰是最好的学习机会。

  69. 1.  **查看设备**:输入 `ls`,你会看到类似 `(hd0) (hd0,msdos1)` 的输出。`(hd0,msdos1)` 就是你的Linux系统分区。
  70. 2.  **寻找GRUB文件**:手动设置GRUB的根目录和模块路径,加载必要模块。
  71.     ```bash
  72.     grub rescue> set prefix=(hd0,msdos1)/grub
  73.     grub rescue> insmod normal
  74.     grub rescue> normal
  75.     ```
  76.     执行 `normal` 后,成功的话,你会看到一个功能更强大的 **`grub>`** 提示符。
  77. 3.  **进入系统并修复**:在 `grub>` 提示符下,手动引导进入系统。
  78.     ```bash
  79.     grub> set root=(hd0,msdos1)
  80.     grub> linux /boot/vmlinuz-xxx root=/dev/sda1  # 注意:文件名需按Tab补全
  81.     grub> initrd /boot/initrd.img-xxx
  82.     grub> boot
  83.     ```
  84.     进入系统后,你就可以用 `sudo update-grub` (或 `sudo grub-mkconfig -o /boot/grub/grub.cfg`) 重新生成配置文件了。

  85. #### 场景二:使用 Live CD 进行高级修复

  86. 如果GRUB损坏严重,连`grub rescue>`都无法正常工作,或者你无法进入系统,就需要用到
  87. “终极武器”——**使用Linux Live CD(急救盘)进行Chroot修复**。

  88. 1.  **挂载系统**:
  89.     ```bash
  90.     # 挂载系统分区和虚拟文件系统
  91.     sudo mount /dev/sda1 /mnt
  92.     sudo mount --bind /dev /mnt/dev
  93.     sudo mount --bind /proc /mnt/proc
  94.     sudo mount --bind /sys  /mnt/sys
  95.     ```

  96. 2.  **执行Chroot**:将 `/mnt` 变为新的根目录。
  97.     ```bash
  98.     sudo chroot /mnt
  99.     ```

  100. 3.  **重新安装GRUB**:现在,你就在一个“修复后”的系统里了,可以像操作正常系统一样修复它。
  101.     ```bash
  102.     # 1. 重新安装GRUB到磁盘的主引导记录
  103.     grub-install /dev/sda

  104.     # 2. 重新生成配置文件
  105.     update-grub   # Debian/Ubuntu系
  106.     # 或 grub-mkconfig -o /boot/grub/grub.cfg  # 其他发行版

  107.     # 3. 退出chroot并重启
  108.     exit
  109.     sudo umount /mnt/dev /mnt/proc /mnt/sys /mnt
  110.     sudo reboot
  111.     ```
  112.     Chroot是Linux系统救援中最强大的工具之一,掌握它可以说是每个用户的必备技能。

  113. ### 💎 进阶挑战:编写一个“最小内核”

  114. 当手动修复变得越来越熟练后,你可以尝试更进一步:编写一个简单的程序作为内核,让GRUB来引导它。这能让你对“操作系统是如何启动的”这件事有
  115. 更深的理解。

  116. 你可以用C语言编写一个简单的函数,直接向显存 (`0xB8000`) 写入字符,输出 "Hello, GRUB!"。然后用GRUB的 `multiboot` 命令来加载它。网上有很多
  117. “从零开始写操作系统”的教程可以参考这个有趣的实践。

  118. 上面这些步骤,你可以一步步跟着在虚拟机里操作。如果在某个环节卡住了,比如 `ls` 命令看到的设备和教程里不一样,可以把现象截图发出来,我帮你
  119. 分析下一步该怎么做~
复制代码


normal正常模式

  1. 在 Linux 下使用 QEMU 安装和运行 GRUB,本质上是创建一个虚拟硬盘,然后像在真实物理机上一样,将 GRUB 引导程序安装到该
  2. 虚拟硬盘的主引导记录或 GPT 分区中。

  3. 下面是一个通用的、可直接上手的操作流程。

  4. ### 📋 准备工作

  5. 1.  **安装必要软件**:需要安装 `qemu-system-x86` (或 `qemu-kvm`)、`qemu-utils` 以及 `grub2`。
  6.     ```bash
  7.     # Debian/Ubuntu 及其衍生版
  8.     sudo apt update
  9.     sudo apt install -y qemu-system-x86 qemu-utils grub2

  10.     # Fedora/RHEL/CentOS
  11.     sudo dnf install -y qemu-system-x86 qemu-img grub2-tools
  12.     ```
  13.     > `qemu-utils` (或 `qemu-img`) 用于创建虚拟磁盘,`grub2` (或 `grub-pc-bin`) 提供了 `grub-install` 等关键工具。

  14. ### 💽 第一步:创建并挂载虚拟硬盘

  15. 1.  **创建空白虚拟硬盘文件**:使用 `qemu-img` 创建一个 100MB 的 `raw` 格式镜像文件。`raw` 格式简单,与 `dd` 等基础工具兼容性最好。
  16.     ```bash
  17.     qemu-img create -f raw hd.img 100M
  18.     ```
  19.     > 现在你有了一个名为 `hd.img` 的“空硬盘”。`raw` 格式意味着 QEMU 可以像访问真实物理硬盘一样直接访问它。

  20. 2.  **格式化并挂载**:为了让宿主机能操作这个虚拟硬盘里的文件,需要将其挂载。
  21.     ```bash
  22.     # 将镜像文件连接到空闲的回环设备 (/dev/loop0)
  23.     sudo losetup -f hd.img
  24.     # 格式化这个“硬盘”,创建 ext4 文件系统
  25.     sudo mkfs.ext4 hd.img
  26.     # 将其挂载到 /mnt 目录
  27.     sudo mount hd.img /mnt
  28.     ```
  29.     > 连接成功后,可以用 `sudo losetup -a` 命令查看设备映射关系。

  30. ### 🔧 第二步:在虚拟硬盘上安装 GRUB

  31. 这是最核心的一步。**关键在于 `grub-install` 的目标设备是第一步中映射到的回环设备** (如 `/dev/loop0`),而不是镜像文件本身。

  32. ```bash
  33. # 安装 GRUB 到虚拟硬盘,假设回环设备是 /dev/loop0
  34. sudo grub-install --boot-directory=/mnt/boot --target=i386-pc --force /dev/loop0
  35. ```

  36. *   `--boot-directory=/mnt/boot`:指定 GRUB 存放引导文件的位置。
  37. *   `--target=i386-pc`:明确指定安装适用于传统 BIOS 引导的 GRUB 版本。
  38. *   `--force`:由于目标不是物理磁盘,需要此参数强制安装。
  39. *   `/dev/loop0`:**目标设备**,这是宿主机看到的“虚拟硬盘”。

  40. ### 📝 第三步:创建 GRUB 配置文件

  41. 安装完成后,GRUB 的引导文件位于 `/mnt/boot/grub/`。现在创建一个简单的菜单配置文件 `grub.cfg`,让 GRUB 启动时能显示菜单。

  42. ```bash
  43. # 创建 grub.cfg 文件
  44. sudo tee /mnt/boot/grub/grub.cfg << EOF
  45. # 设置默认启动项为第一个菜单
  46. set default=0
  47. # 设置等待时长为 5 秒
  48. set timeout=5

  49. # 定义一个菜单项,名称为 "My Custom System"
  50. menuentry "My Custom System" {
  51.     # 告知 GRUB 根分区位置,这里指第一块硬盘的第一个分区
  52.     set root='(hd0,msdos1)'
  53.     # 加载 multiboot 模块
  54.     insmod multiboot
  55.     # 加载你独立的汇编软件,这里需要你提供具体的二进制文件路径
  56.     # multiboot /boot/your_software.bin
  57.     echo "Loading your custom software..."
  58. }
  59. EOF
  60. ```
  61. > 目前 `grub.cfg` 只是一个模板,需要根据你后续放入的内核或独立软件进行定制。例如,如果你想从该虚拟硬盘启动一个 Linux 内核,
  62. 需要在此文件中使用 `linux` 和 `initrd` 命令指定内核和 initrd 镜像的路径。

  63. ### 🚀 第四步:用 QEMU 启动

  64. 现在,可以使用 QEMU 启动这台包含 GRUB 的“虚拟机”了。

  65. ```bash
  66. qemu-system-x86_64 -hda hd.img
  67. ```

  68. *   `-hda hd.img`:指定 `hd.img` 作为第一块 IDE 硬盘。
  69. *   **查看效果**:QEMU 窗口会弹出,并显示 GRUB 的启动菜单或命令行界面。

  70. > **无图形界面模式**:如果是在远程服务器或无图形界面的环境中,可以添加 `-nographic` 参数,GRUB 和系统的输出将会重定向到当前
  71. 终端。退出方式通常是先按 `Ctrl + A`,然后按 `X`。

  72. ---

  73. ### 💡 进阶用法

  74. *   **测试 ISO 文件**:如果想测试一个可启动的 ISO 镜像是否支持 GRUB 引导,可以直接将 ISO 文件作为 QEMU 的 CD-ROM 启动。
  75.     ```bash
  76.     qemu-system-x86_64 -cdrom your_bootable_image.iso
  77.     ```

  78. *   **使用 UEFI 引导**:上述步骤是针对传统 BIOS 的。若需测试 UEFI 环境,需要安装 `ovmf` 包,并指定 UEFI 固件:
  79.     ```bash
  80.     sudo apt install ovmf
  81.     qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -hda hd.img
  82.     ```

  83. *   **直接使用 GRUB 作为固件**:Debian 系提供了一个名为 `grub-firmware-qemu` 的软件包,可以生成一个专门的 GRUB 镜像,并直接
  84. 通过 `-bios grub.bin` 参数将其作为 QEMU 的固件来启动。

  85. 你可以参考这个流程创建一个虚拟盘,往里面放入你之前提到的**独立汇编软件**,然后编写 `grub.cfg` 里的 `multiboot` 命令指向它。如果
  86. 你在编写 `grub.cfg` 菜单或放置具体文件时遇到问题,随时可以再问我。
复制代码
 楼主| 发表于 2026-5-15 12:50:29 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-5-17 10:30 编辑

哈工大系统实验的linux0.11
  1. HIT-OSLab---->hit-oslab-linux-20110823.tar.gz------>oslab---->hdc-0.11.img----->image---->linux-0.11文件夹
  2. -------------------------------------------------------->oslab文件夹---->run文件---->执行run文件
  3. hdc-0.11.img里面有Image,双击打开hdc-0.11.img,复制image文件到linux-0.11文件夹,再运行run,./run,就可以了。
复制代码

实验环境的内容,实验的本体linux0.11内容,linux0.11里的结构解构部件内容,部件的内部循环内容,部件里的开关二进制种类内容。
bochsout.txt中文注释,输出信息什么的
  1. 00000000000i[     ] Bochs x86 Emulator 2.3.7                                                 # Bochs x86模拟器启动,版本2.3.7
  2. 00000000000i[     ]   Build from CVS snapshot, on June 3, 2008                              # 编译版本:2008年6月3日的CVS快照
  3. 00000000000i[     ] System configuration                                                    # 系统配置信息开始
  4. 00000000000i[     ]   processors: 1 (cores=1, HT threads=1)                                 # 处理器配置:1个CPU,1核心,1超线程
  5. 00000000000i[     ]   A20 line support: yes                                                 # A20地址线支持:已启用
  6. 00000000000i[     ]   APIC support: no                                                      # 高级可编程中断控制器支持:未启用
  7. 00000000000i[     ] CPU configuration                                                       # CPU配置信息开始
  8. 00000000000i[     ]   level: 5                                                              # CPU级别:5(相当于Pentium级别)
  9. 00000000000i[     ]   SMP support: no                                                       # 对称多处理支持:未启用
  10. 00000000000i[     ]   FPU support: yes                                                      # 浮点运算单元支持:已启用
  11. 00000000000i[     ]   MMX support: yes                                                      # MMX指令集支持:已启用
  12. 00000000000i[     ]   SSE support: no                                                       # SSE指令集支持:未启用
  13. 00000000000i[     ]   CLFLUSH support: no                                                   # CLFLUSH缓存行刷新指令支持:未启用
  14. 00000000000i[     ]   VME support: yes                                                      # 虚拟8086模式扩展支持:已启用
  15. 00000000000i[     ]   3dnow! support: no                                                    # 3DNow!指令集支持:未启用
  16. 00000000000i[     ]   PAE support: no                                                       # 物理地址扩展支持:未启用
  17. 00000000000i[     ]   PGE support: no                                                       # 页全局标志位支持:未启用
  18. 00000000000i[     ]   PSE support: yes                                                      # 页大小扩展支持:已启用
  19. 00000000000i[     ]   x86-64 support: no                                                    # x86-64位模式支持:未启用
  20. 00000000000i[     ]   SEP support: no                                                       # SYSENTER/SYSEXIT快速系统调用支持:未启用
  21. 00000000000i[     ]   MWAIT support: no                                                     # MWAIT电源管理指令支持:未启用
  22. 00000000000i[     ]   XSAVE support: no                                                     # XSAVE处理器状态保存指令支持:未启用
  23. 00000000000i[     ]   AES support: no                                                       # AES加密指令集支持:未启用
  24. 00000000000i[     ] Optimization configuration                                              # 优化配置信息开始
  25. 00000000000i[     ]   Guest2HostTLB support: no                                             # 客户机到宿主机TLB转换支持:未启用
  26. 00000000000i[     ]   RepeatSpeedups support: no                                            # 重复指令加速支持:未启用
  27. 00000000000i[     ]   Icache support: no                                                    # 指令缓存支持:未启用
  28. 00000000000i[     ]   Trace cache support: no                                               # 追踪缓存支持:未启用
  29. 00000000000i[     ]   Fast function calls: no                                               # 快速函数调用支持:未启用
  30. 00000000000i[     ] Devices configuration                                                   # 设备配置信息开始
  31. 00000000000i[     ]   ACPI support: no                                                      # 高级配置与电源接口支持:未启用
  32. 00000000000i[     ]   NE2000 support: no                                                    # NE2000网卡支持:未启用
  33. 00000000000i[     ]   PCI support: no                                                       # PCI总线支持:未启用
  34. 00000000000i[     ]   SB16 support: no                                                      # Sound Blaster 16声卡支持:未启用
  35. 00000000000i[     ]   USB support: no                                                       # 通用串行总线支持:未启用
  36. 00000000000i[     ]   VGA extension support: vbe                                            # VGA扩展支持:VBE(VESA BIOS扩展)
  37. 00000000000i[MEM0 ] allocated memory at 0xeb381010. after alignment, vector=0xeb382000      # 分配内存地址0xeb381010,对齐后为0xeb382000
  38. 00000000000i[MEM0 ] 16.00MB                                                                 # 分配16MB内存空间
  39. 00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/home/digahetudou/HIT-OSLab/oslab/bochs/BIOS-bochs-latest')  # BIOS ROM加载到地址0xfffe0000,大小131072字节
  40. 00000000000i[MEM0 ] rom at 0xc0000/39424 ('/home/digahetudou/HIT-OSLab/oslab/bochs/vgabios.bin')             # VGA BIOS加载到地址0xc0000,大小39424字节
  41. 00000000000i[CMOS ] Using local time for initial clock                                    # CMOS:使用宿主机本地时间作为初始时钟
  42. 00000000000i[CMOS ] Setting initial clock to: Sun May 17 10:20:53 2026 (time0=1778984453)  # CMOS:设置初始时间为2026年5月17日10:20:53
  43. 00000000000i[DMA  ] channel 4 used by cascade                                              # DMA控制器:通道4用于级联
  44. 00000000000i[DMA  ] channel 2 used by Floppy Drive                                         # DMA控制器:通道2用于软盘驱动器
  45. 00000000000i[FDD  ] fd0: '/home/digahetudou/HIT-OSLab/oslab/linux-0.11/Image' ro=0, h=2,t=80,spt=18  # 软驱0:镜像文件路径,可读写,磁头数2,磁道数80,每道扇区数18
  46. 00000000000i[MEM0 ] Register memory access handlers: 0x000a0000 - 0x000bffff               # 内存访问处理程序注册:0xA0000-0xBFFFF范围(VGA内存区域)
  47. 00000000000i[XGUI ] test_alloc_colors: 16 colors available out of 16 colors tried         # X图形界面:测试分配颜色,16种颜色全部可用
  48. 00000000000i[XGUI ] font 8 wide x 16 high, display depth = 24                              # X图形界面:字体宽度8像素,高度16像素,显示深度24位色
  49. 00000000000i[VGA  ] interval=300000                                                        # VGA:刷新间隔300000微秒
  50. 00000000000i[MEM0 ] Register memory access handlers: 0xe0000000 - 0xe07fffff               # 内存访问处理程序注册:0xE0000000-0xE07FFFFF范围(VBE扩展区域)
  51. 00000000000i[VGA  ] VBE Bochs Display Extension Enabled                                    # VGA:VBE Bochs显示扩展已启用
  52. 00000000000i[     ] init_mem of 'harddrv' plugin device by virtual method                  # 硬盘插件设备:通过虚拟方法初始化内存
  53. 00000000000i[     ] init_mem of 'keyboard' plugin device by virtual method                 # 键盘插件设备:通过虚拟方法初始化内存
  54. 00000000000i[     ] init_mem of 'serial' plugin device by virtual method                   # 串口插件设备:通过虚拟方法初始化内存
  55. 00000000000i[     ] init_mem of 'parallel' plugin device by virtual method                 # 并口插件设备:通过虚拟方法初始化内存
  56. 00000000000i[     ] init_mem of 'extfpuirq' plugin device by virtual method                # 扩展FPU中断插件设备:通过虚拟方法初始化内存
  57. 00000000000i[     ] init_mem of 'speaker' plugin device by virtual method                  # 扬声器插件设备:通过虚拟方法初始化内存
  58. 00000000000i[     ] init_dev of 'harddrv' plugin device by virtual method                  # 硬盘插件设备:通过虚拟方法初始化设备
  59. 00000000000i[HD   ] HD on ata0-0: '/home/digahetudou/HIT-OSLab/oslab/hdc-0.11.img' 'flat' mode  # 硬盘:挂载在ATA0-0接口,使用镜像文件hdc-0.11.img,平铺模式
  60. 00000000000i[HD   ] translation on ata0-0 set to 'none'                                    # 硬盘:ATA0-0接口的地址转换设置为'none'(无转换)
  61. 00000000000i[HD   ] Using boot sequence floppy, none, none                                 # 硬盘:启动顺序为软盘、无、无
  62. 00000000000i[HD   ] Floppy boot signature check is enabled                                 # 硬盘:软盘启动签名检查已启用
  63. 00000000000i[     ] init_dev of 'keyboard' plugin device by virtual method                 # 键盘插件设备:通过虚拟方法初始化设备
  64. 00000000000i[KBD  ] will paste characters every 1000 keyboard ticks                        # 键盘:每1000个键盘时钟滴答粘贴一次字符
  65. 00000000000i[     ] init_dev of 'serial' plugin device by virtual method                   # 串口插件设备:通过虚拟方法初始化设备
  66. 00000000000i[SER  ] com1 at 0x03f8 irq 4                                                    # 串口1:I/O端口地址0x03F8,中断请求号4
  67. 00000000000i[     ] init_dev of 'parallel' plugin device by virtual method                 # 并口插件设备:通过虚拟方法初始化设备
  68. 00000000000i[PAR  ] parallel port 1 at 0x0378 irq 7                                         # 并口1:I/O端口地址0x0378,中断请求号7
  69. 00000000000i[     ] init_dev of 'extfpuirq' plugin device by virtual method                # 扩展FPU中断插件设备:通过虚拟方法初始化设备
  70. 00000000000i[     ] init_dev of 'speaker' plugin device by virtual method                  # 扬声器插件设备:通过虚拟方法初始化设备
  71. 00000000000i[SPEAK] Failed to open /dev/console: Resource temporarily unavailable         # 扬声器:无法打开/dev/console设备,资源临时不可用(可忽略)
  72. 00000000000i[SPEAK] Deactivating beep on console                                            # 扬声器:禁用控制台蜂鸣声
  73. 00000000000i[     ] register state of 'harddrv' plugin device by virtual method            # 硬盘插件设备:通过虚拟方法注册状态
  74. 00000000000i[     ] register state of 'keyboard' plugin device by virtual method           # 键盘插件设备:通过虚拟方法注册状态
  75. 00000000000i[     ] register state of 'serial' plugin device by virtual method             # 串口插件设备:通过虚拟方法注册状态
  76. 00000000000i[     ] register state of 'parallel' plugin device by virtual method           # 并口插件设备:通过虚拟方法注册状态
  77. 00000000000i[     ] register state of 'extfpuirq' plugin device by virtual method          # 扩展FPU中断插件设备:通过虚拟方法注册状态
  78. 00000000000i[     ] register state of 'speaker' plugin device by virtual method            # 扬声器插件设备:通过虚拟方法注册状态
  79. 00000000000i[SYS  ] bx_pc_system_c::Reset(HARDWARE) called                                 # 系统:硬件复位函数被调用
  80. 00000000000i[CPU  ] cpu hardware reset                                                      # CPU:CPU硬件复位
  81. 00000000000i[     ] reset of 'harddrv' plugin device by virtual method                     # 硬盘插件设备:通过虚拟方法复位
  82. 00000000000i[     ] reset of 'keyboard' plugin device by virtual method                    # 键盘插件设备:通过虚拟方法复位
  83. 00000000000i[     ] reset of 'serial' plugin device by virtual method                      # 串口插件设备:通过虚拟方法复位
  84. 00000000000i[     ] reset of 'parallel' plugin device by virtual method                    # 并口插件设备:通过虚拟方法复位
  85. 00000000000i[     ] reset of 'extfpuirq' plugin device by virtual method                   # 扩展FPU中断插件设备:通过虚拟方法复位
  86. 00000000000i[     ] reset of 'speaker' plugin device by virtual method                     # 扬声器插件设备:通过虚拟方法复位
  87. 00000000000i[XGUI ] [x] Mouse off                                                           # X图形界面:鼠标已关闭
  88. 00000003445i[BIOS ] $Revision: 1.194 $ $Date: 2007/12/23 19:46:27 $                        # BIOS:版本修订号1.194,编译日期2007年12月23日
  89. 00000317668i[KBD  ] reset-disable command received                                          # 键盘:收到复位禁用命令
  90. 00000336412i[BIOS ] Starting rombios32                                                      # BIOS:开始rombios32初始化(32位BIOS扩展)
  91. 00000337108i[BIOS ] ram_size=0x00f00000                                                     # BIOS:检测到内存大小为0x00F00000(约15MB)
  92. 00000337622i[BIOS ] Found 1 cpu(s)                                                          # BIOS:找到1个CPU
  93. 00000562120i[VBIOS] VGABios $Id: vgabios.c,v 1.66 2006/07/10 07:47:51 vruppert Exp $      # VGA BIOS:版本信息,vgabios.c文件1.66版
  94. 00000562191i[VGA  ] VBE known Display Interface b0c0                                        # VGA:已知的VBE显示接口b0c0
  95. 00000562223i[VGA  ] VBE known Display Interface b0c4                                        # VGA:已知的VBE显示接口b0c4
  96. 00000565148i[VBIOS] VBE Bios $Id: vbe.c,v 1.58 2006/08/19 09:39:43 vruppert Exp $         # VBE BIOS:版本信息,vbe.c文件1.58版
  97. 00000888612i[BIOS ] ata0-0: PCHS=204/16/38 translation=none LCHS=204/16/38                 # BIOS:ATA0-0硬盘参数,物理C/H/S=204/16/38,无转换,逻辑C/H/S=204/16/38
  98. 00001200000i[XGUI ] charmap update. Font Height is 16                                       # X图形界面:字符映射更新,字体高度16像素
  99. 00004768797i[BIOS ] IDE time out                                                            # BIOS:IDE硬盘检测超时(正常现象)
  100. 00004967660i[BIOS ] Booting from 0000:7c00                                                  # BIOS:【关键】开始从内存地址0000:7C00启动(引导扇区位置)
  101. 00016198163i[FDD  ] partial read() on floppy image returns 161/512                         # 软驱:部分读取成功,返回161字节(共512字节)
  102. 00016243118i[FDD  ] read() on floppy image returns 0                                        # 软驱:【错误】读取软盘镜像返回0字节(读取失败)
  103. 00016289318i[FDD  ] read() on floppy image returns 0                                        # 软驱:读取失败,返回0字节
  104. ............若干读取失败...........
  105. 00022413168i[FDD  ] read() on floppy image returns 0                                        # 软驱:读取失败,返回0字节
  106. 00022463638i[BIOS ] int13_harddisk: function 15, unmapped device for ELDL=81               # BIOS:硬盘中断调用,功能15,设备ELDL=81未映射(第二个硬盘不存在)
  107. 00055200000p[XGUI ] >>PANIC<< POWER button turned off.                                      # X图形界面:【致命错误】电源按钮被关闭,系统崩溃
  108. 00055200000i[CPU  ] CPU is in protected mode (active)                                      # CPU:当前处于保护模式(活跃状态)
  109. 00055200000i[CPU  ] CS.d_b = 32 bit                                                         # CPU:代码段默认为32位
  110. 00055200000i[CPU  ] SS.d_b = 32 bit                                                         # CPU:堆栈段默认为32位
  111. 00055200000i[CPU  ] | EAX=0001b140  EBX=00000005  ECX=0001c248  EDX=00000020              # CPU:寄存器EAX、EBX、ECX、EDX的值
  112. 00055200000i[CPU  ] | ESP=0001c0f8  EBP=00021e6c  ESI=00000002  EDI=00000001              # CPU:寄存器ESP(堆栈指针)、EBP(基址指针)、ESI、EDI的值
  113. 00055200000i[CPU  ] | IOPL=0 id vip vif ac vm rf nt of df IF tf sf ZF af PF cf           # CPU:标志寄存器状态(IOPL=0,中断标志IF=1等)
  114. 00055200000i[CPU  ] | SEG selector     base    limit G D                                  # CPU:段寄存器信息表头
  115. 00055200000i[CPU  ] | SEG sltr(index|ti|rpl)     base    limit G D                        # CPU:段寄存器详细信息格式
  116. 00055200000i[CPU  ] |  CS:0008( 0001| 0|  0) 00000000 00000fff 1 1                        # CPU:代码段,选择子0x0008,基址0,限制0x0FFF,G=1(粒度4KB),D=1(32位)
  117. 00055200000i[CPU  ] |  DS:0010( 0002| 0|  0) 00000000 00000fff 1 1                        # CPU:数据段,选择子0x0010,基址0,限制0x0FFF,G=1,D=1
  118. 00055200000i[CPU  ] |  SS:0010( 0002| 0|  0) 00000000 00000fff 1 1                        # CPU:堆栈段,选择子0x0010,基址0,限制0x0FFF,G=1,D=1
  119. 00055200000i[CPU  ] |  ES:0010( 0002| 0|  0) 00000000 00000fff 1 1                        # CPU:附加段,选择子0x0010,基址0,限制0x0FFF,G=1,D=1
  120. 00055200000i[CPU  ] |  FS:0017( 0002| 1|  3) 00000000 0000009f 1 1                        # CPU:附加段FS,选择子0x0017,基址0,限制0x009F,G=1,D=1
  121. 00055200000i[CPU  ] |  GS:0017( 0002| 1|  3) 00000000 0000009f 1 1                        # CPU:附加段GS,选择子0x0017,基址0,限制0x009F,G=1,D=1
  122. 00055200000i[CPU  ] | EIP=00006ac0 (00006ac0)                                              # CPU:指令指针寄存器EIP的值0x00006AC0
  123. 00055200000i[CPU  ] | CR0=0x8000001b CR1=0 CR2=0x08032ef0                                  # CPU:控制寄存器CR0=0x8000001B(保护模式已启用),CR1=0,CR2=0x08032EF0(页错误线性地址)
  124. 00055200000i[CPU  ] | CR3=0x00000000 CR4=0x00000000                                        # CPU:控制寄存器CR3=0(页目录基址),CR4=0
  125. 00055200000i[CPU  ] >> sub ecx, 0x00000004 : 83E904                                        # CPU:最后执行的指令,SUB ECX,4(ECX寄存器减4)
  126. 00055200000i[CMOS ] Last time is 1778984466 (Sun May 17 10:21:06 2026)                     # CMOS:最后一次记录的时间,2026年5月17日10:21:06
  127. 00055200000i[XGUI ] Exit                                                                   # X图形界面:退出
  128. 00055200000i[     ] restoring default signal behavior                                      # 系统:恢复默认信号处理行为
  129. 00055200000i[CTRL ] quit_sim called with exit code 1                                       # 控制器:quit_sim函数被调用,退出代码1(非正常退出)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-6-6 19:48

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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