Делимся опытом Наступив на грабли - сообщи другим! Обмен опытом разработки и ремонта электронных устройств. |
26.10.2012, 18:42
|
#5231
|
Вид на жительство
Регистрация: 07.01.2007
Адрес: Ленинградская обл
Сообщений: 428
Сказал спасибо: 147
Сказали Спасибо 71 раз(а) в 56 сообщении(ях)
|
Re: Linux-ваше мнение
а конкретно,
Сообщение от urmlr
|
А не подскажете ли уважаемый, в каком именно месте линуксового дискового драйвера Вы нашли такую задержку, желательно, с именем файла и номером строчки, хоть приблизительно.
А заодно, не могли бы ли Вы разъяснить механизм потери прерывания "во время этого процесса" пожалста?
|
kernel\linux-3.5.7\arch\c6x\include\asm\delay.h
не откажу себе в "удовольствии" процитировать:
static inline void __delay(unsigned long loops)
{
uint32_t tmp;
/* 6 cycles per loop */
asm volatile (" mv .s1 %0,%1\n"
"0: [%1] b .s1 0b\n"
" add .l1 -6,%0,%0\n"
" cmplt .l1 1,%0,%1\n"
" nop 3\n"
: "+a"(loops), "=A"(tmp));
}
static inline void _c6x_tickdelay(unsigned int x)
{
uint32_t cnt, endcnt;
asm volatile (" mvc .s2 TSCL,%0\n"
" add .s2x %0,%1,%2\n"
" || mvk .l2 1,B0\n"
"0: [B0] b .s2 0b\n"
" mvc .s2 TSCL,%0\n"
" sub .s2 %0,%2,%0\n"
" cmpgt .l2 0,%0,B0\n"
" nop 2\n"
: "=b"(cnt), "+a"(x), "=b"(endcnt) : : "B0");
}
/* use scaled math to avoid slow division */
#define C6X_NDELAY_SCALE 10
static inline void _ndelay(unsigned int n)
{
_c6x_tickdelay((ticks_per_ns_scaled * n) ›› C6X_NDELAY_SCALE);
}
static inline void _udelay(unsigned int n)
{
while (n ›= 10) {
_ndelay(10000);
n -= 10;
}
while (n-- › 0)
_ndelay(1000);
}
теперича смотрим, где в драйверах АТА встречается этот udelay
например, здесь:
kernel\linux-3.5.7\drivers\ata\pata_legacy.c
outb(inb(0x1F4) & 0x07, 0x1F4);
rt = inb(0x1F3);
rt &= 0x07 ‹‹ (3 * adev-›devno);
if (pio)
rt |= (1 + 3 * pio) ‹‹ (3 * adev-›devno);
udelay(100);
outb(inb(0x1F2) | 0x01, 0x1F2);
udelay(100);
inb(0x1F5);
и дальше мне разбираться леньки. Если он некорректно установит режим, а потом вздумает читать данные с начала диска, можем поиметь то, что я имел.
и даже так:
/* software reset. causes dev0 to be selected */
iowrite8(ap-›ctl, ioaddr-›ctl_addr);
udelay(20); /* FIXME: flush */
iowrite8(ap-›ctl | ATA_SRST, ioaddr-›ctl_addr);
udelay(20); /* FIXME: flush */
iowrite8(ap-›ctl, ioaddr-›ctl_addr);
ap-›last_ctl = ap-›ctl;
Фикс ми! - пищит этот фрагмент
смотрим - для нек устр-в пофиксено, для нек нет
Вот ещё фрагментик, не точно на эту тему, но характерный
/* clear start/stop bit */
out_be32(bmid_base + SCC_DMA_CMD,
in_be32(bmid_base + SCC_DMA_CMD) & ~ATA_DMA_START);
кто программировал DMA, оценит
вот интересно, во что компилится сие чудо. Неужели нельзя было написать в кодах. аааааа они потерялись в то ли не знают ассемблера в то ли стремились к переносимости кода, который по содержанию в принципе никуда кроме x86 непереносим
Что до возможной потери прерываний, каюсь и приношу извинения: примера сейчас найти не могу. Но помню, что искал и врожде находил работу с прерываниями ATA и именно с задержечками подобного стиля.
так вот если на контроллер поступает NMI вроде клавы (возможно, не любой контролеер, но типичный легальный), то он мёртв для прерываний, пока в порт 20 не выдадут, если не ошибаюсь, тоже 20. И эти места страшно критичны по времени обработки.
"Не покажет и не разъяснит, ибо исходники не смотрел. Или смотрел, но ничего не понял. И его опус расчитан на тех, кто тоже не смотрел."
я нисколько не шучу, и это не просто флейм. Если речь просто о соединении цветных финтифлюшек, то с таким софтом ра.. видеть его на экране можно. Если речь о реальной работе, шлагбаум.
Если таких штук, как вышеприведённые задержки и работа с DMA, в какой-то пррограмме нет, то она вполне может быть глючной по другим причинам. Но здесь всё, шлагбаум, поймите, пожалуйста!
на какой-то конкретной машине оно может заработать. На другой будет не работать начиная с установки или, например, портить конкретный диск, как было у меня. Но и где работает, может преподнести сюрприз.
С портами ввода-вывода и устр-вами вроде DMA работают так только в учебниках, где показывают "мощь" и читабельность языка С. А также в соотв. студенческих упражнениях.
Всё, стираю с диска эту курсовую на 130 мегабайт
Последний раз редактировалось hacker7; 26.10.2012 в 18:59.
|
|
|
|
26.10.2012, 19:17
|
#5232
|
Прописка
Регистрация: 30.10.2008
Сообщений: 146
Сказал спасибо: 14
Сказали Спасибо 63 раз(а) в 39 сообщении(ях)
|
Re: Linux-ваше мнение
Сообщение от KBH-I
|
мне ставить Линукс не на десктоп, а на нетбук.
|
Сидел год на нетбуке (SamsungN150) с убунтой. Не работало "искаропки" только сочетания клавиш Fn+xx, но гуглением решилось - подключил нужный источник и оно само все доставило. Устанавливал еще на несколько машин, выявилось несколько проблем с поддержкой железа. Без проблем рабтают видеокарты от nVidia и Intel, с ATI\AMD наблюдались проблемы. Так же проблемы были с wifi-модулями Boardcom. Athreos и Intel заводились нормально и без глюков.
--------------------
По поводу внешнего вида "а-ля винда" - а оно надо? Не тошнит от стандартных виндовых тем? Особенно на нетбуке, с его маленьким разрешением. У моего было разрешение 1024х600(10"), в результате от стандартного убунтовского Гнома мало что осталось. Все нужные кнопки\функции перенесены на верхнюю панель, сама панель убирающаяся. Вместо нижней панели использовал CairoDock, в котором была настроена 3D-анимация иконок и всплывающих меню. От вида крутящихся иконок "девочки повизгивали". После пары дней работы с таким интерфейсом уже этих "девочек" начинало тошнить от стандартного виндового интерфейса с намертво прибитыми кнопками.
----------------
ЗЫ:Оффтоп: Копипаст Ctrl+C & Ctrl+V не работает только у меня или с форумом что-то?
__________________
Будь человеком, и к тебе потянутся.
(с)Первый закон зомби-апокалипсиса
|
|
|
|
26.10.2012, 20:54
|
#5233
|
Гражданин KAZUS.RU
Регистрация: 02.11.2008
Адрес: Одесса
Сообщений: 668
Сказал спасибо: 336
Сказали Спасибо 328 раз(а) в 182 сообщении(ях)
|
Re: Linux-ваше мнение
Сообщение от Watsen
|
с ATI\AMD наблюдались проблемы.
|
как и с другими дешевыми поделками.
AMD не стремятся выпускать дровишки на своё железо НЕ под винду.
Да и качество их железок ИМХО оставляет желать им .... нет, не оставляет.
|
|
|
|
26.10.2012, 20:59
|
#5234
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: Linux-ваше мнение
Сообщение от b_raven
|
Да и качество их железок ИМХО оставляет желать им .... нет, не оставляет.
|
тема нового холивара...
|
|
|
|
26.10.2012, 21:40
|
#5235
|
Частый гость
Регистрация: 03.02.2008
Сообщений: 16
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Linux-ваше мнение
Сообщение от KBH-I
|
Для тех, кто в танке, повторяю: мне ставить Линукс не на десктоп, а на нетбук.
|
Был у жены Asus eeePC 701 surf (600MHz, 500MB DDR2, 2GB SSD) собирал (через net install) для него Ubuntu 10.04, врезая офис, нормальные кодеки, аськи, скайпы и нетбук-лаунчер т.к. экран был мелкий. Итог: 96MB использованного ОЗУ, 2х гиговый SSD забит в притык, кеши браузера и темпы в RAM-RUNе, чтобы видео на YOUTUBе не тупило разгонял ЦП до 900, все работало (именно работало), а не тупило, как в винде после установки на нее антивируса. К тому же Windows XP сжирала эти 2ГБ в течении пары месяцев, не оставляя места для другого софта.
Потом у нее был Asus eeePC 1005HA. Ничего не собирая, поставил и обрезал Ubuntu 11.04, допилил кнопки Function
Следующий Samsung NP-N110 - обрезок Ubuntu 12.04 c юнити. Помимо кастрации (30мин.) пять минут потрачено на решение проблем с выдоом из спящего режима и с функциональными клавишами. Кушает эта дрянь 180 метров памяти.
У самого: Samsung NP-X420 (до этого Samsung NP-R20). Пилил Debian через все тот же нет-инсталл . Оболочка XFCE ака "крыса", ядро скомпилил за вечер. Рекорд потребления ОЗУ 69МБ + 1,5ГБ на рэмран, ибо SSD. Ломал себе внутричерепное вещество, месяц компилируя, ищя недостающие пакеты нужный версий и разбираясь с конфликтами. Цель танцов была в том, как на ЦП SU2300 и графике 4500MHD запустить full-HD через HDMI.
На полочке красавчеГ Sony Vaio PCG-505TS 1999года, тоньше макбука айр. 300MHz 64RAM 6.4GB - винды ставиться не захотели ввиду "своих" соньковских адресов IDE контроллера - влез туда Debian 4 c IceWM с ручным прописываем адресов винта и сидюка (два вечера плясок с бубном)
Почему именно Бубунта и ее папа дебиан? - да просто потому, что не надо (а если и надо, то только минимум) почти ничего компилировать, как в Генту, кастрируется на ура (или ставится через NET), жрет гораздо меньше Мандрив, кривость почти отсутсвует (чего не сказать про мелкие недодистры, которых была перепробована тма) и в репах есть ТУЧА софта (от игрушек до 3D планировки квартир, софта для программаторов и чтения кода ошибок авто)
P.S. на шиша лепятся дистрибутивы НА ОСНОВЕ убунты - для меня загадка. Хотя, скорее всего, разрабы денег пытаются срубить, продав бесплатный линукс как творчество свих кривых ручерек (Infralinux, Росинка, UALinux, Runtu, BolgenOS ). Стороной от этих быдлосборщиков в последний год встал Mint, пытаясь показать миру, что Canonical не права (но все равно у Минта апдейты кривые, руссификация порой неполная, репы бывает падают, мэйндистрибутив тормозит на половине оборудования)
|
|
|
|
26.10.2012, 21:45
|
#5236
|
Частый гость
Регистрация: 03.02.2008
Сообщений: 16
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Linux-ваше мнение
Сообщение от b_raven
|
как и с другими дешевыми поделками.
AMD не стремятся выпускать дровишки на своё железо НЕ под винду.
Да и качество их железок ИМХО оставляет желать им .... нет, не оставляет.
|
С драйверами под *nix-ы у них всяко лучше, чем у интела и разных ВИЙ. Из выявленных тенденций - желание класть болты на пользователей, сидящих на старом АТИшном железе.
С качеством absolutely согласен - оно воняет и не потонет (... а то как это так... монополии вырисовываются)
|
|
|
|
26.10.2012, 22:35
|
#5237
|
Почётный гражданин KAZUS.RU
Регистрация: 15.07.2009
Адрес: San Jose, USA
Сообщений: 927
Сказал спасибо: 11
Сказали Спасибо 228 раз(а) в 166 сообщении(ях)
|
Re: Linux-ваше мнение
Сообщение от hacker7
|
а конкретно,
kernel\linux-3.5.7\arch\c6x\include\asm\delay.h
не откажу себе в "удовольствии" процитировать:
|
Хм, с6х - это Техасские ДСП, на которых и линух-то нормальный не бегает, только uClinux, нечто вроде WinCE... То есть, это никак не Интел-АМД...
В х86 как раз задержка сделана нормально, через TSC. Это раз...
Сообщение от hacker7
|
теперича смотрим, где в драйверах АТА встречается этот udelay
например, здесь:
kernel\linux-3.5.7\drivers\ata\pata_legacy.c
|
pata_legacy драйверы работают по PIO, у них нет ни DMA, ни прерываний. Так что, даже и в busy-loop можно ждать, всё равно всё это работает при разрешённых прерываниях.
Не совсем корректная оценка у Вас, уважаемый.
Плюс:
Сообщение от hacker7
|
Вот ещё фрагментик, не точно на эту тему, но характерный
/* clear start/stop bit */
out_be32(bmid_base + SCC_DMA_CMD,
in_be32(bmid_base + SCC_DMA_CMD) & ~ATA_DMA_START);
кто программировал DMA, оценит
|
А что Вам, собссно, не понравилось? Читается регистр и пишется обратно как был, за исключением одного единственного бита, ATA_DMA_START, который как раз сброшен в 0.
Сообщение от hacker7
|
вот интересно, во что компилится сие чудо. Неужели нельзя было написать в кодах. аааааа они потерялись в то ли не знают ассемблера в то ли стремились к переносимости кода, который по содержанию в принципе никуда кроме x86 непереносим
|
Ошибаетесь, уважаемый. Причём по полной программе, по самое "нехочу"
Именно потому и написаны все эти inb/outb/in_be32 и иже с ними, чтобы на каждой платформе компилялись во что-то на этой платформе работающее, а вовсе не потому что товарисчи в ассемблер не въезжают.
У меня лично компиляется и работает и на ARMах и на MIPSах. Не легаси конечно, но очень похожий код в других драйверах.
Вы шо же думаете, мало было таких, которые прибегали и требовали написать на ассемблере? А также таких что требовали перейти на С++? Отстреливать не успеваем! (шютка ) Только вот эти товарисчи Ваши, как раз, и не понимают ничего.
Сообщение от hacker7
|
Что до возможной потери прерываний, каюсь и приношу извинения: примера сейчас найти не могу. Но помню, что искал и врожде находил работу с прерываниями ATA и именно с задержечками подобного стиля.
|
Судя по тому, как Вы для, по Вашему же мнению (хоть и неверному), кода, который работает исключительно на х86, приводите пример задержки из кода техасского дсп, неудивительно что найдёте всё что угодно .
Сообщение от hacker7
|
"Не покажет и не разъяснит, ибо исходники не смотрел. Или смотрел, но ничего не понял. И его опус расчитан на тех, кто тоже не смотрел."
Всё, стираю с диска эту курсовую на 130 мегабайт
|
К сожалению, смотреть исходники и понимать их - это не одно и то же.
Вообще, Билл Гейтс очень умный человек. Недаром он своих исходников не даёт никому, ибо знает что полно таких вот, которые посмотрят и не поняв начнут глаголить. А ему это нахрена?
Так что, гоняйте его код, уважаемый, который Вы никогда не видели и не увидите. И Вам, и нам спокойнее
|
|
|
|
27.10.2012, 11:24
|
#5238
|
Частый гость
Регистрация: 13.06.2009
Сообщений: 7
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Linux-ваше мнение
Сообщение от KBH-I
|
Для тех, кто в танке, повторяю: мне ставить Линукс не на десктоп, а на нетбук. На нём стояла предустановленная 7, дико тормозила, поставил ХР. Дрова под ХР на его железо не рассчитаны, хотя и совместимы - имхо, самодельные или плохо крякнутые.
Так вот: который из Линуксов мне на него ставить, если даже под ХР на него нормальных дров нет?
|
Я на свой Asus1201PN - Linux Mint поставил, всё оборудование подхватлось, даже в командировках сканеры, принтеры, мфу и камеры втыкал - работает всё и сразу, без какого либо инета и обновления дров
Последний раз редактировалось UdAvSt; 27.10.2012 в 11:27.
|
|
|
|
27.10.2012, 18:28
|
#5239
|
Вид на жительство
Регистрация: 07.01.2007
Адрес: Ленинградская обл
Сообщений: 428
Сказал спасибо: 147
Сказали Спасибо 71 раз(а) в 56 сообщении(ях)
|
Re: Linux-ваше мнение
Насчёт фрагмента с DMA
dMA не будет перепрограммирован на 50% машин, потому что вот именно здесь задержка нужна. Т е указанный бит не будет изменен
Я указал, что фрагмент -типичен-, то есть такое далеко не в одном месте. Это изменение бита просто выхвачено наугад, увидел по ходу среди множества очень похожих фрагментов в самых разных местах.
И я не случайно написал "во что оно компилируется"? вдруг он решит прочитать регистр 2 раза. Не для всех регистров это допустимо.
Теперь вернемся к установке режима PIO (приведённый мной фрагмент). Если указанная в тексте задержка не подойдёт (а это опять-таки весьма вероятно, потому что код писался, когда процессоры были медленнее в 10 раз), то режим не будет установлен.
Смотрим:
машина работала в винде. Установлен режим DMA
не выключая, загрузили этот линь. Инициализация не прошла из-за неверных задержек. Так и остался режим DMA. Теперь винт делает неизвестно что и -пишет неизвестно что- или -читает неизвестно куда-.
Замечу, что в моём случае залётов это был не загрузочный винт на отдельном шлейфе.
Ваше замечание про то, что приведенный пример неактуален, принимаю лишь наполовину. Я НЕ ЗНАЮ, какой контроллер стоял на той машине; но я посмотрел всю директорию с драйверами, там такое почти везде за искл 1-2. Вы можете сказать, что это ваще не для той платформы - но там везде только такое, исключения единичны. Пример же с работой с DMA, повторю, просто выхвачен из текстов наугад, это типично, там практически весь код такой.
Кто не верит, смотрите код ядра сами.
Каждый, кто разрабатывал приложения на микрухах, знаком с такой ситуацией: что-то оно почему-то не работает, хотя все сделано правильно по листочкам. - а ты вставь задержку. - вставили, работает. Это годится для конкретной прошивки на конкретное железо, которое не будет изменяться, и то очень желательно потом всё-таки найти грамотное решение. То есть это, в сущности, затычка при спешке.
Теперь видим такое в ядре линукс - систематически. Но железо сильно меняется. Те константы циклов, что работали на Пентиум-100, могут не пройти на 2 Ггц. А могут и пройти. В основном зависит от чипсета.
А что надо было делать?
Грамотную службу управления времением, грамотный диспетчер ресурсов и задач и т п
Что из классических школьных вещей не сделано в винде, это известно, перечислять не буду. Сошлюсь на результаты иссл. Насси-Шнейдермана: пользователь терпит такие недостатки, которые проявляются предсказуемо. В винде глюки проявляются более-менее предсказуемо. Здесь - когда залетит винт, неизвестно. После удаления линукса не залетал ни разу. Прошло примерно 2 года.
Здесь был возможен такой подход: как только появились стирания начала винта, надо было более внимательно прочесть исходники, предварительно определив, какие микросемы стоят в машине, и какой именно модуль следует смотреть (вот как Вы пишете). Найти ошибку именно в соотв модуле притом именно того ядра (конкретно это было какое-то SUSE с ядром версии меньше 3) Исправить ошибку, КТО ЖЕ МНЕ МЕШАЕТ, РАЗ Я ТАКОЙ УМНЫЙ?!
но я линукс просто снял с реальной работы, и вот докладываю
Последний раз редактировалось hacker7; 27.10.2012 в 18:52.
|
|
|
|
27.10.2012, 22:23
|
#5240
|
Почётный гражданин KAZUS.RU
Регистрация: 15.07.2009
Адрес: San Jose, USA
Сообщений: 927
Сказал спасибо: 11
Сказали Спасибо 228 раз(а) в 166 сообщении(ях)
|
Re: Linux-ваше мнение
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:23.
|
|