找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 761|回复: 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
复制代码
 楼主| 发表于 3 天前 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-5-14 11:41 编辑

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正常模式
 楼主| 发表于 前天 12:50 | 显示全部楼层
本帖最后由 zzz19760225 于 2026-5-15 12:58 编辑

哈工大系统实验的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里的结构解构部件内容,部件的内部循环内容,部件里的开关二进制种类内容。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-17 09:17

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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