OSDev http://osdev.su/ |
|
Чтение сектора с флешки начинается с 63 сектора http://osdev.su/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/ |