OSDev
http://osdev.ru/

Чтение сектора с флешки начинается с 63 сектора
http://osdev.ru/viewtopic.php?f=6&t=470
Страница 1 из 1

Автор:  Станислав [ 24 ноя 2011, 06:50 ]
Заголовок сообщения:  Чтение сектора с флешки начинается с 63 сектора

У флешки есть пораметр Hidden sectors равен 63
В пакете для int13 42h нужно указывать номер второго сектора как 63+1
Я с этим месяц промучился.

Хочю спросить теперь как считать с флешки 300 секторов в верхнюю память
Как пкркйти в длинный реальный режим и откуда начинается верхняя память??
она начинается после одного мегабайта(1мб нужно пропустить) или с 0????

В учебниках написано, что процес перехода в большой реальный режим это переход в зашишеный и возврат в реальный, но у нас открывается верхняя память до 4гб, потом можно уже перейти в 64битный еше больший режим.
Но в нереальном режиме есть прирывания биуса и верхняя память, а в зашишеном нету прерываний биуса, есть приоритеты процесов, а в нереальном есть?
В зашишеном нету 64битного смешения, а в нереальном есть?

если не закроим прерывания камп повиснет в процесе перехода, если не настроим регистры тоже повиснет.

cli ; запрещаем прерывания
push ds ; сохраняем реальный режим
lgdt [gdtinfo] ; грузим gdt регистр
mov eax, cr0 ; переходим в защищёнку
or al,1 ; установив pmode бит
mov cr0, eax
mov bx, 0x08 ; выбераем дескриптор 1
mov ds, bx ; 8h = 1000b ; Почему 8h откуда, и что дает, видел пример с 18h
and al,0xFE ; возвращаемся в реальный режим
mov cr0, eax
pop ds ; возвращаем старый сегмент
sti

Мне не понятно от чего зависит заполнение таблицы lgdt и на что это влияет

Автор:  pavia [ 24 ноя 2011, 18:53 ]
Заголовок сообщения:  Re: Чтение сектора с флешки начинается с 63 сектора

Цитата:
У флешки есть пораметр Hidden sectors равен 63
В пакете для int13 42h нужно указывать номер второго сектора как 63+1
Я с этим месяц промучился.

Фантом уже сказал про это повторю другими словами.
Ты при записи данных на флешку перепутал физический диск и логический.
И записал данные на логический. Отсюда и пропущенные 63 сектора.

Физический диск разбивается на логические диски. Логический диск также называют разделом диска.

Цитата:
Как пкркйти в длинный реальный режим и откуда начинается верхняя память??

Для перехода в длинный режим надой... Так стоп. Опять ты определения путаешь.
Real Mode - реальный режим. (Режим совместимости с 8086)
Protected Mode - защищенный режим (Основной режим процессоров IA32)
Long Mode - длинный режим (Основной режим процессоров x86-64(обозначение intel) и AMD64 (обозначение AMD))
Big Mode - большой режим
Big Memory Mode - режим большой памяти
UnReal Mode - нереальный режим
Virtual Mode 86 - виртуальный режим 86 (режим эмуляции 8086)

Так вот Big Mode, Big Memory Mode, UnReal Mode - это один и тот же режим просто его по разному называют.

Переход в любой из этих режимов расписан в интернете подробно.

Верхняя Память начинается с 1мегабайта. Более точно границу можно узнать используя прерывания БИОСа int 15h SMAP. Тебе про это уже говорили. А для удобства использования так как она может быть фрагментной, её надо собрать используя страницы.

Цитата:
она начинается после одного мегабайта(1мб нужно пропустить) или с 0????

Почему с 0???

Цитата:
Но в нереальном режиме есть прирывания биуса и верхняя память, а в зашишеном нету прерываний биуса, есть приоритеты процесов, а в нереальном есть?

Хе-Хе. Сам то понял что написал? ;-) Нереальный режим это реальный режим просто у сегментных регистров предел выставлен на 4ГБ. Так что прерывания работают как в обычном реальном режиме.
Для 64-битных процессоров тоже есть свой нереальный режим у которого предел выставлен на 2^64.


Цитата:
Мне не понятно от чего зависит заполнение таблицы lgdt и на что это влияет

