Search
Write a publication
Pull to refresh

Comments 6

учебная Unix-подобная ОС

Рекомендуем избавиться от Windows установить Linux или использовать WSL2 - Windows Subsystem for Linux 2.

Подождите, подождите, подождите. То есть вы предлагает поставить на linux симулятор linux, чтобы обучаться linux?

Xv6 учит не работе с Linux, а разработке Unix-подобной операционной системы.

QEMU - не симулятор Linux, а эмулятор компьютерного железа. На виртуальном железе вы можете запускать различные ОС.

Xv6 работает на плате RISC-V VirtIO board - в нее входят процессор, оперативная память, ПЗУ с кодом загрузчика ОС, последовательное подключение к клавиатуре и экрану и жесткий диск.

Поставил за 10 мин на Debian 12 Bookworm
qemu-system-riscv64 - 7.2.7
git clone https://github.com/mit-pdos/xv6-riscv
cd xv6-riscv
make qemu
To quit qemu type: Ctrl-a x (press Ctrl and a at the same time, followed by x)

Последующий запуск

Интересней запустить на Open SIMH PDP-11 Emulator или simh первоисточник - Unix V6
Installing and Using Unix V6 in the Open SIMH PDP-11 Emulator
https://decuser.github.io/unix/research-unix/v6/2022/10/19/installing-and-using-research-unix-v6-in-open-simh-pdp-11-emulator.html
https://packages.debian.org/stable/simh

Спасибо за ссылку, теперь знаю, где достать UNIXv6 :)

Да, это круто - запустить древнюю ОС на древнем железе - чувствуешь себя археологом, некрофилом некромантом. Помню, нашел в библиотеке руках древнюю методичку по ассемблеру PDP-11 и трепетно листал :)

А можно пойти еще дальше - завести Multics под DPS8M, почитать мануалы и программировать для Multics на PL/1 :)

Авторы xv6 - преподаватели курса ОС в MIT - учили студентов на UNIXv6 и PDP-11 еще до того как написали xv6. Их UNIX был написан на древнейшем диалекте Си - еще до выхода книги "Язык программирования Си". Авторы поручили студентам писать новую ОС для Intel x86 - Jos. Затем авторы решили, что их курс - по ОС, а не архитектуре, поэтому в 2006-м написали xv6 для x86. Сегодня авторы перевезли xv6 под RISC-V 64.
https://h0rr0rr-drag0n.blogspot.com/2011/02/xv6-6828-mit.html

Хочу поделиться опытом.
Я подкдючил VS code к QEMU и сейчас все делаю из него.
// xv6-riscv/.vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "xv6build",
"type": "shell",
"isBackground": true,
"command": "make qemu-gdb",
"problemMatcher": [
{
"pattern": [
{
"regexp": ".",
"file": 1,
"location": 2,
"message": 3
}
],
"background": {
"beginsPattern": ".*Now run 'gdb' in another window.",
"endsPattern": "."
}
}
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

// xv6-riscv/.vscode/launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "xv6build",
"type": "cppdbg",
"request": "launch",
"program": "{workspaceFolder}/kernel/kernel{workspaceFolder}",
"miDebuggerPath": "/usr/bin/gdb-multiarch",
"miDebuggerServerAddress": "localhost:25000",
"MIMode": "gdb",
"stopAtEntry": true,
"preLaunchTask": "xv6build",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
]
}
]
}

Ну эти два файлика можно найти в интернете без проблем. Но как у Райкина в миниатюре H2O на пару и не работает.
В корневой дирестории появляется файл .gdbinit. В нем надо закомментировать строчку

set confirm off
set architecture riscv:rv64
@REM target remote 127.0.0.1:25000
symbol-file kernel/kernel
set disassemble-next-line auto
set riscv use-compressed-breakpoints yes
add-auto-load-safe-path /home/ub24/xv6-riscv
dc%sCz5VeB Не знаю что это такое. Вроде не должно быть.

У меня UBUNTU-24. Работает под WSL2
до этого момента все по инструкции.
В ubuntu мы находимся в каталоге с xv6. VS code должен быть установлен в Windows.
1 root@Z170M-H3H:/home/ub24/xv6-riscv# code . Точка это часть соманды. Устанавливается VS code сервев и в Windows открывается VS code в папке xv6. В дальнейшем просто печаем code. Точка это часть команды (возможно и без точки можно)
2 ... -> Terminal -> Run Build Task

Executing task: make qemu-gdb
*** Now run 'gdb' in another window.
qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 3 -nographic -global virtio-mmio.force-legacy=false -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 -S -gdb tcp::25000
port 25000 должен быть в launch.json файле

3 Жмем на пиктограмму RUN and Debug и жмем на треугольник. За треугольником должно быть как в файле
lanch.json "name": "xv6build",

4 Запускается GDB. Смотреть в Debug Console

Проблема была в строчек в файле .gdbinit.
Мне понадибилось две недели бессоных ночей чтобы это понять.
Всем УДАЧИ.

Перед запуском GDB надо установать точку останова (на main в файле main.c например)

Sign up to leave a comment.

Articles