Ты вообще что нибудь про защищенный режим читал? Таблица называется GDT. LGDT сокращение от Load GDT. Заполнение зависит от желания программиста и ограничений процессора.
В GDT находятся описателе сегментов. Сегментые регистры(CS,DS,ES,SS,FS,GS) состоят из двух частей видимой и скрытой. В видемой находится индекс из GDT или LDT (индекс- это порядковый номер элемента массива).
В скрытой части загружается сам описатель сегмента.
Таблица GDT нужна для организации защиты в виде сегментов. К примеру так можно сделать ограничения на стек. И в случае если он переполниться то он не испортит не код не данные. Также этот код позволяет запретить исполнения данных в стеке. Тем самым побороть вирусы которые используют уязвимость "срыв стека".
Плюс позволяет отделить обработчики прерываний и исключений, от кода основной программы.
Отладка это процесс поиска ошибок. Если не настроить обработку исключений то компьютер будет зависать или перезагружаться при малейшей ошибке. Но даже если ты настроишь обработчики исключений и прерываний, то поведение программы может оказаться не предсказуемым. Гипотетически к примеру указатель выйдет за приделы массива и может дойти до кода обработчика и затереть его. Или код может установить не правильный сегмент стека.
Защита позволяет сделать поведение ОС более стабильной.

Автор:  Yoda [ 25 ноя 2011, 11:28 ]
Заголовок сообщения:  Re: Чтение сектора с флешки начинается с 63 сектора

Вот только теперь начинается самая $%ля.
Скажу тебе, что со своим подходом ты не оцениваешь масштабы работы, в которую ввязался. Начальная загрузка - это всё мелочи.
1. Подучи архитектуру x86.
2. Научись переводить проц в Protected mode или Long mode. Заодно определись, в каком режиме будет работать твоя ОС. Для защищённого режима есть неплохие пошаговые уроки от Алексея Фрунзе: http://members.tripod.com/protected_mod ... mtuts.html На месяц возни хватит. Только не надо по каждому чиху компилятора бежать на форум, это некрасиво. Привыкай ставить сотни экспериментов, гуглить, обращаться к докам и первоисточникам и только когда поймёшь, что иначе не получается, пиши на форум.
3. Когда освоишь ВСЕ уроки, будешь способен работать с прерываниями, клавиатурой, исключениями, защитой памяти, простым переключением задачь и пр. Теперь надо вплотную заняться памятью. Сначала надо УЧЕСТЬ всю память компа. Здесь хорошая статья и исходный код (включая мои правки и дополнения), как это сделать: http://wiki.osdev.org/Detecting_Memory_%28x86%29
4. Научись определять возможности процессора (как минимум CPUID), сохранять их и использовать то, что доступно.
5. Теперь пиши менеджер памяти. Изучай алгоритмы аллокирования и освобождения страниц, совместный доступ к памяти, виртуальную память.
6. Теперь пиши многозадачность. Изучай алгоритмы распределения времени, очереди задачь, приоритеты и пр.
7. Теперь переходи к драйверам устройств. Тебе понадобятся драйвера видюшки (самое сложное), клавиатуры и мыши, накопителей и пр.
8. Дальше следует научиться работать с файловыми системами и реализовать файловый ввод/вывод. По ряду причин не стоит сразу кидаться разрабатывать свою ФС, поработай с имеющимися.
9. Вот только здесь можно будет написать первый полноценный "Hello, World" под своей осью. Заодно реализовать консоль, GUI и основные системные сервисы.

Общие советы:
- Учи английский. Иначе уже на третьем шаге возникнут серьёзные сложности. Про остальное даже не говорю.
- Хорош работать с реальным железом. Запаришься каждый раз перегружать систему и будешь ломать себе голову, как узнать, что происходит. Поставь себе Bochs и работай на эмуляторе. Кроме драйверов для реального железа и проверки работы на разных ЦПУ и мамках (BIOSах) всё остальное можно сделать в Bochs-е. Заодно работа в Боксе поможет тебе и остальным определить, где именно глючит код, т.к. условия Бокса хорошо воспроизводимы и переносимы. Кроме того, в Боксе нет проблем с выводом отладочной информации из любого режима в любой момент времени. "out 0E9h, al" выводит символ в отладочную консоль.
- Заведи привычку каждому вопросу сначала смотреть доки на osdev-ресурсах, мануалы и даташиты, чужой открытый код. По большому счёту там почти всё есть.

PS
Я сегодня очень добрый, поэтому разродился таким длинным и подробным постом :).

Автор:  JSON [ 09 дек 2011, 13:42 ]
Заголовок сообщения:  Re: Чтение сектора с флешки начинается с 63 сектора

Yoda писал(а):
Вот только теперь начинается самая $%ля.
Скажу тебе, что со своим подходом ты не оцениваешь масштабы работы, в которую ввязался. Начальная загрузка - это всё мелочи.
1. Подучи архитектуру x86.
2. Научись переводить проц в Protected mode или Long mode. Заодно определись, в каком режиме будет работать твоя ОС. Для защищённого режима есть неплохие пошаговые уроки от Алексея Фрунзе: http://members.tripod.com/protected_mod ... mtuts.html На месяц возни хватит. Только не надо по каждому чиху компилятора бежать на форум, это некрасиво. Привыкай ставить сотни экспериментов, гуглить, обращаться к докам и первоисточникам и только когда поймёшь, что иначе не получается, пиши на форум.
3. Когда освоишь ВСЕ уроки, будешь способен работать с прерываниями, клавиатурой, исключениями, защитой памяти, простым переключением задачь и пр. Теперь надо вплотную заняться памятью. Сначала надо УЧЕСТЬ всю память компа. Здесь хорошая статья и исходный код (включая мои правки и дополнения), как это сделать: http://wiki.osdev.org/Detecting_Memory_%28x86%29
4. Научись определять возможности процессора (как минимум CPUID), сохранять их и использовать то, что доступно.
5. Теперь пиши менеджер памяти. Изучай алгоритмы аллокирования и освобождения страниц, совместный доступ к памяти, виртуальную память.
6. Теперь пиши многозадачность. Изучай алгоритмы распределения времени, очереди задачь, приоритеты и пр.
7. Теперь переходи к драйверам устройств. Тебе понадобятся драйвера видюшки (самое сложное), клавиатуры и мыши, накопителей и пр.
8. Дальше следует научиться работать с файловыми системами и реализовать файловый ввод/вывод. По ряду причин не стоит сразу кидаться разрабатывать свою ФС, поработай с имеющимися.
9. Вот только здесь можно будет написать первый полноценный "Hello, World" под своей осью. Заодно реализовать консоль, GUI и основные системные сервисы.

Общие советы:
- Учи английский. Иначе уже на третьем шаге возникнут серьёзные сложности. Про остальное даже не говорю.
- Хорош работать с реальным железом. Запаришься каждый раз перегружать систему и будешь ломать себе голову, как узнать, что происходит. Поставь себе Bochs и работай на эмуляторе. Кроме драйверов для реального железа и проверки работы на разных ЦПУ и мамках (BIOSах) всё остальное можно сделать в Bochs-е. Заодно работа в Боксе поможет тебе и остальным определить, где именно глючит код, т.к. условия Бокса хорошо воспроизводимы и переносимы. Кроме того, в Боксе нет проблем с выводом отладочной информации из любого режима в любой момент времени. "out 0E9h, al" выводит символ в отладочную консоль.
- Заведи привычку каждому вопросу сначала смотреть доки на osdev-ресурсах, мануалы и даташиты, чужой открытый код. По большому счёту там почти всё есть.

PS
Я сегодня очень добрый, поэтому разродился таким длинным и подробным постом :).


Вроде как уже не первый месяц этим занимаюсь, а столько нового узнал только в одном сообщении!
Вы ж разработчики! Почему не оптимизируете. Выложи сей текст ввиде статьи в раздел вики или какой-то другой. Потом вместо писанины можно просто кидать ссылки.

Получается "сапожники без сапог". Писать туториалы и делиться опытом через форум, как показывает практика, всегда заканчивается повторными вопросами.

PS Когда появиться нормальный справочник? А то раздел вики и по дезайну, и по структуре, и по рекламе - УГ.

Автор:  Станислав [ 09 дек 2011, 14:24 ]
Заголовок сообщения:  Re: Чтение сектора с флешки начинается с 63 сектора

StasBaybak писал(а):
Получается "сапожники без сапог". Писать туториалы и делиться опытом через форум, как показывает практика, всегда заканчивается повторными вопросами.


Я так понял, что делиться на самом деле особо нечем. После загрузчика идут драйвера и на этом усё. Даже мышку юсб ни где не нароеш, ни у кого не спросиш, даже если разберешся с опросом устройств pci. Что уж говорить про остальное.

Автор:  JSON [ 09 дек 2011, 14:36 ]
Заголовок сообщения:  Re: Чтение сектора с флешки начинается с 63 сектора

Станислав писал(а):
StasBaybak писал(а):
Получается "сапожники без сапог". Писать туториалы и делиться опытом через форум, как показывает практика, всегда заканчивается повторными вопросами.


Я так понял, что делиться на самом деле особо нечем. После загрузчика идут драйвера и на этом усё. Даже мышку юсб ни где не нароеш, ни у кого не спросиш, даже если разберешся с опросом устройств pci. Что уж говорить про остальное.


Я сам такой же. Особой литературы тут нет, гнет туториалов, нет статей. И самое минимальное и нужное, ссылок на полезные источники - нет.
Гугл и фантазии по "какие ключевые слова мне вводить для поиска".

Я свой блог создал, буду туда писать ВСЕ!

От "ЙА ХАЧУ ПИСАТЬ СВАЙУ ОС!!!111 ШТО МНЕ ДЕЛАТЬ???" до "капризы порта 0xF0 под ARM в ограниченном просранстве ядра с багом по адрессу 0х0106656"

Автор:  Станислав [ 09 дек 2011, 15:11 ]
Заголовок сообщения:  Re: Чтение сектора с флешки начинается с 63 сектора

У меня была идея придумать архитектуру оси (т.е расположение её частей в оперативной памяти и их связи), здесь тебя ни кто не ограничивает. В создании графической части тебя ни кто не ограничивает, достаточно простого видео режима. Можно рисовать шрифты, иконки, виджеты (что я сейчас и делаю).
И третья часть аппоратная поддержка, здесь глухо. пока даже мышки нету(думаю всё таки ps2 выцепить, с usb вообще глухо).

Автор:  Yoda [ 09 дек 2011, 18:05 ]
Заголовок сообщения:  Re: Чтение сектора с флешки начинается с 63 сектора

StasBaybak писал(а):
Почему не оптимизируете. Выложи сей текст ввиде статьи в раздел вики или какой-то другой. Потом вместо писанины можно просто кидать ссылки.

Если на практике внять совету "учить английский", то можно увидеть, что на самом деле почти всё есть и много чего расписано по шагам. Есть англоязычная осдев-вика, где куча полезной информации и обширный форум. Далее, написание ОС "только для русских" - заведомо бесперспективное занятие, поэтому знание английского языка из "рекомендуемого" (для тех, кто осдевом занимается в качестве домашнего хобби) переходит в категрию "обязательного" (для тех, кто надеется на практический выхлоп). Кроме того, русскоязычных ОС-девелоперов не так много. Большинство хорошо пользуются документацией и вопросы возникают всё больше конкретного плана, а не общего. Предполагается, что че-к, решивший потратить кучу времени на разработку ОС уже достаточно хорошо представляет себе работу имеющихся ОС в теории и на практике.

StasBaybak писал(а):
делиться опытом через форум, как показывает практика, всегда заканчивается повторными вопросами.

Помимо разработок, будучи занят ещё и поддержкой своих изделий на форуме, могу констатировать, что даже если все рецепты жирным шрифтом будут написаны на главной странице, всё равно будут одни и те же вопросы. Например, че-к попавший на мой сайт, вместо раздела "поддержка", где сразу крупными красными буквами написаны сслыки на драйвер и ПО, регистрируется на форуме и пишет: "обыскал весь интернет, не смог найти драйвер, помогите!". Мало того, он пишет это в теме "ГДЕ НАЙТИ ДРАЙВЕР", где в нескольких ответах на точно такие же предыдущие посты уже не раз дали прямую ссылку на драйвер. Я не знаю, как это классифицировать, я уже смирился и даже не нервничаю. Особенности функционирования "галавнога мозга".

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/